如果我关闭一个主节点,则Kubernetes节点的状态为“未就绪”

时间:2020-07-03 08:38:32

标签: kubernetes

在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-02kbn-mst-03 (212.46.30.7)具有硬绑定,我该如何更改?

1 个答案:

答案 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。以后您可以修改集群端点 以高可用性指向负载均衡器的地址 场景。