首页 > 解决方案 > 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

标签: kuberneteskube-aws

解决方案


我已经解决了这个问题。我创建了一个监视节点事件的 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

谢谢,贾弗


推荐阅读