为kubernetes集群中,由deployment方式进行部署的服务提供image版本回滚功能

需求场景

  1. 当master节点上存放的yaml无法在使用kubect set image时进行同步更新

  2. 官方提供的—record参数仅可能在kubectl set image时使用,回滚还需要额外的回滚操作命令,没有统一的UI界面

服务描述

  1. 提供展示部署后所有命名空间下的Deployment的容器镜像信息

  2. 提供回滚到对应版本的按钮update

  3. 提供本地存储的yaml文件预览(鼠标滑动到对应的yaml路径即可)

  4. 清理不需要的镜像版本信息delete(假删除,数据库中还有记录)

  5. 修复k8simage-operator中Create,Update event多次触发Reconcile方法

  6. 增加对容器列表增加和减少场景的处理

部署配置

需要准备一个mysql5.7的数据库服务,需提前建立好数据库,项目数据库名为:kube-deploymentimage,可使用下面sql进行创建即可。

1
CREATE DATABASE IF NOT EXISTS `kube-deploymentimage` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

由部署文件中的变量MYSQL_HOST、MYSQL_USER、MYSQL_PASSWORD进行传递,例如:

1
2
3
4
5
6
7
env:
- name: MYSQL_HOST
value: **
- name: MYSQL_USER
value: **
- name: MYSQL_PASSWORD
value: **

如果需要开启密码认证,由部署文件中的变量auth.user、auth.password进行传递,如果不需要则去掉此两项配置,例如:

1
2
3
4
5
env:     
- name: auth.user
value: **
- name: auth.password
value: **

kube-deploymentimage默认会统计集群中所有的Deployment,yamlfile文件在部署kube-deploymentimage容器时,此处默认挂载了/etc/kubernetes目录到容器中的/etc/kubernetes,使用nodeselector默认调度到master1,即存放yaml的机器。不存在目录也不影响使用

想展示yaml的本地文件内容,需要在deployment中添加  annotations信息,例如:   

1
2
3
4
5
6
7
8
9
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-k8s-nginx
annotations:
yamlfile.huisebug.io/yamlfile: /etc/kubernetes/test-k8s-nginx/test-k8s-nginx.yaml
name: test-k8s-nginx

yamlfile.huisebug.io/yamlfile是固定字段,后面是对应的yaml的文件路径(注意:填写挂载到kube-deploymentimage容器中的路径)

UI效果预览

项目地址

https://github.com/huisebug/kube-deploymentimage.git