1. 程式人生 > 其它 >K8s之ReplicaSet學習筆記

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的

metadata.ownerReferences欄位連結到其Pod,該欄位指定當前物件所擁有的資源。由ReplicaSet獲取的所有Pod在其ownerReferences欄位中都有其自己的ReplicaSet的標識資訊。通過此連結,ReplicaSet可以知道它正在維護的Pod的狀態,並據此計劃。

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