kubernetes - 资源压力清除后恢复节点
问题描述
我有一个使用 kubespray 的 k8s 集群设置。
上周我的一个 k8s 节点的存储空间非常低,所以所有的 pod 都被驱逐了,包括一些重要的 pod,比如 calico-node、kube-proxy(我认为这些 pod 很关键,无论如何都不会被驱逐)
之后所有的calico-node pods都没有准备好,当我查看日志时,说:
,上面有问题的节点的IP在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
我的问题是如何恢复该节点?再次运行 kubespray 的 cluster.yml 是否安全?
我的k8s版本是v1.13.3
谢谢。
解决方案
当节点有磁盘压力时,其状态更改为NotReady
,并且向节点添加了一个污点:Taints: node.kubernetes.io/disk-pressure:NoSchedule
。
此节点上运行的所有 pod 都将被逐出,除了api-server, kube-controller and kube-scheduler
- 逐出管理器将保存这些 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 将重新部署在节点上。您只需确保该节点已准备好处理部署。
推荐阅读
- java - 向用户请求“WRITE_EXTERNAL_STORAGE”权限。安卓, JAVA
- c - c中getchar()的问题
- angular - 如何在 Nebular UI 中更改主题变量值?
- python - 尝试使用 While 循环创建列表列表,并附加一个使用输入清除和更新的列表。不工作。怎么修?
- php - 使用多个表创建搜索功能
- java - GAE 部署错误(需要多次部署我的应用程序才能工作)
- python - Discord.py 阅读列表
- c# - 解析具有日期格式的 JSON 文件并添加到列表
- javascript - 如何将对象内的特定项目分组到同一数组中并将它们从核心数组中删除?
- postgresql - 查询调优 PostgreSQL 存储过程,里面有 1000 个查询