K8S:控制器解析
Kubernetes(简称K8s)控制器是用于管理和维护集群中资源状态的关键组件。它们通过监控集群的公共状态,并致力于将当前状态转变为期望状态。
有状态与无状态
ReplicationController (RC)(V1.11废除)
- 作用:确保指定数量的 Pod 副本始终处于运行状态。如果某个 Pod 停止运行,ReplicationController 会创建一个新的 Pod 来取代它。
- 解析:ReplicationController 通过
replicas
参数指定所需的副本数量,并根据定义的 Pod 模板自动生成和管理这些 Pod。
ReplicaSet (RS)
-
作用:ReplicaSet 是 ReplicationController 的增强版,主要区别在于它支持 Pod 的标签选择器(Label Selector)。同样,它也用于保证一组 Pod 的副本数量。
-
解析:ReplicaSet 通过标签选择器来确定哪些 Pod 需要进行管理,并根据定义的 Pod 模板来创建或删除 Pod。
注意:RC与RS都位于控制平面中,通过
kube-controller-manager
进行管理。主要职责都是保证Pod以指定数量运行在集群里运行。集群架构中,ReplicationController 和 ReplicaSet 都会监控与其关联的 Pod 的状态,如果有 Pod 异常退出或被删除,控制器会自动创建新的 Pod 来替代它。它们通常与Deployment
一起使用,负责在底层直接管理 Pod,而 Deployment 则提供更高层次的功能(如滚动更新、回滚)。
Deployment
-
作用:管理无状态应用的部署,支持滚动更新、版本回滚等特性,是最常用的控制器之一。
-
解析:Deployment 在后台创建 ReplicaSet,并通过调整 ReplicaSet 来实现滚动更新或回滚操作,从而确保应用的高可用性和无缝升级。
注意:Delopyment在进行滚动更新或回滚时都会新创建一个RS,在新RS中每创建一个Pod便停止旧RS中的一个Pod,直到完全停止旧RS中的Pod,但是最终并不会删除旧的RS与旧Pod,因为要支持回滚。
StatefulSet
- 作用:用于管理有状态应用,例如需要持久化数据的数据库。它保证 Pod 的顺序启动、唯一性和稳定的网络标识。
- 解析:StatefulSet 为每个 Pod 赋予一个稳定的标识符,并维护 Pod 的顺序。适合需要稳定存储的应用程序,比如 MySQL、Cassandra 等。
DaemonSet
- 作用:确保集群中的每个节点上都运行一个特定的 Pod,常用于部署日志收集、监控等系统级应用。
- 解析:DaemonSet 确保集群中每个节点上都有一个指定的 Pod 运行,当有新节点加入时,DaemonSet 会自动在新节点上部署 Pod。
Job
- 作用:用于一次性任务的管理,确保任务成功完成。常用于批处理任务。
- 解析:Job 创建一个或多个 Pod 来执行任务,并在任务完成后终止 Pod。它保证任务至少成功执行一次。
CronJob
- 作用:定时执行任务,类似于 Linux 系统中的 Cron 任务调度器。
- 解析:CronJob 定期创建 Job 来执行任务,适合周期性任务的调度管理,例如定期备份、日志清理、定时报告生成等。
控制器的使用
在 Kubernetes YAML 文件中,通过 kind
字段指定使用的控制器类型。不同的控制器有不同的 kind
值。
apiVersion: apps/v1 # API版本,因控制器而异
kind: Deployment # 这里指定了使用 Deployment 控制器
metadata:
name: my-deployment
spec:
replicas: 3 # 副本数量
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx