在CentOS7的VM cloude中,我有一个由3个主节点和2个节点组成的Kubernetes集群:
[root@kbn-mst-02 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kbn-mst-01 Ready master 15d v1.18.3
kbn-mst-02 Ready master 14d v1.18.3
kbn-mst-03 Ready master 14d v1.18.3
kbn-wn-01 Ready <none> 25h v1.18.5
kbn-wn-02 Ready <none> 150m v1.18.5
如果我关闭kbn-mst-03(212.46.30.7),则kbn-wn-01和kbn-wn-02的状态为NotReady
:
[root@kbn-mst-02 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kbn-mst-01 Ready master 15d v1.18.3
kbn-mst-02 Ready master 14d v1.18.3
kbn-mst-03 NotReady master 14d v1.18.3
kbn-wn-01 NotReady <none> 25h v1.18.5
kbn-wn-02 NotReady <none> 154m v1.18.5
kbn-wn-02上的日志显示与212.46.30.7的连接断开:
Jul 3 09:28:10 kbn-wn-02 kubelet: E0703 09:28:10.295233 12339 kubelet_node_status.go:402] Error updating node status, will retry: error getting node "kbn-wn-02": Get https://212.46.30.7:6443/api/v1/nodes/kbn-wn-02?resourceVersion=0&timeout=10s: context deadline exceede
关闭其他主服务器不会更改节点的状态。
为什么kbn-wn-02
与kbn-mst-03 (212.46.30.7)
具有硬绑定,我该如何更改?
答案 0 :(得分:1)
当前,您的工作节点仅了解kbn-mst-03
主节点,并且当关闭该主节点时,工作节点上的kubelet无法将工作状况的健康状况和指标发送到主节点kbn-mst-03 {{1 }}未就绪。这也是为什么关闭其他主节点不会更改节点状态的原因,因为工作节点的kubelet根本不知道并与之联系。
在创建工作程序节点时,应在主服务器前面使用负载平衡器,并使用负载平衡器端点。然后,如果一个主机关闭,则其他主机节点将能够处理请求,因为负载平衡器将停止向失败的主机发送流量,并将流量路由到另一主机。
如何将硬绑定更改为一个主机,然后移动到使用负载均衡器端点,这取决于您用来设置kubernetes集群的工具。如果使用的是kubeadm,则可以在主节点的and hence you see worker nodes as
中指定一个负载均衡器端点,并在工作节点的kubeadm init
中使用该端点。
来自kubeadm文档here
kubeadm join
可用于为所有控制平面节点设置共享端点。
--control-plane-endpoint
允许IP地址和可以映射到IP地址的DNS名称。请联系您的网络管理员以 评估有关此类映射的可能解决方案。以下是示例映射:
--control-plane-endpoint
其中
192.168.0.102 cluster-endpoint
是此节点的IP地址,而群集端点是一个自定义DNS名称,它映射到 该IP。这将使您通过192.168.0.102
到--control-plane-endpoint=cluster-endpoint
,并将相同的DNS名称传递到kubeadm init
。以后您可以修改集群端点 以高可用性指向负载均衡器的地址 场景。