概述

请思考以下场景:

你们已经有了一套发布平台,用于生产环境或者开发,测试,预发布和生产都已经在使用了,然后你也想推广容器平台,但是容器平台的界面和现有的发布平台是割裂的,而且现有的数据也没法用到容器平台,要怎么做才能实现两个平台的整合呢?

解决思路:

由于没有大规模使用过容器来跑业务应用,你希望把容器平台作为测试环境,那么你可以这样做,把生成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调用方法相关推荐

  1. python爬虫接口_python爬虫之百度API调用方法

    调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'ke ...

  2. 有道接口php,php有道翻译api调用方法实例,php有道api实例

    php有道翻译api调用方法实例,php有道api实例 本文实例讲述了php有道翻译api调用方法,这里我们利用了file_get_contents函数直接读取由api返回的数据进行处理,分享给大家供 ...

  3. php有道,PHP实例:php有道翻译api调用方法实例

    <PHP实例:php有道翻译api调用方法实例>要点: 本文介绍了PHP实例:php有道翻译api调用方法实例,希望对您有用.如果有疑问,可以联系我们. PHP学习调用之前我们需申请一个有 ...

  4. saltstack一些常用模块和api调用方法

    研究可执行模块的时候,发现很多自带的模块已经很完善,可以帮助我们完成日常工作了,这里写入自己的记录操作: 1.使用salt.clien调用接口操作举例: >>> import sal ...

  5. 大模型开发(四):OpenAI API调用方法

    全文共8500余字,预计阅读时间约17~30分钟 | 满满干货(附代码示例),建议收藏! 代码下载点这里 一.获取OpenAI的API keys 前提:拥有OpenAI账户,并可以魔法上网 如果涉及账 ...

  6. Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法

    话不多说,看效果图: 先说下原理: 微信接收到你说的话,发给机器人来回复,用回复的话传参给斗图网,然后获得斗图网返回的图片,保存后把图片再发给跟你斗图的人. 斗图啦官网API调用文档 斗图啦官网 菜单 ...

  7. 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |   Max Woolf 编译 |  刘淑雯 编译 |  林檎 报道 | 数据实战派 编者按:在今年5月29日,OpenAI 发表了一篇关于 GPT ...

  8. 十八、阿里云api调用

    sdk参考下载地址: https://developer.aliyun.com/tools/sdk#/python pip安装sdk: pip install aliyun-python-sdk-ec ...

  9. 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 ~ ...

最新文章

  1. 注册中心 Eureka 源码解析 —— 应用实例注册发现(五)之过期
  2. POJ 1014: Dividing
  3. 用上AI后,银行每年竟然能多赚1万亿美元丨麦肯锡最新调查报告
  4. 理解oauth2.0【转载】
  5. MySQL连接查询的分类
  6. 用DTS将 SQLServer 导出到 Oracle
  7. VSCode自定义代码片段9——JS中的面向对象编程
  8. Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
  9. screen乱码问题
  10. Oracle认证/维保技术支持服务找重庆思庄
  11. Java 多线程面试问题
  12. 安装VMware时,出现 安装程序无法继续 Microsoft Runtime DLL 安装程序未能完成安装,解决方法
  13. iOS Programming - Disallow Alphabetic Characters
  14. 【饥荒脚本】饥荒控制台代码自动输入
  15. hacker与cracker区别
  16. SQLite使用模糊查询
  17. 没什么,国内做任何大项目,不外乎人情.技术是次要的
  18. 【全网力荐】堪称最易学的Python基础入门教程
  19. 《C陷阱与缺陷》第三章阅读笔记
  20. OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子)

热门文章

  1. 解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
  2. 思考:测试人员如何快速成长
  3. C语言校园超市管理系统
  4. C语言中void*详解及应用
  5. FTX 基金会资助1500万帮助新冠疫苗临床实验,将影响全球公共卫生
  6. 2020年,多源域适应(域迁移) MDA最新方法总结综述
  7. 【JavaSE】封装与继承,访问限定符的总结
  8. 【财富空间】曾国藩:三分精明,七分厚道,做人最高境界
  9. php八进制十六进制,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...
  10. 数据分析的五大用处,你都知道吗?