前言
本文為「Kubernetes 實作手冊:基礎入門篇」課程的學習筆記。
簡介
StatefulSet 是用來管理有狀態應用的資源。StatefulSet 用來管理某 Pod 集合的部署和擴縮, 並為這些 Pod 提供持久存儲和持久標識符。
和 Deployment 類似,StatefulSet 管理基於相同容器規格的一組 Pod。但和 Deployment 不同的是,StatefulSet 為他們的每個 Pod 維護了一個「有黏性」的 ID。這些 Pod 是基於相同的規格來創建的,但是不能相互替換;無論怎麼調度,每個 Pod 都有一個永久不變的 ID。
如果希望使用存儲捲為工作負載提供持久存儲,可以使用 StatefulSet 作為解決方案的一部分。
實作
以下使用 kind 的環境。
1 | cd vagrant/kind |
首先,查看範例資料夾中的 StatefulSet 配置檔。
1 | cat introduction/sts/basic.yaml |
以下是一個描述 StatefulSet 的 YAML 範例檔,其中 template
的部分其實就是 Pod 的配置檔的格式,並透過標籤綁定在一起。
1 | apiVersion: apps/v1 |
使用配置檔創建 StatefulSet 資源。
1 | kubectl apply -f introduction/sts/basic.yaml |
查看此 StatefulSet 與其他資源的關係。
1 | kubectl tree sts test-sts |
有序升級版本
使用 kubectl rollout status
指令,查看 StatefulSet 的更新狀態。
1 | kubectl rollout status sts test-sts |
結果如下:
1 | partitioned roll out complete: 3 new pods have been updated... |
更新 StatefulSet 配置檔,將 image
改為其他的映像檔。
1 | image: hwchiu/netutils |
再套用一次配置檔。
1 | kubectl apply -f introduction/sts/basic.yaml |
查看 StatefulSet 的更新狀態。
1 | kubectl rollout status sts test-sts |
結果如下:
1 | Waiting for 1 pods to be ready... |
使用另一個終端機視窗觀察 Pod 的變化。
1 | kubectl get pods -o wide -w |
可以看到 Pod 的生成順序為:
1 | test-sts-0 |
有序降級版本
使用 kubectl rollout undo
指令。
1 | kubectl rollout undo sts test-sts |
查看 StatefulSet 的更新狀態。
1 | kubectl rollout status sts test-sts |
結果如下:
1 | Waiting for 1 pods to be ready... |
使用另一個終端機視窗觀察 Pod 的變化。
1 | kubectl get pods -o wide -w |
可以看到新的 Pod 的生成順序為:
1 | test-sts-2 |