0
点赞
收藏
分享

微信扫一扫

​k8s如何做容器的高可用?


容器管理

Kubernetes Controller Manager 组件会周期性地与每个 Node 上的 kubelet 服务进行通信,确保 Pod 的状态与期望值一致。pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。

​k8s如何做容器的高可用?_重启

对于无状态容器来说,主要有两种类型的控制器。ReplicaSet: 为用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。Deployment:支持滚动更新和回滚功能来达到平滑的升级和回滚。另外,还提供Service、Ingress等资源类型来做服务发现和负载均衡。

​k8s如何做容器的高可用?_Pod_02

Pod的调度策略上支持反亲和等特性,让Pod进行离散部署,通过配合相应的离散计划:“相同应用的容器不能在同1台物理机、同机柜、同1个leaf交换机上,尽量打散” 来做容灾。通过污点与容忍来确保不满足需求的物理机不会为一般应用创建实例。

探针

k8s中的探针是一种健康检查机制,用于监测Pod内容器的运行状况。主要包括以下三种类型的探针:1、存活探针(Liveness Probe)2、就绪探针(Readiness Probe 3、启动探针(Startup Probe)(自1.16版本引入)。

​k8s如何做容器的高可用?_Pod_03

启动探针(StartupProbe)主要用于检测容器内的应用是否已经成功启动并完成初始化任务。可以延缓其他探针生效、防止频繁重启、确保应用稳定。

就绪探针(Readiness Probe)主要作用是检测容器是否已经准备好对外提供服务。可以进行状态评估、流量路由控制、避免无效请求和平滑过渡。

存活探针(Liveness Probe)主要作用是检测容器内主进程或服务是否仍然运行正常且响应健康检查。可以监控状态、自动恢复、避免僵死进程、保持服务质量。

可观测性

k8s可观测性方案包括Prometheus数据采集、日志、链路追踪、K8s Event 事件、NPD 框架等方式。每种方式可以从不同维度透视 Kubernetes 系统的状态和数据。

​k8s如何做容器的高可用?_kubernetes_04

其中,NPD(Node Problem Detector)针对节点的稳定性提供了诊断检查框架,在默认检查策略的基础上,可以灵活扩展检查策略,可以将节点的异常转换为 Node 的事件,推送到 APIServer 中,由统一的 APIServer 进行事件管理。

NPD 支持多种异常检查,例如:

基础服务问题:NTP 服务未启动

硬件问题:CPU、内存、磁盘、网卡损坏

Kernel 问题:Kernel hang,文件系统损坏

容器运行时问题:Docker hang,Docker 无法启动

资源问题:OOM 等

举报

相关推荐

0 条评论