日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩

發(fā)布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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伸缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。