kubernetes - Kubernetes V1.16.8 不支持使用“--node-labels=node-role.kubernetes.io/master=”的“node-role”标签
问题描述
将 Kube-aws v1.15.5 集群升级到下一个版本 1.16.8。
用例:
我想为我在 v1.15 中使用的 Master 和 Worker 节点保留相同的节点标签。
当我尝试将集群升级到 V1.16 时,--node-labels 被限制为使用“node-role”
如果我将节点角色保留为“node-role.kubernetes.io/master ”,则升级后 kubelet 无法启动。如果我删除标签,则kubectl get node
输出显示none
升级节点。
我如何重现?
在升级之前,我备份了“ cp /etc/sysconfig/kubelet /etc/sysconfig/kubelet-bkup ”,并从中删除了“-role”,升级完成后,我通过替换已编辑的内容来移动 kubelet sysconfig文件' mv /etc/sysconfig/kubelet-bkup /etc/sysconfig/kubelet '。现在,即使在 kubelet 服务重新启动后,我也可以将 Nodeerole 视为 Master/Worker。
我现在面临的问题?
虽然我成功地对现有集群执行了升级。该集群作为 Kube-aws 模型在 AWS 中运行。因此,只要 Cluster-Autoscaler 触发 ASG,它就会启动一个新节点。
但是,由于代码库中存在节点标签“node-role.kubernetes.io/master”,新节点无法加入集群。
如何在 ASG 缩减过程中动态添加节点角色?任何解决方案将不胜感激。
注意:(Kubeadm、kubelet、kubectl)- v1.16.8
解决方案
我已经解决了这个问题。我创建了一个监视节点事件的 Python 代码。因此,每当 ASG 启动一个新节点时,在它加入集群后,该节点将扮演一个角色 "" ,稍后 python 代码将动态地为该节点添加一个适当的标签。
此外,我使用为 node-label 创建的 python 脚本的基础创建了一个 docker 映像,它将作为 pod 运行。pod 将被部署到集群中,并完成标记新节点的工作。
参考我在 GitHub https://github.com/kubernetes/kubernetes/issues/91664中给出的解决方案
我创建了一个 docker 镜像,它是公开可用的 https://hub.docker.com/r/shaikjaffer/node-watcher
谢谢,贾弗
推荐阅读
- python - 用 sympy 计算多变量极限
- set - 有没有办法用 ContinuousSet 实现 RangeSet?
- javascript - React - 在垂直时间线上居中标记
- ruby-on-rails - Puma 丢失了套接字并且不会重新创建它
- html - 价格行为的滚动过渡动画。如何?
- android-fullscreen - 如何退出沉浸式模式并返回默认的 Android UI 布局?
- python - 避免在熊猫打印功能中使用逗号
- r - 根据日期时间参考选择值
- javascript - 在材质ui中使用useMediaQuery?
- python - 我在文本分类问题中有一个数据类型问题