删除 StatefulSet
StatefulSet 同时支持级联和非级联删除:
使用非级联方式删除 StatefulSet 时,StatefulSet 的 Pod 不会被删除。
使用级联删除时,StatefulSet 和它的 Pod 都会被删除。
非级联删除
使用 kubectl delete 删除 StatefulSet。请确保提供了 --cascade=orphan 参数给命令。这个参数告诉 Kubernetes 只删除 StatefulSet 而不要删除它的任何 Pod。
$ 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,因此单独删除 Pod 时,该 Pod 不会被重建:
$ 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 会被删除
忽略 AlreadyExists 错误,因为只删除了 StatefulSet 并没删除 Service,所以在此创建 Service 时会提示已经存在该 Service:
$ 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
级联删除
省略 --cascade=orphan 参数即为级联删除:
$ kubectl delete sts web
statefulset.apps "web" deleted
$ kubectl get pod -l app=nginx
No resources found in default namespace.
也可以使用 -f 指定创建 StatefulSet 和 Service 的 YAML 文件,直接删除 StatefulSet 和 Service:
$ kubectl delete -f web-statefulset.yaml
service "nginx" deleted
statefulset.apps "web" deleted
最后更新于
这有帮助吗?