任务

任务
管理集群
Debug DNS 方案
Enabling Service Topology (EN)
IP Masquerade Agent 用户指南
Kubernetes 云管理控制器
Safely Drain a Node while Respecting the PodDisruptionBudget (EN)
为 Kubernetes 运行 etcd 集群
为系统守护进程预留计算资源
为节点发布扩展资源
使用 CoreDNS 进行服务发现
使用 KMS 提供商进行数据加密
使用 Kubernetes API 访问集群
关键插件 Pod 的调度保证
启用端点切片
命名空间演练
在 Kubernetes 集群中使用 NodeLocal DNSCache
在 Kubernetes 集群中使用 sysctl
在实时集群上重新配置节点的 Kubelet
声明网络策略
开发云控制器管理器
控制节点上的 CPU 管理策略
控制节点上的拓扑管理策略
搭建高可用的 Kubernetes Masters
改变默认 StorageClass
更改 PersistentVolume 的回收策略
自定义 DNS 服务
访问集群上运行的服务
通过命名空间共享集群
通过配置文件设置 Kubelet 参数
配置 API 对象配额
配置多个调度器
配置资源不足时的处理方式
限制存储消耗
集群 DNS 服务自动伸缩
集群安全
集群管理
静态加密 Secret 数据
用插件扩展 kubectl
管理巨页(HugePages)
调度 GPUs

Edit This Page

删除 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 会将其缩容为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

接下来

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

反馈