在「K8s: cluster (hostname & IP)」中,有使用到如下的指令擴容 pod host 成 3 個,並交給讓 ReplicaSet 管理。
kubectl scale rs host --replicas=3在「部署 RESTful service 到 Kubernetes」中更有使用到如下的 yaml 直接由 image 創立 3 個 pod 交給 ReplicaSet 管理,這裡針對 yaml 做個說明。
apiVersion: apps/v1 kind: ReplicaSet metadata: name: host spec: replicas: 3 selector: matchLabels: app: host template: metadata: labels: app: host spec: containers: - name: host image: twleader/host
- 第 2 行指出要建立的資源是 ReplicaSet
- 第 4 行指出 ReplicaSet 的名稱為 host
- 第 6 行表示會產生 3 個 pod
- ReplicaSet 管理 pod 的方式是透過 label,第 7~9 行指出當 pod 有 app=host 的 label 時,就納入這個 rs host 管理。
- 第 10 行 template 以下,說明了要創建 pos,包括第 12~13 行指出每個 pod 會有 label "app=host",第 14~17 行則指出,pod 是由 image twleader/host 產生,並且 pod 的名稱為 host。
也就是說,只要有納入 rs 管理的 pod,當 pod 因為各種原因被判定為已經停止運轉,rs 會重新啟動 pod,但是如果是 pod 被刪除,則 rs 會創立一個新的 pod。下面要開始來實驗看看 …
我把 pod、rs 都刪光了,所以現在什麼都沒有 …
kubectl create -f host-rs.yaml使用上面的 yaml 創立一個命名為 host 的 rs,及三個命名為 host-xxxxx 的 pod 交給這個 rs 管理,特別注意,這三個 pod 都有 Label "app=host"。
如上,我刪除了 pod host-dfsrc,rs 立刻又建立了一個新的 pod host-tft2x。如果我把 pod 的 label 改掉呢?
kubectl label pods host-678mg "app=hostX" --overwrite我改掉了 po host-678mg 裡的 label 讓它變成 "app=hostX",因為 rs host 管理的是 label "app=host" 的 pod,ReplicaSet 偵測到符合的 pod 只剩兩個,所以又創建了一個 po host-c492q。
這個時候因為 pod host-678mg 沒有被任何 ReplicaSet 管理,它的存續與否不會被偵測管理。上面實驗證實了,當實際的 pod 少於預期時,ReplicaSet 會創立新的 pod,那麼,如果 pod 超過預期呢? ReplicaSet 真的會將它減少為 3 個嗎?
如上,我們觀察到了,當我把 host-678mg 的 label 改回 "app=host",ReplicaSet 偵測到符合條件的 pod 有四個,比預期的多一個,這時候就從已存在的四個中排一個刪除。上面我的刪除後查詢的太快,顯示出要被刪除的 pod 狀態為 Terminating,重新查詢後,才真的只剩 3 個。
最後,我們可以用以下指令查詢 rs 的詳細說明:
kubectl describe rs
實驗做完了,我們想刪除 rs 及所有的 pod,只要刪除 rs 即可,rs 所管理的 pod 會被一併刪除。
沒有留言:
張貼留言