> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/devops/kubernetes/ji-chu-zhi-shi/kubernetes-diao-du/statefulset/shan-chu-statefulset.md).

# 删除 StatefulSet

StatefulSet 同时支持<mark style="color:blue;">**级联**</mark>和<mark style="color:blue;">**非级联**</mark>删除：

* 使用**非级联**方式删除 StatefulSet 时，**StatefulSet 的 Pod 不会被删除**。
* 使用**级联**删除时，StatefulSet 和它的 **Pod 都会被删除**。

## 非级联删除

使用 <mark style="color:blue;">**kubectl delete**</mark> 删除 StatefulSet。请确保提供了 <mark style="color:blue;">**--cascade=orphan**</mark> 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。

```properties
$ kubectl delete sts web --cascade=orphan
statefulset.apps "web" deleted

$ kubectl get pod -l app=nginx
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          2m4s
web-1   1/1     Running   0          2m1s
web-2   1/1     Running   0          32s
```

由于此时删除了 StatefulSet，它管理的 Pod 变成了“孤儿” Pod，因此<mark style="color:blue;">**单独删除 Pod 时，该 Pod 不会被重建**</mark>：

```properties
$ kubectl delete pod web-0
pod "web-0" deleted

$ kubectl get pod -l app=nginx
NAME    READY   STATUS    RESTARTS   AGE
web-1   1/1     Running   0          2m25s
web-2   1/1     Running   0          56s
```

当再次创建此 StatefulSet 时：

* web-0 会被重新创建
* 由于 web-1 已经存在，因此不会被再次创建
* 因为最初此 StatefulSet 的 replicas 是 2，所以 web-2 会被删除

<mark style="background-color:blue;">忽略 AlreadyExists 错误，因为只删除了 StatefulSet 并没删除 Service，所以在此创建 Service 时会提示已经存在该 Service</mark>：

{% code overflow="wrap" %}

```properties
$ kubectl create -f web-statefulset.yaml 
statefulset.apps/web created
Error from server (AlreadyExists): error when creating "web-statefulset.yaml": services "nginx" already exists

$ kubectl get pod -w -l app=nginx
NAME    READY   STATUS    RESTARTS   AGE
web-1   1/1     Running   0          2m44s
web-2   1/1     Running   0          75s
web-0   0/1     Pending   0          0s
web-0   0/1     Pending   0          0s
web-0   0/1     ContainerCreating   0          1s
web-0   0/1     ContainerCreating   0          1s
web-0   1/1     Running             0          2s
web-2   1/1     Terminating         0          81s
web-2   1/1     Terminating         0          82s
web-2   0/1     Terminating         0          82s
web-2   0/1     Terminating         0          82s
web-2   0/1     Terminating         0          82s
web-2   0/1     Terminating         0          82s

$ kubectl get pod -l app=nginx
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          32s
web-1   1/1     Running   0          3m20s
```

{% endcode %}

## 级联删除

省略 <mark style="color:blue;">**--cascade=orphan**</mark> 参数即为级联删除：

```properties
$ kubectl delete sts web 
statefulset.apps "web" deleted

$ kubectl get pod -l app=nginx
No resources found in default namespace.
```

也可以<mark style="color:blue;">**使用 -f 指定创建 StatefulSet 和 Service 的 YAML 文件，直接删除 StatefulSet 和 Service：**</mark>

```properties
$ kubectl delete -f web-statefulset.yaml
service "nginx" deleted
statefulset.apps "web" deleted
```
