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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM