Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.Kubernetes的controller pattern
需要認識到Kubernetes操作Pod的邏輯,都是由控制器來完成的。
查看之前寫過的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定義的編排動作。 Deployment定義的template字段,這種字段在Kubernetes中叫做PodTemplate(Pod模版)。 而這個YAML文件描述的就是Deployment這樣一個控制器,template以上的部分是對控制器的定義,template以下的部分屬于對被控制的對象的定義。2.Kubernetes Pod 的自動伸縮
Pod水平擴展和水平收縮的能力依賴于Kubernetes中一個非常重要的API對象,ReplicaSet也就是副本集。
2.1.Pod的水平擴展和伸縮
查看例子的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 上面這個例子中,ReplicaSet對象是由一個Pod模版和副本數(shù)目的多少定義組成的。再看這個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控制器實際操作的是ReplicaSet對象,而不是Pod對象。 這個定義replicas=3的Deployment與他的ReplicaSet以及Pod的關系可以理解成是一種分層控制層層控制的關系,replicas的值決定是擴展還是收縮,當你去擴展或是收縮的時候還伴隨著滾動更新。2.2.Pod的滾動更新
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然后保存退出,文件有了新的變動會觸發(fā)更新。2.查看滾動更新的效果 [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 首先通過Events輸出的內容我們可以看到這個deployment滾動更新的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 然后查看這個Deployment控制的ReplicaSet的最終狀態(tài),這里等待了一會兒所以已經是最終的狀態(tài)了,配合前邊Events的信息,nginx-deployment-6987cdb55b up to 1,舊的nginx-deployment-7f987f7889 down to 2,通過交替的逐一的升級和降級“滾動更新”,最終 nginx-deployment-6987cdb55b 的DESIRED,CURRENT,READY都變成了期望值3!狀態(tài)字段的含義: DESIRED:用戶期望的Pod副本個數(shù) CURRENT:當前處于Running狀態(tài)的Pod的個數(shù) UP-TO-DATE:當前處于最新版本的Pod的個數(shù) READY:處于健康檢查正確狀態(tài)的Pod的個數(shù),Running狀態(tài)的新版本我們還可以通過 kubectl rollout status deployment/nginx-deployment這條命令實時的查看Deployment對象的狀態(tài)變化。應用的版本和ReplicaSet是一一對應的,這也是Kubernetes實現(xiàn)對多個應用版本描述的設計思想。3.Kubernetes Deployment對應用的版本控制
1.首先通過命令直接這個Deployment的鏡像修改成錯誤的 [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這個有問題的Deployment的狀態(tài)。3.回退到上個版本 [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.查看這個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.查看第一個版本的信息 [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.切換到第一個版本 [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已經變成了我們期望的狀態(tài)。4.總結
PS:文中服務器使用的是國內某??的機器
歡迎大家留言討論哦,歡迎大家和我一起學習Kubernetes~~~
轉載于:https://www.cnblogs.com/jason007/p/10718358.html
總結
以上是生活随笔為你收集整理的Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf助手服务器内部出错,地下城与勇士T
- 下一篇: 80端口被占用的两种解决方案 - 超详细