您好,登錄后才能下訂單哦!
如何理解ReplicaSet的操作,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
我們通過一些例子來演示ReplicaSet
的創建、查看、更新、刪除等操作。
首先我們做準備一個名為replicaset.yaml
的配置文件,其內容如下所示:
apiVersion: apps/v1 kind: ReplicaSet metadata: name: replicaset-runs-pod spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.19.0
該ReplicaSet
配置保證同時有3個Pod副本在運行。
使用kubectl create
命令創建ReplicaSet
控制器,如下所示:
[root@ecs-d8b6 manifests]# kubectl create -f replicaset.yaml replicaset.apps/replicaset-runs-pod created
命令行輸出顯示,一個名為replicaset-runs-pod
的ReplicaSet
控制器已經創建完成。
我們先查看剛創建的ReplicaSet
控制器:
[root@ecs-d8b6 manifests]# kubectl get replicaset NAME DESIRED CURRENT READY AGE replicaset-runs-pod 3 3 3 90s
可以看到控制器replicaset-runs-pod
期望的Pod數量(DESIRED)為3,當前已創建的Pod數量(CURRENT)也為3,并且處于READY狀態的Pod數量(READY)同樣是3,正是我們期望的狀態。
接著再查看實際運行的Pod:
[root@ecs-d8b6 manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE replicaset-runs-pod-dzhqp 1/1 Running 0 5m replicaset-runs-pod-hpbs8 1/1 Running 0 5m replicaset-runs-pod-xhx9j 1/1 Running 0 5m
可以看到有3個Pod在運行,Pod名字統一使用其控制器名字為前綴,再加一個隨機字符串。
使用kubectl describe
命令查看控制器,可以看到其創建Pod的記錄:
[root@ecs-d8b6 manifests]# kubectl describe replicaset replicaset-runs-pod Name: replicaset-runs-pod Namespace: default Selector: app=nginx Labels: <none> Annotations: <none> Replicas: 3 current / 3 desired Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.19.0 Port: <none> Host Port: <none> Environment: <none> Mounts: <none> Volumes: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-xhx9j Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-dzhqp Normal SuccessfulCreate 8m5s replicaset-controller Created pod: replicaset-runs-pod-hpbs8
通過最后的Events
信息可知,控制器replicaset-runs-pod
運行過程中分別創建了上面的3個Pod。
我們使用kubectl edit
命令修改控制器replicaset-runs-pod
,把spec.replicas
數量由3調整為5:
[root@ecs-d8b6 manifests]# kubectl edit replicaset replicaset-runs-pod replicaset.apps/replicaset-runs-pod edited
然后再次查看Pod:
[root@ecs-d8b6 manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE replicaset-runs-pod-5mtdk 1/1 Running 0 37s replicaset-runs-pod-6rqqp 1/1 Running 0 37s replicaset-runs-pod-dzhqp 1/1 Running 0 21m replicaset-runs-pod-hpbs8 1/1 Running 0 21m replicaset-runs-pod-xhx9j 1/1 Running 0 21m
可以看到兩個新的Pod被創建了出來,Pod副本數與配置中spec.replicas
設定置一致。
類似地,當我們再次修改控制器replicaset-runs-pod
配置,將spec.replicas
數量由5調整為3,多出的Pod數量會被自動刪除。
ReplicaSet
控制器將始終確保集群中運行的Pod副本數滿足期望值,當Pod被刪除時,控制器將馬上創建新的Pod填補空缺:
[root@ecs-d8b6 manifests]# kubectl delete pods replicaset-runs-pod-dzhqp pod "replicaset-runs-pod-dzhqp" deleted [root@ecs-d8b6 manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE replicaset-runs-pod-hpbs8 1/1 Running 0 31m replicaset-runs-pod-tbccg 1/1 Running 0 9s replicaset-runs-pod-xhx9j 1/1 Running 0 31m
上面的例子中,當手動刪除某個ReplicaSet
控制器管理的Pod時,新的Pod馬上被創建了出來,通過Pod運行時間或者控制器事件信息都可以看出。
當刪除ReplicaSet
控制器時,其管理的Pod默認也會相應的刪除,如下所示:
[root@ecs-d8b6 manifests]# kubectl delete -f replicaset.yaml replicaset.apps "replicaset-runs-pod" deleted [root@ecs-d8b6 manifests]# kubectl get pods No resources found in default namespace.
ReplicaSet
控制器的能力側重于對副本數量的把控,它能保證集群中時刻運行指定數量的Pod副本,當配置中Pod副本數量變化時,可以動態地調整Pod數量。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。