控制器:操作这些”集装箱“的逻辑,都是由它控制的。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
由上最简单的控制器对象deployment:保证了携带nginx标签的pod个数等于2.(多删少加)这些操作是kube-contraller-manager的组件,它是一系列控制器的集合。
#源码
$ cd kubernetes/pkg/controller/
$ ls -d */
deployment/ job/ podautoscaler/
cloud/ disruption/ namespace/
replicaset/ serviceaccount/ volume/
cronjob/ garbagecollector/ nodelifecycle/ replication/ statefulset/ daemon/
...
我们的deployment也是其中一种。
简易的待编排的对象:如下
for {
实际状态 := 获取集群中对象 X 的实际状态(Actual State)
期望状态 := 获取集群中对象 X 的期望状态(Desired State)
if 实际状态 == 期望状态{
什么都不做
} else {
执行编排动作,将实际状态调整为期望状态
}
}
实际状态:kubelet通过心跳汇报的容器状态和节点状态等
期望状态:用户提交的YAML文件的配置。
1.实际状态:deployment控制器从Etcd中获取到的所有携带”app:nginx“标签的pod,并统计。
2.期望状态:Doployment对象Replicas字段的值就是期望状态。
3.Doployment控制器将两个状态比较,并相应处理。
image.png
网友评论