首页 > 解决方案 > 创建(手动)后,使 kubernetes 节点具有 `providerID` 规范的方法是什么?

问题描述

一旦为 kubelet 提供了附加标志,我希望它kubectl get nodes <node> -o yaml会显示spec.providerID(参见下面的参考)--provider-id=provider://nodeID。当 kubelet 启动/重新启动时,我使用/etc/default/kubelet文件向命令行添加更多标志。(在 k8s 1.16 集群上)我通过systemctl status kubelet --no-pager调用看到了额外的标志,因此该文件受到尊重。

但是,我没有看到通过kubectl get node <node> -o yaml调用返回的值。我认为它必须是节点已经注册,但我认为 kubectl 在它启动时会重新注册。我已经通过journalctl -u kubelet建议它已经通过注册看到了日志行。

如何手动将提供者 ID 添加到节点?

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#nodespec-v1-core

标签: kubernetescloud

解决方案


akubelet在节点本身上的配置方式与其在控制平面中的定义是分开的(AFAIK),master控制平面负责更新中央etcd存储中的状态;所以它们有可能不同步。即,您需要与控制地点通信以更新其记录。

除了 Subramanian 的建议之外,kubectl patch node它也可以工作,并且与手动编辑 YAML 清单相比,具有易于复制/可编写脚本的额外好处;如果您需要返回,它还会在您的 shell 历史记录中留下“纸质痕迹”。随你挑:) 例如,

$ kubectl patch node my-node -p '{"spec":{"providerID":"foo"}}'
node/my-node patched
$ kubectl describe node my-node | grep ProviderID
ProviderID:                   foo

希望这可以帮助!


推荐阅读