Pod控制器-ReplicaSet(RS)
Pod控制器介紹
Pod是kubernetes的最小管理單元,在kubernetes中,按照pod的創(chuàng)建方式可以將其分為兩類:
- 自主式pod:kubernetes直接創(chuàng)建出來的Pod,這種pod刪除后就沒有了,也不會重建
- 控制器創(chuàng)建的pod:kubernetes通過控制器創(chuàng)建的pod,這種pod刪除了之后還會自動重建
什么是Pod控制器?
Pod控制器是管理pod的中間層,使用Pod控制器之后,只需要告訴Pod控制器,想要多少個什么樣的Pod就可以了,它會創(chuàng)建出滿足條件的Pod并確保每一個Pod資源處于用戶期望的目標狀態(tài)。如果Pod資源在運行中出現(xiàn)故障,它會基于指定策略重新編排Pod。
在kubernetes中,有很多類型的pod控制器,每種都有自己的適合的場景,常見的有下面這些:
ReplicationController:比較原始的pod控制器,已經(jīng)被廢棄,由ReplicaSet替代
ReplicaSet:保證副本數(shù)量一直維持在期望值,并支持pod數(shù)量擴縮容,鏡像版本升級
Deployment:通過控制ReplicaSet來控制Pod,并支持滾動升級、回退版本
Horizontal Pod Autoscaler:可以根據(jù)集群負載自動水平調(diào)整Pod的數(shù)量,實現(xiàn)削峰填谷
DaemonSet:在集群中的指定Node上運行且僅運行一個副本,一般用于守護進程類的任務
Job:它創(chuàng)建出來的pod只要完成任務就立即退出,不需要重啟或重建,用于執(zhí)行一次性任務
Cronjob:它創(chuàng)建的Pod負責周期性任務控制,不需要持續(xù)后臺運行
StatefulSet:管理有狀態(tài)應用
ReplicaSet(RS)
ReplicaSet的主要作用是保證一定數(shù)量的pod正常運行,它會持續(xù)監(jiān)聽這些Pod的運行狀態(tài),一旦Pod發(fā)生故障,就會重啟或重建。同時它還支持對pod數(shù)量的擴縮容和鏡像版本的升降級。
ReplicaSet的資源清單文件:
在這里面,需要新了解的配置項就是spec下面幾個選項:
-
replicas:指定副本數(shù)量,其實就是當前rs創(chuàng)建出來的pod的數(shù)量,默認為1
-
selector:選擇器,它的作用是建立pod控制器和pod之間的關(guān)聯(lián)關(guān)系,采用的Label Selector機制
在pod模板上定義label,在控制器上定義選擇器,就可以表明當前控制器能管理哪些pod了 -
template:模板,就是當前控制器創(chuàng)建pod所使用的模板板,里面其實就是前一章學過的pod的定義
創(chuàng)建ReplicaSet
創(chuàng)建pc-replicaset.yaml文件,內(nèi)容如下:
apiVersion: apps/v1 kind: ReplicaSet metadata:name: pc-replicasetnamespace: dev spec:replicas: 3selector: matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1 # 創(chuàng)建rs [root@k8s-master01 ~]# kubectl create -f pc-replicaset.yaml replicaset.apps/pc-replicaset created# 查看rs # DESIRED:期望副本數(shù)量 # CURRENT:當前副本數(shù)量 # READY:已經(jīng)準備好提供服務的副本數(shù)量 [root@k8s-master01 ~]# kubectl get rs pc-replicaset -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR pc-replicaset 3 3 3 22s nginx nginx:1.17.1 app=nginx-pod# 查看當前控制器創(chuàng)建出來的pod # 這里發(fā)現(xiàn)控制器創(chuàng)建出來的pod的名稱是在控制器名稱后面拼接了-xxxxx隨機碼 [root@k8s-master01 ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 1/1 Running 0 54s pc-replicaset-fmb8f 1/1 Running 0 54s pc-replicaset-snrk2 1/1 Running 0 54s擴縮容
# 編輯rs的副本數(shù)量,修改spec:replicas: 6即可 [root@k8s-master01 ~]# kubectl edit rs pc-replicaset -n dev replicaset.apps/pc-replicaset edited# 查看pod [root@k8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 1/1 Running 0 114m pc-replicaset-cftnp 1/1 Running 0 10s pc-replicaset-fjlm6 1/1 Running 0 10s pc-replicaset-fmb8f 1/1 Running 0 114m pc-replicaset-s2whj 1/1 Running 0 10s pc-replicaset-snrk2 1/1 Running 0 114m# 當然也可以直接使用命令實現(xiàn) # 使用scale命令實現(xiàn)擴縮容, 后面--replicas=n直接指定目標數(shù)量即可 [root@k8s-master01 ~]# kubectl scale rs pc-replicaset --replicas=2 -n dev replicaset.apps/pc-replicaset scaled# 命令運行完畢,立即查看,發(fā)現(xiàn)已經(jīng)有4個開始準備退出了 [root@k8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 0/1 Terminating 0 118m pc-replicaset-cftnp 0/1 Terminating 0 4m17s pc-replicaset-fjlm6 0/1 Terminating 0 4m17s pc-replicaset-fmb8f 1/1 Running 0 118m pc-replicaset-s2whj 0/1 Terminating 0 4m17s pc-replicaset-snrk2 1/1 Running 0 118m#稍等片刻,就只剩下2個了 [root@k8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-fmb8f 1/1 Running 0 119m pc-replicaset-snrk2 1/1 Running 0 119m鏡像升級
# 編輯rs的容器鏡像 - image: nginx:1.17.2 [root@k8s-master01 ~]# kubectl edit rs pc-replicaset -n dev replicaset.apps/pc-replicaset edited# 再次查看,發(fā)現(xiàn)鏡像版本已經(jīng)變更了 [root@k8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... pc-replicaset 2 2 2 140m nginx nginx:1.17.2 ...# 同樣的道理,也可以使用命令完成這個工作 # kubectl set image rs rs名稱 容器=鏡像版本 -n namespace [root@k8s-master01 ~]# kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev replicaset.apps/pc-replicaset image updated# 再次查看,發(fā)現(xiàn)鏡像版本已經(jīng)變更了 [root@k8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... pc-replicaset 2 2 2 145m nginx nginx:1.17.1 ...刪除ReplicaSet
# 使用kubectl delete命令會刪除此RS以及它管理的Pod # 在kubernetes刪除RS前,會將RS的replicasclear調(diào)整為0,等待所有的Pod被刪除后,在執(zhí)行RS對象的刪除 [root@k8s-master01 ~]# kubectl delete rs pc-replicaset -n dev replicaset.apps "pc-replicaset" deleted [root@k8s-master01 ~]# kubectl get pod -n dev -o wide No resources found in dev namespace.# 如果希望僅僅刪除RS對象(保留Pod),可以使用kubectl delete命令時添加--cascade=false選項(不推薦)。 [root@k8s-master01 ~]# kubectl delete rs pc-replicaset -n dev --cascade=false replicaset.apps "pc-replicaset" deleted [root@k8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-cl82j 1/1 Running 0 75s pc-replicaset-dslhb 1/1 Running 0 75s# 也可以使用yaml直接刪除(推薦) [root@k8s-master01 ~]# kubectl delete -f pc-replicaset.yaml replicaset.apps "pc-replicaset" deleted本文摘抄或總結(jié)其他筆記,筆記不涉及任何商業(yè)用途,如果侵權(quán)請及時聯(lián)系處理
參考:
k8s官方文檔
yooome / LearningNotes
總結(jié)
以上是生活随笔為你收集整理的Pod控制器-ReplicaSet(RS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongoDB的读书笔记(04)_【Re
- 下一篇: ping 的错误回应