# kubeupdate **Repository Path**: yunwe/kubeupdate ## Basic Information - **Project Name**: kubeupdate - **Description**: 通过POST请求更新Kubernetes资源 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-15 - **Last Updated**: 2025-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: Kubernetes, Python, cicd, Jenkins ## README ## kubeupdate ### 介绍 通过POST请求更新Kubernetes资源,**支持Kubernetes 1.20.15 ~~ Kubernetes 1.28.0**,其他版本未测试。 ## 安装部署 > 项目必须部署到Kubernetes集群里!! ### 镜像选择 #### 自行构建镜像 ```shell git clone https://gitee.com/yunwe/kubeupdate.git cd kubeupdate docker build -t harbor.com/kubeupdate:0.1 . && docker push harbor.com/kubeupdate:0.1 ``` #### 使用已有镜像 ``` registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.6.5 ``` ### 部署Kubeupdate 除了deployment的yaml文件外,其他的都是权限获取和绑定,没有绑定集群角色将无法修改资源 ```bash kubectl apply -f https://gitee.com/yunwe/kubeupdate/raw/master/docs/kubeupdate-install.yml ``` ## 使用说明 ### 部署测试用例 先部署一个测试的应用 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.20 ports: - containerPort: 80 - name: tomcat image: tomcat:9.0 ports: - containerPort: 8080 ``` ### 调用接口更新 #### 方法1 application/json(JSON格式) Pod如果有多个容器,必须添加一个`container`参数,指定容器名称: ```shell script curl -X POST http://192.168.1.38:30002/update_image -H "Content-Type: application/json" -d '{ "name": "nginx-deployment", "namespace": "default", "image": "tomcat:9-jdk11", "resource_type": "deployment", "container": "tomcat", "token": "PXhNVVVgMDdWKCrvPHOlwGseVMBscEXJKmAcrxltVQtTeNJQrMBMEIqUWSKJulDaFUUgy" }' ``` 如果只有一个容器,则不需要指定: ```shell curl -X POST http://192.168.1.38:30002/update_image -H "Content-Type: application/json" -d '{ "name": "nginx-deployment", "namespace": "default", "image": "nginx:1.22", "resource_type": "deployment", "token": "PXhNVVVgMDdWKCrvPHOlwGseVMBscEXJKmAcrxltVQtTeNJQrMBMEIqUWSKJulDaFUUgy" }' ``` 参数说明 | 参数 | 说明 | 是否必须 | | ------------- | ------------------------------------------------------------ | -------- | | name | 资源名称 | 是 | | namespace | 命名空间名称 | 是 | | image | 镜像地址 | 是 | | resource_type | 资源类型,支持 deployment \| stateful_set \| daemon_set \| job \| cron_job,资源类型的名称不能错! | 是 | | container | 容器名称,pod如果有多个容器,则必须添加 | 否 | | token | 携带Token,上面是默认的,可以通过环境变量的形式注入Token | 是 | #### 方法2 application/x-www-form-urlencoded(表单) 格式 ```shell curl --location --request POST http://192.168.1.38:30002/update_image2 \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Bearer '${Token}'' \ --data-urlencode 'project='${serverName}'' \ --data-urlencode 'namespace='${namespace}'' \ --data-urlencode 'image='${imageName}'' \ --data-urlencode 'resource_type='deployment'' ``` 参数说明 | 参数 | 说明 | 是否必须 | | ------------- | ------------------------------------------------------------ | -------- | | project | 资源名称 | 是 | | namespace | 命名空间名称 | 是 | | image | 镜像地址 | 是 | | resource_type | 资源类型,支持 deployment \| stateful_set \| daemon_set \| job \| cron_job,资源类型的名称不能错! | 是 | | container | 容器名称,pod如果有多个容器,则必须添加 | 否 | | token | 携带Token,上面是默认的,可以通过环境变量的形式注入Token | 是 | ### 应用回滚 #### 1. 回滚到特定版本 ```bash curl -X POST \ http://your-api/rollback \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "namespace": "default", "deployment": "frontend", "revision": 2 }' #或者 curl -X POST http://192.168.1.38:30002/rollback -H "Content-Type: application/json" -d '{ "name": "nginx-deployment", "namespace": "default", "token": "PXhNVVVgMDdWKCrvPHOlwGseVMBscEXJKmAcrxltVQtTeNJQrMBMEIqUWSKJulDaFUUgy", "revision": 2 }' ``` #### 2. 触发普通回滚(重新部署) ```bash curl -X POST \ http://your-api/rollback \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "namespace": "default", "deployment": "frontend" }' #或者 curl -X POST http://192.168.1.38:30002/rollback -H "Content-Type: application/json" -d '{ "name": "nginx-deployment", "namespace": "default", "token": "PXhNVVVgMDdWKCrvPHOlwGseVMBscEXJKmAcrxltVQtTeNJQrMBMEIqUWSKJulDaFUUgy" }' ``` ## 镜像版本说明 > 从0.3.3及以后版本基础功能不影响,均可正常使用 | 镜像版本 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.6.4 | 修复多容器镜像管理、运行无法找到模块 | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.6 | 函数拆分、添加回滚功能 | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.5.1 | [修复视图名称冲突](https://gitee.com/yunwe/kubeupdate/commit/38c5b8cfbaf4a55418030e0aaf190f47d3ec85ad) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.5 | [支持application/x-www-form-urlencoded请求格式](https://gitee.com/yunwe/kubeupdate/commit/202052f317b14ba0ff707b07f01a86c32b587a77) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.4.12 | 部分日志输出调整 | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.4.11 | [修复key为空异常处理](https://gitee.com/yunwe/kubeupdate/commit/88ae137632e671d24c3ea765512f051a8f6d7a8a) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.4.0 | [新增资源更新后的状态推送](https://gitee.com/yunwe/kubeupdate/commit/f4d71cd592f826b6a7e99e766ead7a2033aa1236) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.3.4 | [修复无法匹配AppsV1Api对象属性](https://gitee.com/yunwe/kubeupdate/commit/d015ae56765aa1b699f087477f1368f0ffd60882) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.3.3 | [优化浏览器输出编码错误](https://gitee.com/yunwe/kubeupdate/commit/7df91b651a83593d7f507506231f00d30dc0ff51)、Pod无法遍历、优化逻辑 | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.2 | [修复多容器必须指定容器名称](https://gitee.com/yunwe/kubeupdate/commit/3c2a84cfc2273cd33e41136dcb1f4cc57ffe54a9) | | registry.cn-hangzhou.aliyuncs.com/huang-image/kubeupdate:0.2 | [程序调试验证](https://gitee.com/yunwe/kubeupdate/commit/cb13b5b17f3f2ef1c61cb5467367721babd934c1) |