kube-controller-manager 控制器的一種沈撞,期望pod達(dá)到預(yù)期的狀態(tài)慷荔。
for {
實(shí)際狀態(tài) := 獲取集群中對(duì)象X的實(shí)際狀態(tài)(Actual State)
期望狀態(tài) := 獲取集群中對(duì)象X的期望狀態(tài)(Desired State)
if 實(shí)際狀態(tài) == 期望狀態(tài){
什么都不做
} else {
執(zhí)行編排動(dòng)作,將實(shí)際狀態(tài)調(diào)整為期望狀態(tài)
}
}
其它的控制器類型有:
$ cd kubernetes/pkg/controller/
$ ls -d */
deployment/ job/ podautoscaler/
cloud/ disruption/ namespace/
replicaset/ serviceaccount/ volume/
cronjob/ garbagecollector/ nodelifecycle/ replication/ statefulset/ daemon/
...
示例說明
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 控制器從 Etcd 中獲取到所有攜帶了“app: nginx”標(biāo)簽的 Pod缠俺,然后統(tǒng)計(jì)它們的數(shù)量显晶,這就是實(shí)際狀態(tài)贷岸;
Deployment 對(duì)象的 Replicas 字段的值就是期望狀態(tài);
Deployment 控制器將兩個(gè)狀態(tài)做比較吧碾,然后根據(jù)比較結(jié)果凰盔,確定是創(chuàng)建 Pod,還是刪除已有的 Pod
可以看到倦春,一個(gè) Kubernetes 對(duì)象的主要編排邏輯户敬,實(shí)際上是在第三步的“對(duì)比”階段完成的。
image.png
Deployment睁本,與 ReplicaSet尿庐,以及 Pod 的關(guān)系
image.png
手動(dòng)操作指令
$ kubectl scale deployment nginx-deployment --replicas=4
deployment.apps/nginx-deployment scaled
滾動(dòng)更新
$ kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment.apps/nginx-deployment successfully rolled out
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 20s
此時(shí),你可以嘗試查看一下這個(gè) Deployment 所控制的 ReplicaSet:
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-3167673210 3 3 3 20s
如上所示呢堰,在用戶提交了一個(gè) Deployment 對(duì)象后抄瑟,Deployment Controller 就會(huì)立即創(chuàng)建一個(gè) Pod 副本個(gè)數(shù)為 3 的 ReplicaSet。這個(gè) ReplicaSet 的名字枉疼,則是由 Deployment 的名字和一個(gè)隨機(jī)字符串共同組成皮假。