刪除 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

透過將 --cascade=orphan 傳遞給 kubectl delete,即使 StatefulSet 物件本身已刪除,StatefulSet 管理的 Pod 仍會保留。如果 Pod 具有標籤 app.kubernetes.io/name=MyApp,您可以依照下列方式刪除它們

kubectl delete pods -l app.kubernetes.io/name=MyApp

持久卷

刪除 StatefulSet 中的 Pod 不會刪除相關聯的卷。這是為了確保您有機會在刪除卷之前複製資料。在 Pod 終止後刪除 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 PST:Tweak line wrappings in run-application (8b527bab7e)