K8S 1.28 这个功能已 GA,主机故障时服务能快速恢复

2023-09-08 09:16:32 浏览数 (1)

作者:Xing Yang (VMware) 和 Ashutosh Kumar (Elastic) 原文:https://t.hk.uy/b3Yq 译者:进击云原生

Kubernetes 的非正常节点关闭功能现已在 Kubernetes v1.28 中正式发布(GA)。它在 Kubernetes v1.24 中作为 alpha[1]引入 ,并在 Kubernetes v1.26 中提升为 beta[2] 。如果原始节点意外关闭或最终处于不可恢复状态(例如硬件故障或操作系统无响应),此功能允许有状态工作负载在其他正常节点上重新启动。

什么是节点非正常关闭?

在 Kubernetes 集群中,节点可能会按计划正常关闭,也可能因断电或其他外部原因而意外关闭。如果节点在关闭之前未清空,则节点关闭可能会导致工作负载失败。节点关闭可以是正常关闭,也可以是非正常关闭。

节点 平滑关闭[3] 功能允许 Kubelet 在实际关闭之前检测节点关闭事件、正确终止 Pod 并释放资源。

当节点关闭,但 Kubelet 的节点关闭管理器未检测到时,这种场景即为节点非正常关闭。对于无状态应用程序来说,非正常节点关闭通常不是问题,但是对于有状态应用程序来说,这会导致不可预期的问题。如果 Pod 还在已关闭的节点上,并且未在正在运行的节点上重新启动,则有状态应用程序将无法正常运行。

在节点非正常关闭的情况下,您可以在节点上手动添加out-of-service污点。

代码语言:javascript复制
kubectl taint nodes <node-name> node.kubernetes.io/out-of-service=nodeshutdown:NoExecute

如果 pod 上没有匹配的容忍度,则此污点会触发节点上的 pod 被强制删除。attach 到关闭节点的持久卷将被分离,并且新的 Pod 将在正常的节点上成功创建。

注意:在设置 out-of-service 污点之前,必须验证节点是否已处于关闭或断电状态(而不是在重新启动过程中)。

一旦已停止服务的节点的所有工作负载 Pod 都移动到新的节点,并且关闭的节点已恢复,应该在受影响的节点恢复后删除该节点上的污点,保证后续的 Pod 可以安排在该节点上。

稳定版中有哪些新内容?

随着非正常节点关闭功能提升至稳定状态,则 kube-controller-manager 中的NodeOutOfServiceVolumeDetach功能门将锁定为 true,并且无法禁用。

Pod GC 控制器中的force_delete_pods_total指标和force_delete_pod_errors_total指标均得到增强,主要考虑到所有 Pod 被强制删除。指标中会添加一个原因,以指示 pod 是否因为它已终止、变为孤立状态、带有out-of-service的污点终止、或终止且未调度。

attachdetach_controller_forced_detaches 附加分离控制器中的指标中还会添加一个“原因” ,以指示强制分离是由out-of-service污点还是超时引起的。

下一步?

此功能要求用户手动向节点添加污点以触发工作负载故障转移,并在节点恢复后删除污点。未来,我们计划找到方法来自动检测和隔离关闭/失败的节点,并自动将工作负载故障转移到另一个节点。查看此功能其他文档[4]

参考资料

[1]

alpha: https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2268-non-graceful-shutdown

[2]

beta: https://kubernetes.io/blog/2022/12/16/kubernetes-1-26-non-graceful-node-shutdown-beta/

[3]

平滑关闭: https://kubernetes.io/blog/2021/04/21/graceful-node-shutdown-beta/

[4]

查看此功能其他文档: https://kubernetes.io/docs/concepts/architecture/nodes/#non-graceful-node-shutdown

推荐阅读

高效强大的可扩展自动化工具 Saltstack

微服务中的链路追踪:7 大工具的全方位对比与分析

Stable diffusion AI 绘图二次开发,代码现成,拿走即用

MacOS 上好用的 ChatGPT 客户端推荐

docker-compose 快速部署 ZK 保姆级教程

实验理解 K8S 滚动更新时如何实现零宕机

K3S 入门级实战教程,和 K8S 有何不同?

无需依赖 Docker 环境制作 Java 应用镜像

K8S v1.26:CPUManager 正式发布,生产可用!

动图理清 K8S OOM 和 CPU 节流

0 人点赞