Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.Kubernetes的controller pattern
需要認(rèn)識(shí)到Kubernetes操作Pod的邏輯,都是由控制器來(lái)完成的。
查看之前寫(xiě)過(guò)的nginx-deployment的YAML文件 [root@kubernetes01 ~]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deploymentlabels: app: nginx spec:replicas: 2selector: matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.1ports:- containerPort: 80Kubernetes中的kube-controller-manager組件執(zhí)行了上面的Deployment定義的編排動(dòng)作。 Deployment定義的template字段,這種字段在Kubernetes中叫做PodTemplate(Pod模版)。 而這個(gè)YAML文件描述的就是Deployment這樣一個(gè)控制器,template以上的部分是對(duì)控制器的定義,template以下的部分屬于對(duì)被控制的對(duì)象的定義。2.Kubernetes Pod 的自動(dòng)伸縮
Pod水平擴(kuò)展和水平收縮的能力依賴于Kubernetes中一個(gè)非常重要的API對(duì)象,ReplicaSet也就是副本集。
2.1.Pod的水平擴(kuò)展和伸縮
查看例子的YAML文件 [root@kubernetes01 ~]# cat nginx-replicaset.yaml apiVersion: apps/v1 kind: ReplicaSet metadata:name: nginx-replicasetlabels: app: nginx spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.0 上面這個(gè)例子中,ReplicaSet對(duì)象是由一個(gè)Pod模版和副本數(shù)目的多少定義組成的。再看這個(gè)YAML文件 [root@kubernetes01 ~]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deploymentlabels: app: nginx spec:replicas: 3selector: matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.1ports:- containerPort: 80 Deployment控制器實(shí)際操作的是ReplicaSet對(duì)象,而不是Pod對(duì)象。 這個(gè)定義replicas=3的Deployment與他的ReplicaSet以及Pod的關(guān)系可以理解成是一種分層控制層層控制的關(guān)系,replicas的值決定是擴(kuò)展還是收縮,當(dāng)你去擴(kuò)展或是收縮的時(shí)候還伴隨著滾動(dòng)更新。2.2.Pod的滾動(dòng)更新
1.首先修改鏡像版本 kubectl edit deployment/nginx-deployment spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxports:- containerPort: 80protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30 這塊兒直接把image中nginx的版本改成了1.9.1然后保存退出,文件有了新的變動(dòng)會(huì)觸發(fā)更新。2.查看滾動(dòng)更新的效果 [root@kubernetes01 ~]# kubectl describe deployment nginx-deployment | tail -n 10 Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 30m deployment-controller Scaled up replica set nginx-deployment-7f987f7889 to 3Normal ScalingReplicaSet 8m55s deployment-controller Scaled up replica set nginx-deployment-6987cdb55b to 1Normal ScalingReplicaSet 8m54s deployment-controller Scaled down replica set nginx-deployment-7f987f7889 to 2Normal ScalingReplicaSet 8m54s deployment-controller Scaled up replica set nginx-deployment-6987cdb55b to 2Normal ScalingReplicaSet 8m33s deployment-controller Scaled down replica set nginx-deployment-7f987f7889 to 1Normal ScalingReplicaSet 8m33s deployment-controller Scaled up replica set nginx-deployment-6987cdb55b to 3Normal ScalingReplicaSet 8m12s deployment-controller Scaled down replica set nginx-deployment-7f987f7889 to 0 首先通過(guò)Events輸出的內(nèi)容我們可以看到這個(gè)deployment滾動(dòng)更新的Message。[root@kubernetes01 ~]# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-5c689d88bb 0 0 0 14d nginx-deployment-5cd6d46846 0 0 0 14d nginx-deployment-67d57d6df9 0 0 0 9d nginx-deployment-6987cdb55b 3 3 3 10m nginx-deployment-7f987f7889 0 0 0 9d nginx-replicaset 0 0 0 37m 然后查看這個(gè)Deployment控制的ReplicaSet的最終狀態(tài),這里等待了一會(huì)兒所以已經(jīng)是最終的狀態(tài)了,配合前邊Events的信息,nginx-deployment-6987cdb55b up to 1,舊的nginx-deployment-7f987f7889 down to 2,通過(guò)交替的逐一的升級(jí)和降級(jí)“滾動(dòng)更新”,最終 nginx-deployment-6987cdb55b 的DESIRED,CURRENT,READY都變成了期望值3!狀態(tài)字段的含義: DESIRED:用戶期望的Pod副本個(gè)數(shù) CURRENT:當(dāng)前處于Running狀態(tài)的Pod的個(gè)數(shù) UP-TO-DATE:當(dāng)前處于最新版本的Pod的個(gè)數(shù) READY:處于健康檢查正確狀態(tài)的Pod的個(gè)數(shù),Running狀態(tài)的新版本我們還可以通過(guò) kubectl rollout status deployment/nginx-deployment這條命令實(shí)時(shí)的查看Deployment對(duì)象的狀態(tài)變化。應(yīng)用的版本和ReplicaSet是一一對(duì)應(yīng)的,這也是Kubernetes實(shí)現(xiàn)對(duì)多個(gè)應(yīng)用版本描述的設(shè)計(jì)思想。3.Kubernetes Deployment對(duì)應(yīng)用的版本控制
1.首先通過(guò)命令直接這個(gè)Deployment的鏡像修改成錯(cuò)誤的 [root@kubernetes01 ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.99 deployment.extensions/nginx-deployment image updated2.查看Deployment的狀態(tài) [root@kubernetes01 ~]# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-5476c5bdd 1 1 0 12s nginx-deployment-5c689d88bb 0 0 0 15d nginx-deployment-5cd6d46846 0 0 0 14d nginx-deployment-67d57d6df9 0 0 0 10d nginx-deployment-6987cdb55b 3 3 3 46m nginx-deployment-7f987f7889 0 0 0 10d nginx-replicaset 0 0 0 73m nginx-staticwebsite-648bc64544 2 2 2 9d nginx-staticwebsite-8479f8997f 0 0 0 9d tomcat-deployment-001-84d957dc97 2 2 2 6d1h tomcat-test-6cc4d85cf6 2 2 2 6d18h 可以看到nginx-deployment-5476c5bdd這個(gè)有問(wèn)題的Deployment的狀態(tài)。3.回退到上個(gè)版本 [root@kubernetes01 ~]# kubectl rollout undo deployment/nginx-deployment deployment.extensions/nginx-deployment4.回退之后查看Deployment的狀態(tài) [root@kubernetes01 ~]# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-5476c5bdd 0 0 0 90s nginx-deployment-5c689d88bb 0 0 0 15d nginx-deployment-5cd6d46846 0 0 0 14d nginx-deployment-67d57d6df9 0 0 0 10d nginx-deployment-6987cdb55b 3 3 3 47m nginx-deployment-7f987f7889 0 0 0 10d nginx-replicaset 0 0 0 74m nginx-staticwebsite-648bc64544 2 2 2 9d nginx-staticwebsite-8479f8997f 0 0 0 9d tomcat-deployment-001-84d957dc97 2 2 2 6d1h tomcat-test-6cc4d85cf6 2 2 2 6d18h5.查看這個(gè)Deployment的歷史版本記錄 [root@kubernetes01 ~]# kubectl rollout history deployment/nginx-deployment deployment.extensions/nginx-deployment REVISION CHANGE-CAUSE 1 <none> 2 <none> 3 <none> 4 <none> 6 <none> 7 <none>6.查看第一個(gè)版本的信息 [root@kubernetes01 ~]# kubectl rollout history deployment/nginx-deployment --revision=1 deployment.extensions/nginx-deployment with revision #1 Pod Template:Labels: app=nginxpod-template-hash=5c689d88bbContainers:nginx:Image: nginx:1.7.9Port: 80/TCPHost Port: 0/TCPEnvironment: <none>Mounts: <none>Volumes: <none>7.切換到第一個(gè)版本 [root@kubernetes01 ~]# kubectl rollout undo deployment/nginx-deployment --to-revision=1 deployment.extensions/nginx-deployment8.查看Deployment的狀態(tài) [root@kubernetes01 ~]# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-5476c5bdd 0 0 0 19m nginx-deployment-5c689d88bb 3 3 3 15d nginx-deployment-5cd6d46846 0 0 0 14d nginx-deployment-67d57d6df9 0 0 0 10d nginx-deployment-6987cdb55b 0 0 0 65m nginx-deployment-7f987f7889 0 0 0 10d nginx-replicaset 0 0 0 92m nginx-staticwebsite-648bc64544 2 2 2 9d nginx-staticwebsite-8479f8997f 0 0 0 9d tomcat-deployment-001-84d957dc97 2 2 2 6d1h tomcat-test-6cc4d85cf6 2 2 2 6d18h 這塊兒可以看到副本集nginx-deployment-5c689d88bb已經(jīng)變成了我們期望的狀態(tài)。4.總結(jié)
PS:文中服務(wù)器使用的是國(guó)內(nèi)某??的機(jī)器
歡迎大家留言討論哦,歡迎大家和我一起學(xué)習(xí)Kubernetes~~~
轉(zhuǎn)載于:https://www.cnblogs.com/jason007/p/10718358.html
總結(jié)
以上是生活随笔為你收集整理的Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: dnf助手服务器内部出错,地下城与勇士T
- 下一篇: QT 发布程序到开发板