【问题标题】:Restore a node after being purged due to resources pressure资源压力清除后恢复节点
【发布时间】:2020-06-03 09:11:06
【问题描述】:

我有一个使用 kubespray 的 k8s 集群设置。

上周我的一个 k8s 节点的存储空间非常低,所以所有的 pod 都被驱逐了,包括一些重要的 pod,例如 calico-node、kube-proxy(我认为这些 pod 很关键,无论如何都不会被驱逐)

之后所有的calico-node pod都没有准备好,当我查看日志时,说: Warning: Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 192.168.0.xxx,其中192.168.0.xxx是上述问题节点的IP。

我的问题是如何恢复该节点?再次运行 kubespray 的 cluster.yml 是否安全?

我的k8s版本是v1.13.3

谢谢。

【问题讨论】:

  • kubelet 是否正在运行并向 Kube api-server 发布状态?
  • kubelet 正在运行,但无法连接到 api-server,因为该节点上的 kube-proxy 没有运行
  • Kube-proxy 是一个静态 Pod。它不作为部署/守护程序等运行。它由 kubelet 直接管理。所以检查清单文件夹(默认 /etc/kubernetes/manifests)以确保 kube-proxy-XXX.yaml 存在。无论如何,kubelet 是主要的节点代理,直接与 api-server 通信。它不需要 kube-proxy 将状态发布到 Api-server。你能发布 kubelet 日志吗?
  • 谢谢,我会再检查一遍
  • kube-proxy 不是静态 Pod。它是 kubeadm 在初始化阶段安装的守护程序集,如 coredns。您可以使用命令阅读详细信息:kubeadm init phase addon kube-proxy --help BTW,kubespray 也使用 kubeadm 来初始化 Kubernetes 集群,因此它的工作方式完全相同。 github.com/kubernetes-sigs/kubespray/blob/…

标签: kubernetes kubespray


【解决方案1】:

当节点有磁盘压力时,它的状态会变为NotReady,并且节点会添加一个污点:Taints: node.kubernetes.io/disk-pressure:NoSchedule。

除api-server, kube-controller and kube-scheduler外,此节点上运行的所有 pod 都将被逐出 - 逐出管理器将避免这些 pod 被逐出并显示错误消息:cannot evict a critical static pod [...]

一旦节点从磁盘压力中释放出来,它就会将其状态更改为Ready,并且之前添加的污点将被删除。您可以通过运行kubectl describe node <node_name> 来检查它。在条件字段中,您应该看到DiskPressure 已将状态更改为False,这意味着该节点有足够的可用空间。类似的信息也可以在Events 字段中找到。

  Normal   NodeReady                1s                     kubelet, node1     Node node1 status is now: NodeReady
  Normal   NodeHasNoDiskPressure    1s (x2 over 1s)        kubelet, node1     Node node1 status is now: NodeHasNoDiskPressure

确认节点已准备好有足够的磁盘空间后,您可以重新启动kubelet 并运行 kubespray 的 cluster.yml - pod 将重新部署在节点上。您只需确保该节点已准备好处理部署。

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多