一、功能定义
一直活跃的组件来确保集群中各个资源的真实状态朝着资源定义信息中期望的状态收敛。**这个工作是由Controller-Manager中各个控制器来实现的。
什么是资源的真实状态?什么是资源定义信息中的期望状态?
- 资源真实状态就是指的在集群中实际运行的,比如Pod。(我们可以通过
kubectl get pod
来查看) - 而期望的状态指的是,资源定义信息中spec中指定的信息。
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-v2 ### 遵循域名编写规范
namespace: default
labels:
app: test-01
### 期望状态
spec:
replicas: 5 ### 期望副本你数量
selector: ### 选择器,指定Deployment要控制的所有的Pod的共同标签(即帮助Deployment筛选他要控制哪些Pod)
matchLabels:
pod-name: ppp ### 和模板template里面的Pod的标签必须一样
### 编写Pod
template:
metadata: ### Pod的metadata
labels:
pod-name: ppp
spec:
containers:
- name: nginx-01
image: nginx
以上这个定义的Deployment,他期望可以有5个包含pod-name: ppp标签的Pod副本。
Controller-Manager组合的控制器有:
ReplicaSet、DaemonSet以及Job控制器
Deployment控制器
StatefulSet控制器
Node控制器
Service控制器
Namespace控制器
PersistentVolume控制器
其他控制器
自定义的控制器
一个控制器至少追踪一种类型的 Kubernetes 资源。从每个控制器的名字我们几乎就可以知道创建的每个资源对应的控制器是什么。
资源描述了集群中应该运行什么,他的期望是什么,而控制器就是为资源实现目标的工具,也被称作为控制回路
二、控制器说明
ReplicaSet控制器
ReplicaSet控制器会通过Api-Server的监听机制订阅可能影响他期望的副本集的数量或者符合条件Pod数量变更事件。任何该类型的变化,都会触发控制器重新检查期望的以及实际的副本数量,然后做出相应的操作。
比如当正在运行的Pod数量少于ReplicaSet所期望的副本数量时,ReplicaSet控制器就会创建新的Pod清单,然后发布给Api-Server,再让Schedule调度器以及Kublet来做调度工作并运行Pod。
Deployment控制器
每次Deployment资源被修改后(如果修改会影响到部署的Pod),Deployment控制器都会滚动升级到新的版本。通过创建要给ReplicaSet,然后按照Deployment中定义的策略同时伸缩新、旧ReplicaSet,直到旧的Pod被新的代替。