问题描述
我有一个错误地在群集B上注册的节点,而实际上它却在为群集A服务。
“在群集B上注册”意味着我可以从群集B看到kubectl get node
上的节点。
我想从群集B中注销该节点,但保持该节点不变。
我知道删除节点的常规过程是:
kubectl drain node xxx
kubectl delete node xxx
# on node
kubeadm reset
但是我不希望删除或传输群集A上节点上的Pod。而且我想确保该节点以后不会自动注册到群集B。
为清楚起见,假设集群A的节点上具有Pod A,集群B的节点上也具有Pod B,我想从集群B中删除节点,但保持Pod A不变。 (顺便问一下,我可以从集群B中看到Pod A吗?)
提前谢谢!
解决方法
要在不删除任何pod的情况下注销节点,请在命令下运行
kubectl delete node nodename
完成此操作后,该节点将不会出现在kubectl get nodes
要使该节点不再自行注册,请登录该节点并使用以下命令停止该节点上的kubelet
进程。
systemctl stop kubelet
由于此案已经澄清,因此我决定根据以下评论发布社区Wiki 答案:
@mario nvm,我认为一个节点中的不同群集会影响每个群集 其他,实际上他们没有,他们只是共享容器运行时 更像是“只读”,它们具有不同的kubelet 自己在不同的端口上监听。 –李子彦8月17日5:29
还要向其他用户清楚说明这里实际上是什么问题,以及如何解决或简单地解决了这个问题。
因此,如果您以某种方式(例如,将Node
的一台物理(或虚拟)计算机用于一个以上的 kubernetes集群,则设计基础架构(我相信这不是很常见)情况)的基础结构如下:
- 共享的组件:
- 物理(或虚拟)节点
- 常见的容器运行时环境(例如docker)
- 单独的组件:
- 两个独立的小方块。尽管它们在同一物理/虚拟节点上运行,但它们被配置为在不同的端口上侦听,并且在两个主
Nodes
(或更具体地,两个不同的主机)中注册kube-apiservers
是两个不同的kubernetes控制平面的一部分) - 两个逻辑上独立的kubernetes
Nodes
,尽管它们在相同的物理节点/主机上配置,但在逻辑上是完全独立的kubernetes {{1 }},是两个完全不同的 kubernetes集群的一部分,这些集群不会以任何方式相互干扰。
我希望这有助于澄清有关此问题的可能混淆,并在有人有类似疑问时帮助他们。