0.背景
kubesphere有点小bug想修一修,准备搭一个本地的环境。
利用最新版的kubekey已经可以支持搭建自定义域名的harbor当作镜像中心了,利用这个镜像中心可离线或加速安装当前官网文档上的kubersphere和k8s。
当安装完成后进入负责安装的pod内查看来下,发现是/shell-operator在运行,打算从这个东西入手来尝试搞清楚kubesphere的安装和运行逻辑,从而对现有的kubesphere做补丁升级
0 1 2 3 4 5 6 7 8 9 10 |
ubuntu@k8s1:~$ kubectl exec -it -n kubesphere-system ks-installer-566ffb8f44-l769h -- bash ks-installer-566ffb8f44-l769h:/kubesphere$ pwd /kubesphere ks-installer-566ffb8f44-l769h:/kubesphere$ ls config installer kubesphere playbooks results ks-installer-566ffb8f44-l769h:/kubesphere$ ps aux PID USER TIME COMMAND 1 kubesphe 0:01 /shell-operator start 13488 kubesphe 0:00 bash 13495 kubesphe 0:00 ps aux |
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创建或更新的时候被触发。
TODO 待详细查看触发动作中yaml是否包含版本参数
从 https://github.com/kubesphere/ks-installer/blob/20a6daa18adf10410a385b48ab2769e55d8bdee2/controller/installRunner.py#L338C41-L338C53 可以看到实际执行动作的是ansible
2.修改方案
-
fork官方代码修改后重新制作镜像,获得一个独立的docker镜像地址+tag
-
更新kubesphere服务组件的镜像tag,根据和kubesphere距离可选
-
通过修改对应的Pod声明
-
通过修改ClusterConfiguration间接触发shell-operator
-
通过修改kubekey配置文件
-
3.bug列表
-
多集群管理下,toolkit只显示master集群的kubectl config。https://github.com/kubesphere/kubesphere/issues/5766
-
toolkit的提示文案未和当前用户身份做匹配,用户无权限的按钮也有提示文案
-
筛选某个namespace的资源后,跳转到pvc后过滤条件丢失
0 Comments