20230701kubesphere修复bug方案

0.背景

 

kubesphere有点小bug想修一修,准备搭一个本地的环境。

利用最新版的kubekey已经可以支持搭建自定义域名的harbor当作镜像中心了,利用这个镜像中心可离线或加速安装当前官网文档上的kubersphere和k8s。

当安装完成后进入负责安装的pod内查看来下,发现是/shell-operator在运行,打算从这个东西入手来尝试搞清楚kubesphere的安装和运行逻辑,从而对现有的kubesphere做补丁升级

1.首先搞明白自动安装原理

前置知识:kubectl、shell-operator、python、ansible

https://github.com/kubesphere/ks-installer/blob/20a6daa18adf10410a385b48ab2769e55d8bdee2/Dockerfile.complete#L8 我们可以看到主入口的程序来源是https://github.com/flant/shell-operator  这是一个运行在k8s集群中事件驱动脚本的工具。

根据https://github.com/flant/shell-operator/blob/55ca7a92c873cccfdad0c7591048eaeb8cf0dd4b/docs/src/HOOKS.md?plain=1#L11 描述shell-operator默认会递归扫描hooks目录下的文件把按文件的标准输出当作声明监听event

根据https://github.com/kubesphere/ks-installer/blob/20a6daa18adf10410a385b48ab2769e55d8bdee2/Dockerfile#L5 可知controller下的文件会被放到/hooks下作为监听,其中包括installerRunner.py

https://github.com/kubesphere/ks-installer/blob/20a6daa18adf10410a385b48ab2769e55d8bdee2/controller/installRunner.py#L30C12-L30C32 可知installRunner.py会在ClusterConfiguration创建或更新的时候被触发。

从 https://github.com/kubesphere/kubekey/blob/ffaa19f430a6b13aa219c7ec699fc2ea705c3a93/cmd/kk/pkg/kubesphere/modules.go#L101 可找到这个触发动作

TODO 待详细查看触发动作中yaml是否包含版本参数

https://github.com/kubesphere/ks-installer/blob/20a6daa18adf10410a385b48ab2769e55d8bdee2/controller/installRunner.py#L338C41-L338C53 可以看到实际执行动作的是ansible

2.修改方案

根据上面说明可知控制链路是kubekey->ks-installer->shell-operator->ansible->kubectl->kubesphere服务组件
  1. fork官方代码修改后重新制作镜像,获得一个独立的docker镜像地址+tag
  2. 更新kubesphere服务组件的镜像tag,根据和kubesphere距离可选
    1. 通过修改对应的Pod声明
    2. 通过修改ClusterConfiguration间接触发shell-operator
    3. 通过修改kubekey配置文件

3.bug列表

  1. 多集群管理下,toolkit只显示master集群的kubectl config。https://github.com/kubesphere/kubesphere/issues/5766
  2. toolkit的提示文案未和当前用户身份做匹配,用户无权限的按钮也有提示文案
  3. 筛选某个namespace的资源后,跳转到pvc后过滤条件丢失
0 Comments
Leave a Reply