K8s之ReplicaSet學習筆記
replicaset
1.Replicaset概念
Kubernetes中的ReplicaSet主要的作用是維持一組Pod副本的執行,它的主要作用就是保證一定數量的 Pod 能夠在叢集中正常執行,它會持續監聽這些 Pod 的執行狀態,在 Pod 發生故障時重啟pod,pod數量減少時重新執行新的 Pod 副本,因此,它通常被用來保證特定數量相同的Pods的可用性。
2.replicaset怎麼工作
ReplicaSet由欄位定義,包括一個選擇器,該選擇器指定如何找到它所管理的Pod、維護多少個pod,以及pod的模板。ReplicaSet通過建立和刪除Pod來滿足期望的pod數量。當ReplicaSet需要建立新的Pod時,它將使用其Pod模板。ReplicaSet通過Pods的
ReplicaSet通過使用其選擇器標識要獲取的新Pod。如果存在沒有OwnerReference的Pod或OwnerReference不是控制器,並且它與ReplicaSet的選擇器匹配,它將由所述的ReplicaSet立即獲取
3.什麼時候使用replicaset
replicaSet確保在任何給定時間都執行指定數量的Pod副本。但是,Deployment是一個高階概念,用於管理副本集,並提供對Pod的宣告性更新以及許多其他有用的功能。因此,除非你需要自定義更新編排或根本不需要更新,否則我們使用Deployment而不是直接使用replicaset。這實際上意味著你可能永遠不需要操縱ReplicaSet物件:改用Deployment,然後在spec部分中定義你的應用程式。
例子:
apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tire: frontend spec: replicas: 3 selector: matchLabels: app: guestbook tire: frontend template: metadata: labels: app: guestbook tire: frontend spec: containers: - name: php-redis image: yecc/gcr.io-google_samples-gb-frontend:v3
編寫replicaset資源清單檔案
與所有其他 Kubernetes API物件一樣,ReplicaSet需要apiVersion、kind、和metadata,ReplicaSet 也需要.spec部分。對於replicaset副本集來說,kind只能是replicaset,在kubernetes1.9+之後,apiversion預設的版本是apps/v1,apps/v1beta2已經被廢棄了。
Pod template
.spec.template是一個Pod模板,還需要在其上放置標籤。在我們的replicaset.yaml示例中,我們有一個標籤:tier: frontend。注意不要與其他控制器的選擇器重疊。對於 重啟策略,.spec.template.spec.restartPolicy 唯一允許的取值是 Always,這也是預設值.
pod selector
.spec.selector欄位是標籤選擇器。可以選擇它所匹配的擁有相同標籤的pod。在我們的 replicaset.yaml示例中,選擇器為:
matchLabels:
tier: frontend
在ReplicaSet中,.spec.template.metadata.labels必須匹配spec.selector,否則將被API拒絕。
注意:對於指定相同.spec.selector但不同的.spec.template.metadata.labels和.spec.template.spec欄位的2個replicaset,每個replicaset都會忽略另一個replicaset建立的Pod。
Replicas
通過設定 .spec.replicas 您可以指定要同時執行多少個 Pod。 在任何時間執行的 Pod 數量可能高於或低於 .spec.replicas 指定的數量,例如在副本剛剛被增加或減少後、或者 Pod 正在被優雅地關閉、以及替換提前開始。
如果您沒有指定 .spec.replicas, 那麼預設值為 1
刪除
如果我們在 Kubernetes 叢集中刪除一個 ReplicaSet 持有的 Pod,那麼控制器會重新同步 ReplicaSet 的狀態並啟動一個新的 Pod,但是如果刪除叢集中的 ReplicaSet 所有相關的 Pod 也都會被刪除:
kubectl delete rs example