高级使用-Pod控制器
# 1 Pod控制器是什么
Pod控制器就是帮助我们自动的调度管理Pod,并满足期望的Pod数量。
Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。
创建为具体的控制器对象之后,每个控制器均通过API Server
提供的接口持续监控相关资源对象的当前状态,并在因故障、更新或其他原因导致系统状态发生变化时,尝试让资源的当前状态想期望状态迁移和逼近。
# 2 Pod和Pod控制器
Pod
控制器资源通过持续性地监控集群中运行着的Pod
资源对象来确保受其管控的资源严格符合用户期望的状态,例如资源副本的数量要精确符合期望等。通常,一个
Pod
控制器资源至少应该包含三个基本的组成部分:
- 标签选择器:匹配并关联
Pod
资源对象,并据此完成受其管控的Pod
资源计数。 - 期望的副本数:期望在集群中精确运行着的
Pod
资源的对象数量。 - Pod模板:用于新建
Pod
资源对象的Pod
模板资源。
# 3 控制器的必要性
自主式Pod
对象由调度器调度到目标工作节点后即由相应节点上的kubelet
负责监控其容器的存活状态,容器主进程崩溃后,kubelet
能够自动重启相应的容器,但对出现非主进程崩溃类的容器错误却无从感知,这便依赖于pod
资源对象定义的存活探测,以便kubelet
能够探知到此类故障。
但若pod
被删除或者工作节点自身发生故障(工作节点上都有kubelet
,kubelet
不可用,因此其健康状态便无法保证),则便需要控制器来处理相应的容器重启和配置。
# 4 常见的控制器
Pod
控制器由master
的kube-controller-manager
组件提供,常见的此类控制器有以下几种
# 4.1 ReplicaSet
代用户创建指定数量的pod
副本数量,确保pod
副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能
# 4.2 Deployment
工作在ReplicaSet
之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
# 4.3 DaemonSet
用于确保集群中的每一个节点只运行特定的pod
副本,常用于实现系统级后台任务,比如ELK
服务
上次更新: 2023/07/15, 02:20:43