刪除 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 後,你絕不應假定能夠訪問卷。

完整刪除 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 的資訊。

最後修改於 2023 年 3 月 14 日太平洋標準時間晚上 8:12:調整 run-application 中的行換行(8b527bab7e)