前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于kubernetes Api完成更新镜像版本

基于kubernetes Api完成更新镜像版本

作者头像
py3study
发布2020-08-10 10:19:55
发布2020-08-10 10:19:55
1.8K0
举报
文章被收录于专栏:python3

一、概述

kubernetes Api python client 相关内容信息 Github地址: https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md

目前公司才用的镜像更新的方式为,jenkins服务器执行一个镜像更新shell脚本,脚本中通过使用ansible从而达到从kubernetes master执行更新命令,从而达到镜像版本的更新。

后期需考虑逐步通过python得到需更新的镜像,与版本以及deployment直接通过调用kubernetes Api完成对更镜像的版本更新。

所以特此学习Kubernetes Api 熟悉该Api的调用

二、代码实现

环境说明

系统

k8s版本

docker版本

ip

主机名

配置

centos 7.6

1.18.1

19.03.5

10.212.20.94

k8s-master

2核4G

centos 7.6

1.18.1

19.03.5

10.212.21.159

k8s-node01

2核4G

centos 7.6

1.18.1

19.03.5

10.212.22.192

jenkins

2核4G

安装模块

登录jenkins服务器,执行

代码语言:javascript
复制
pip3 install kubernetes

拷贝k8s config

登录jenkins服务器,拷贝k8s master节点的$HOME/.kube/config文件

代码语言:javascript
复制
scp 10.212.20.94:/root/.kube/config .

python脚本

举例:将应用 flaskapp-1的镜像地址更改为:nginx:1.12

登录k8s-master节点,查看一下当前的镜像地址

代码语言:javascript
复制
[root@k8s-master ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
flaskapp-1-54b8675b87-8rsnf   1/1     Running   0          22s
[root@k8s-master ~]# kubectl get po flaskapp-1-54b8675b87-8rsnf -o yaml|grep '\- image:'
  - image: jcdemo/flaskapp

可以看到,当前的镜像地址为:jcdemo/flaskapp

登录jenkins服务器,编辑文件test.py,完整内容如下:

代码语言:javascript
复制
# !/usr/bin/python3
# -*- coding: utf-8 -*-
'''replace_namespace_deployment,快速替换deployment需要升级或回滚的镜像'''

import os
from kubernetes import client, config
from kubernetes.client.rest import ApiException


def read_deployment(name, namespace, update_image):
    body = api_instance.read_namespaced_deployment(name, namespace)
    # 修改镜像版本为指定
    body.spec.template.spec.containers[0].image = update_image
    return body


def replace_deployment(name, namespace, body):
    try:
        api_response = api_instance.replace_namespaced_deployment(name, namespace, body)
        print("\033[0;32m{} 中deployment : {} {}更新完成\033[0m".format(namespace, name, update_image))
    except ApiException as e:
        print("Exception when calling AppsV1Api->replace_namespaced_deployment: %s\n" % e)


if __name__ == "__main__":
    # kubernetes生成时/root目录下.kube目录下的认证配置文件
    kube_conf = os.path.join('/root/config')
    config.load_kube_config(kube_conf)
    api_instance = client.AppsV1Api()

    # 传入参数配置
    name = 'flaskapp-1'
    namespace = 'default'
    update_image = 'nginx:1.12'

    # 调用函数
    body = read_deployment(name, namespace, update_image)
    replace_deployment(name, namespace, body)

说明:

kube_conf 指定k8s的认证配置文件,在上面的步骤中,我scp到/root目录了。

name 表示应用名,也就是Deployment中,定义的name变量。

namespace 命名空间

update_image 需要更新的镜像地址

执行python脚本

代码语言:javascript
复制
python3 test.py

输出:

代码语言:javascript
复制
default 中deployment : flaskapp-1 nginx:1.12更新完成

三、验证

此时,登录主机k8s-master,查看pods

代码语言:javascript
复制
# kubectl get pods
NAME                          READY   STATUS              RESTARTS   AGE
flaskapp-1-54b8675b87-8rsnf   1/1     Running             0          6m40s
flaskapp-1-856b8bf88d-zhvvp   0/1     ContainerCreating   0          12s

发现应用正在更新中

等待1分钟,再次查看

代码语言:javascript
复制
[root@k8s-master ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
flaskapp-1-856b8bf88d-zhvvp   1/1     Running   0          56s
[root@k8s-master ~]# kubectl get po flaskapp-1-856b8bf88d-zhvvp -o yaml|grep '\- image:'
  - image: nginx:1.12

发现镜像地址已经更改过来了!

本文参考链接:

https://blog.csdn.net/weixin_44956450/article/details/101160820

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、代码实现
    • 环境说明
      • 安装模块
        • 拷贝k8s config
          • python脚本
          • 三、验证
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档