需求
目前运维的k8s集群,有topolvm-prepare-vg-之类的容器持续处于处理中,删除不掉。故障原因是之前加过本地存储,但是后来节点删除,按照之前的手册,编辑crds,TopolvmCluster,中的字段,删除对应节点后,以然存在。即通过kubectl edit命令编辑crds(自定义资源),无法修改更新相关字段。
此时需要部署kubectl-edit-status,用于编辑子资源的的kubectl 插件,edit-status能够简化k8s状态编辑,它主要作用九四解决当前资源启用状态子资源(即crds,自定义资源),直接通过标准的kubectl edit或者kubectl apply命令无法更新状态字段的问题,通过增加一个新的命令edit-status到kubectl中,赋予用户在编辑资源状态状态的能力。这在操作crds尤其有用
但是由于集群的控制节点不能访问外网,所以不能直接部署该插件。所以参照以下思路进行
- 一台能够访问外网的客户端安装kubectl工具
- 导出集群的kubeconfig文件到kubectl中,使得客户端能够通过kubectl操作集群
- 客户端安装kubectl-edit-status
- 安装这些插件,必须要保证能够正常访问外网和github
kubectl-edit-status 准备
kubctl安装
参考https://kubernetes.io/zh-cn/docs/reference/kubectl/
使用原生包管理工具安装
导出并导入kubeconfig文件
关于 kubeconfig的详细操作,可以参考官网
在集群中导出kubeconfig文件,导出的内容如下
将导出的kubectl文件复制到kubectl的目录下,并改名为config
配置完成后检查kubeconfig是否生效
此时确认配置kubectl以及能够通过kubeconfig连接集群。
krew安装
参考https://github.com/ulucinar/kubectl-edit-status,kubectl-edit-status是个插件,必须通过krew安装
krew的网站
Krew 是一个由 Kubernetes SIG CLI 社区维护的 kubectl 命令行工具的插件管理器。类似 红帽的YUM, 开发角度理解,类似 Nodejs 的 npm。
Krew 可以用于管理 kubelet 插件,发现 kubectl 插件,并在机器上安装它们。保持安装的插件是最新的。
安装edit-status插件
参考官网
https://github.com/ulucinar/kubectl-edit-status
通过edit-status编辑k8s集群的crds
首先,通过kubeclt api-resources查找需要的crds,例如本次要查找crds是topolvm
然后,通过edit-status编辑crds
按需修改crds内容中的字段,达到修改目的
总结
1、 krew其实是个挺鸡肋的工具,目的主要是安装kubectl插件。
2、edit-status能够简化k8s状态编辑,它主要作用九四解决当前资源启用状态子资源(即crds,自定义资源),直接通过标准的kubectl edit或者kubectl apply命令无法更新状态字段的问题,通过增加一个新的命令edit-status到kubectl中,赋予用户在编辑资源状态状态的能力。这在操作crds尤其有用