website/content/zh/docs/tasks/run-application/delete-stateful-set.md

5.0 KiB
Raw Blame History

reviewers title content_template weight
bprashanth
erictune
foxish
janetkuo
smarterclayton
删除 StatefulSet templates/task 60

{{% capture overview %}}

本文介绍如何删除 StatefulSet。

{{% /capture %}}

{{% capture prerequisites %}}

  • 本文假设在您的集群上已经运行了由 StatefulSet 创建的应用。

{{% /capture %}}

{{% capture steps %}}

删除 StatefulSet

您可以像删除 Kubernetes 中的其他资源一样删除 StatefulSet使用 kubectl delete 命令,并按文件或者名字指定 StatefulSet。

kubectl delete -f <file.yaml>
kubectl delete statefulsets <statefulset-name>

删除 StatefulSet 之后,您可能需要单独删除关联的无头服务。

kubectl delete service <service-name>

通过 kubectl 删除 StatefulSet 会将其缩容为0因此删除属于它的所有pods。 如果您只想删除 StatefulSet 而不删除 pods使用 --cascade=false

kubectl delete -f <file.yaml> --cascade=false

通过将 --cascade=false 传递给 kubectl delete,在删除 StatefulSet 对象之后StatefulSet 管理的 pods 会被保留下来。如果 pods 有一个标签 app=myapp,则可以按照如下方式删除它们:

kubectl delete pods -l app=myapp

Persistent Volumes

删除 StatefulSet 管理的 pods 并不会删除关联的卷。这是为了确保您有机会在删除卷之前从卷中复制数据。在pods离开终止状态后删除 PVC 可能会触发删除支持的 Persistent Volumes具体取决于存储类和回收策略。声明删除后您永远不应该假设能够访问卷。

注意:删除 PVC 时要谨慎,因为这可能会导致数据丢失。

完全删除 StatefulSet

要简单地删除 StatefulSet 中的所有内容,包括关联的 pods您可能需要运行一系列类似于以下内容的命令

grace=$(kubectl get pods <stateful-set-pod> --template '{{.spec.terminationGracePeriodSeconds}}')
kubectl delete statefulset -l app=myapp
sleep $grace
kubectl delete pvc -l app=myapp

在上面的例子中pods 的标签为 app=myapp;适当地替换您自己的标签。

强制删除 StatefulSet 类型的 pods

如果您发现 StatefulSet 中的某些 pods 长时间处于 'Terminating' 或者 'Unknown' 状态,则可能需要手动干预以强制从 apiserver 中删除 pods。这是一项潜在的危险任务。详细信息请阅读删除 StatefulSet 类型的 Pods

{{% /capture %}}

{{% capture whatsnext %}}

了解更多有关强制删除 StatefulSet 类型的 Pods

{{% /capture %}}