如果我关闭其中一个主节点,Kubernetes 节点将获得状态 "NotReady"

标签 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-02硬绑定(bind)到 kbn-mst-03 (212.46.30.7)我该如何改变它?

最佳答案

目前你的工作节点只知道 kbn-mst-03主节点,当该主节点关闭时,工作节点上的 kubelet 无法将工作节点的健康状态和指标发送到主节点 kbn-mst-03 and hence you see worker nodes as未就绪`。这也是为什么关闭其他master并不会改变节点状态的原因,因为它们根本不被工作节点的kubelet知道和联系。
您应该在主节点前面使用负载均衡器,并在创建工作节点时使用负载均衡器端点。然后,如果一个主节点关闭,其他主节点将能够处理请求,因为负载均衡器将停止向故障主节点发送流量并将流量路由到其他主节点。
如何将硬绑定(bind)更改为一个主节点并转而使用负载均衡器端点,这取决于您用于设置 kubernetes 集群的工具。如果您使用的是 kubeadm,那么您可以在 kubeadm init 中指定负载均衡器端点在主节点中并在 kubeadm join 中使用该端点在工作节点中。
来自 kubeadm 文档 here

--control-plane-endpoint can be used to set the shared endpoint for all control-plane nodes.

--control-plane-endpoint allows both IP addresses and DNS names that can map to IP addresses. Please contact your network administrator to evaluate possible solutions with respect to such mapping.

Here is an example mapping:

192.168.0.102 cluster-endpoint


Where 192.168.0.102 is the IP address of this node and cluster-endpoint is a custom DNS name that maps to this IP. This will allow you to pass --control-plane-endpoint=cluster-endpoint to kubeadm init and pass the same DNS name to kubeadm join. Later you can modify cluster-endpoint to point to the address of your load-balancer in an high availability scenario.

关于如果我关闭其中一个主节点,Kubernetes 节点将获得状态 "NotReady",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62711615/

相关文章:

azure - 如何查看 Azure 中 AKS 群集中附加的 ACR

Kubernetes 入口(特定 APP)504 网关超时 60 秒

google-compute-engine - 集群没有响应,奇怪的错误消息

kubernetes - 为什么要使用 Eureka ?

docker - 您如何将源代码放入 Kubernetes?

node.js - 如何使用 Kubernetes 和 Gitlab CI/CD 在 Google Cloud Platform 中部署暂存?

kubernetes - Prometheus 自动发现 K8s

kubernetes - 防止K8S HPA在减少负载后删除pod

nginx - 对于TCP端口的入口,是否可以使用NGINX为http端口路由的类似方式,使用相同的端口号路由到不同的服务?

kubernetes - Draft和Helm vs Ksonnet?