刪除 StatefulSet
此任務展示瞭如何刪除 StatefulSet。
準備工作
- 此任務假設你在叢集中運行了一個由 StatefulSet 表示的應用程式。
刪除 StatefulSet
你可以像刪除 Kubernetes 中其他資源一樣刪除 StatefulSet:使用 kubectl delete
命令,並透過檔案或名稱指定 StatefulSet。
kubectl delete -f <file.yaml>
kubectl delete statefulsets <statefulset-name>
StatefulSet 本身刪除後,你可能需要單獨刪除相關的無頭服務。
kubectl delete service <service-name>
透過 kubectl
刪除 StatefulSet 時,StatefulSet 將縮容到 0。作為此工作負載一部分的所有 Pod 也會被刪除。如果你只想刪除 StatefulSet 而不刪除 Pod,請使用 --cascade=orphan
。例如
kubectl delete -f <file.yaml> --cascade=orphan
透過向 kubectl delete
傳遞 --cascade=orphan
,即使 StatefulSet 物件本身被刪除,由 StatefulSet 管理的 Pod 也會被保留。如果 Pod 具有標籤 app.kubernetes.io/name=MyApp
,則可以按如下方式刪除它們:
kubectl delete pods -l app.kubernetes.io/name=MyApp
持久卷
刪除 StatefulSet 中的 Pod 不會刪除相關的卷。這是為了確保你可以在刪除卷之前有機會從卷中複製資料。在 Pod 終止後刪除 PVC 可能會觸發後端 Persistent Volumes 的刪除,具體取決於儲存類和回收策略。在刪除 PVC 後,你絕不應假定能夠訪問卷。
注意
刪除 PVC 時請務必小心,因為它可能導致資料丟失。完整刪除 StatefulSet
要刪除 StatefulSet 中的所有內容,包括相關的 Pod,可以執行一系列類似於以下內容的命令:
grace=$(kubectl get pods <stateful-set-pod> --template '{{.spec.terminationGracePeriodSeconds}}')
kubectl delete statefulset -l app.kubernetes.io/name=MyApp
sleep $grace
kubectl delete pvc -l app.kubernetes.io/name=MyApp
在上面的示例中,Pod 具有標籤 app.kubernetes.io/name=MyApp
;請酌情替換你自己的標籤。
強制刪除 StatefulSet Pod
如果你發現 StatefulSet 中的某些 Pod 長時間卡在“Terminating”或“Unknown”狀態,你可能需要手動干預,強制從 apiserver 中刪除 Pod。這是一項潛在危險的任務。有關詳細資訊,請參閱強制刪除 StatefulSet Pod。
下一步
瞭解更多關於強制刪除 StatefulSet Pod 的資訊。