Openshift API调用方法
概述
请思考以下场景:
你们已经有了一套发布平台,用于生产环境或者开发,测试,预发布和生产都已经在使用了,然后你也想推广容器平台,但是容器平台的界面和现有的发布平台是割裂的,而且现有的数据也没法用到容器平台,要怎么做才能实现两个平台的整合呢?
解决思路:
由于没有大规模使用过容器来跑业务应用,你希望把容器平台作为测试环境,那么你可以这样做,把生成Dockerfile和Template的界面移到发布平台,然后发布平台调用openshift API来实现整合。
本文就来讲讲如何调用openshift API 。
获取access token
详细请参考上一篇文章:Openshift API Token生成方法
新建项目
请求:
curl -k -v -XPOST \
-H "Authorization: Bearer $token" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
https://example.test.com:8443/apis/project.openshift.io/v1/projectrequests \
-d "{\"kind\":\"ProjectRequest\",\"apiVersion\":\"project.openshift.io/v1\",\"metadata\":{\"name\":\"project_name\",\"creationTimestamp\":null}}"
返回:
code: 201 #创建成功
code: 200 #ok
code: 202 #Accepted
code: 401 # unauthorized
删除项目
请求:
curl -k -v -XDELETE \-H "Authorization: Bearer $token" \-H "Accept: application/json" \-H "Content-Type: application/json" \https://example.test.com:8443/apis/project.openshift.io/v1/projects/project_name
返回:
code: 200 # 删除成功
body:
{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Success"}
code: 401 # unauthorized
code: 404 # Not Found
获取所有项目列表和每个项目中的发布实例名称
请求:
curl -k -v -XGET \-H "Authorization: Bearer $token" \-H "Accept: application/json" \https://example.test.com:8443/apis/apps.openshift.io/v1/deploymentconfigs
返回:
code: 200 #成功
body:
{"kind": "DeploymentConfigList","apiVersion": "apps.openshift.io/v1","metadata": {"selfLink": "/apis/apps.openshift.io/v1/deploymentconfigs","resourceVersion": "38784201" },"items": [{"metadata": {"name": "jenkins","namespace": "ci",.......},{ "metadata": {"name": "test","namespace": "test",.......},........]........}
code: 401 # unauthorized
推送镜像到OpenShift内部镜像库
假如你在外面已经生成好了镜像,然后想把镜像推送到OpenShift内部镜像库。
推送镜像(也可以调用docker的API来做,这里采用简单些的办法)
⚠️openshift镜像库是在集群内部,只能采用service IP/name和端口访问,所以推送镜像所在机器需要在集群内。
docker login -u $user -p $access_token docker-registry.default.svc:5000 && \
docker tag $image_name:$tag docker-registry.default.svc:5000/$project/$image_name:$tag && \
docker push docker-registry.default.svc:5000/$project/$image_name:$tag
发布镜像
以devops-team项目中的nginx-example实例为例说明
请求:
curl -X POST -kv \"https://example.test.com:8443/apis/apps.openshift.io/v1/namespaces/devops-team/deploymentconfigs/nginx-example/instantiate?pretty=true" \-H "accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \-d "{ \"apiVersion\": \"apps.openshift.io/v1\", \"force\": true, \"kind\": \"DeploymentConfig\", \"latest\": true, \"name\": \"nginx-example\"}"
返回:
code: 201 #触发发布成功
body:
{
"kind": "DeploymentConfig",
"apiVersion": "apps.openshift.io/v1",
"metadata": {
"name": "nginx-example",
"namespace": "devops-team",..........}
code: 200 # ok
code: 202 # accepted
code: 401 # unauthorized
查看发布状态
要获取上面的发布:nginx-example的发布状态,就需要先获取最近一次发布的名称:nginx-example-?
请求:
查看deploymentconfi: nginx-example的信息
curl -k -v -XGET \-H "Authorization: Bearer $token" \-H "Accept: application/json" \https://example.test.com:8443/apis/apps.openshift.io/v1/namespaces/devops-team/deploymentconfigs/nginx-example
返回:
code: 200 # 成功
body:
{"kind": "DeploymentConfig","apiVersion": "apps.openshift.io/v1","metadata": {},"spec": {},"status": {"latestVersion": 3,"observedGeneration": 4,"replicas": 1,........}}
由此可以得出最近一次的发布名称是nginx-example-3
code: 401 # unauthorized
获取最近一次发布的pod的运行状态
请求:
curl -k -v -XGET \-H "Accept: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/api/v1/namespaces/devops-team/pods?labelSelector=deployment=nginx-example-3,deploymentconfig=nginx-example,name=nginx-example
返回:
code: 200 # 成功
body:
{"kind": "PodList","apiVersion": "v1","metadata": {},"items": [{"metadata": {},"spec": {},"status": {"phase": "Running","conditions": [],"hostIP": "10.131.32.3","podIP": "10.129.104.40","startTime": "2018-11-13T09:40:10Z","containerStatuses": [],"qosClass": "Burstable"}]}}
由此可以得出pod运行状态为Running,pod已经在跑了,
如果状态是Failed,说明发布失败了,
如果是Waiting,说明在等待。
code: 401 # unauthorized
导入模版
实现web-console里面的import template功能需要分两步,第一步要把template文件转成对象为List的各个Resource对象,第二步是创建生成的各个Resource。
要实现第一个API要提交的参数非常多,包含了template中所有的参数,所以我们绕过第一步,直接生成各个Resource对象的json或yaml格式的内容,然后调用相关的API创建对象。
下面举例说如何创建各个对象。
创建Service对象
请求:
curl -k -v -XPOST \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/api/v1/namespaces/demo-au/services \-d "{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"description":"Exposes and load balances the application pods"},"labels":{"template":"demo-au"},"name":"demo-au","namespace":"demo-au"},"spec":{"ports":[{"name":"nginx","port":80,"targetPort":80}],"selector":{"name":"demo-au"}}}"
返回:
code: 201 #创建成功
code: 409 #对象已经存在
code: 401 # unauthorized
创建Route对象
请求:
curl -k -v -XPOST \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/oapi/v1/namespaces/demo-au/routes \-d "{"apiVersion":"v1","kind":"Route","metadata":{.......}}"
返回:
code: 201 #创建成功
code: 409 #对象已经存在
code: 401 # unauthorized
创建imagestream对象
请求:
curl -k -v -XPOST \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/oapi/v1/namespaces/demo-au/imagestreams \-d "{"apiVersion":"v1","kind":"ImageStream","metadata":{.......}}"
返回:
code: 201 #创建成功
code: 409 #对象已经存在
code: 401 # unauthorized
创建deploymentconfig对象
请求:
curl -k -v -XPOST \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/oapi/v1/namespaces/demo-au/deploymentconfigs \-d "{"apiVersion":"v1","kind":"DeploymentConfig","metadata":{.......}}"
返回:
code: 201 #创建成功
code: 409 #对象已经存在
code: 401 # unauthorized
创建secret对象
请求:
curl -k -v -XPOST \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Authorization: Bearer $token" \https://example.test.com:8443/api/v1/namespaces/demo-au/secrets \-d "{"apiVersion":"v1","kind":"Secret","metadata":{.......}}"
返回:
code: 201 #创建成功
code: 409 #对象已经存在
code: 401 # unauthorized
更多容器技术请关注公众号:
Openshift API调用方法相关推荐
- python爬虫接口_python爬虫之百度API调用方法
调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'ke ...
- 有道接口php,php有道翻译api调用方法实例,php有道api实例
php有道翻译api调用方法实例,php有道api实例 本文实例讲述了php有道翻译api调用方法,这里我们利用了file_get_contents函数直接读取由api返回的数据进行处理,分享给大家供 ...
- php有道,PHP实例:php有道翻译api调用方法实例
<PHP实例:php有道翻译api调用方法实例>要点: 本文介绍了PHP实例:php有道翻译api调用方法实例,希望对您有用.如果有疑问,可以联系我们. PHP学习调用之前我们需申请一个有 ...
- saltstack一些常用模块和api调用方法
研究可执行模块的时候,发现很多自带的模块已经很完善,可以帮助我们完成日常工作了,这里写入自己的记录操作: 1.使用salt.clien调用接口操作举例: >>> import sal ...
- 大模型开发(四):OpenAI API调用方法
全文共8500余字,预计阅读时间约17~30分钟 | 满满干货(附代码示例),建议收藏! 代码下载点这里 一.获取OpenAI的API keys 前提:拥有OpenAI账户,并可以魔法上网 如果涉及账 ...
- Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法
话不多说,看效果图: 先说下原理: 微信接收到你说的话,发给机器人来回复,用回复的话传参给斗图网,然后获得斗图网返回的图片,保存后把图片再发给跟你斗图的人. 斗图啦官网API调用文档 斗图啦官网 菜单 ...
- 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」
关注:决策智能与机器学习,深耕AI脱水干货 作者 | Max Woolf 编译 | 刘淑雯 编译 | 林檎 报道 | 数据实战派 编者按:在今年5月29日,OpenAI 发表了一篇关于 GPT ...
- 十八、阿里云api调用
sdk参考下载地址: https://developer.aliyun.com/tools/sdk#/python pip安装sdk: pip install aliyun-python-sdk-ec ...
- OpenPose Python API调用:ImportError: cannot import name 'pyopenpose' from 'openpose'
OpenPose Python API 调用方法 cmake-gui选项中勾选BUILD_PYTHON选项 cd build sudo make -j'' sudo make install cd ~ ...
最新文章
- 注册中心 Eureka 源码解析 —— 应用实例注册发现(五)之过期
- POJ 1014: Dividing
- 用上AI后,银行每年竟然能多赚1万亿美元丨麦肯锡最新调查报告
- 理解oauth2.0【转载】
- MySQL连接查询的分类
- 用DTS将 SQLServer 导出到 Oracle
- VSCode自定义代码片段9——JS中的面向对象编程
- Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
- screen乱码问题
- Oracle认证/维保技术支持服务找重庆思庄
- Java 多线程面试问题
- 安装VMware时,出现 安装程序无法继续 Microsoft Runtime DLL 安装程序未能完成安装,解决方法
- iOS Programming - Disallow Alphabetic Characters
- 【饥荒脚本】饥荒控制台代码自动输入
- hacker与cracker区别
- SQLite使用模糊查询
- 没什么,国内做任何大项目,不外乎人情.技术是次要的
- 【全网力荐】堪称最易学的Python基础入门教程
- 《C陷阱与缺陷》第三章阅读笔记
- OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子)
热门文章
- 解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
- 思考:测试人员如何快速成长
- C语言校园超市管理系统
- C语言中void*详解及应用
- FTX 基金会资助1500万帮助新冠疫苗临床实验,将影响全球公共卫生
- 2020年,多源域适应(域迁移) MDA最新方法总结综述
- 【JavaSE】封装与继承,访问限定符的总结
- 【财富空间】曾国藩:三分精明,七分厚道,做人最高境界
- php八进制十六进制,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...
- 数据分析的五大用处,你都知道吗?