K8S部署:如何在移除前重新创建一个pod?
K8S Deployment: How to recreate a pod before removal?
我知道 kubectl delete pod <pod_name>
将删除 pod,如果它由部署管理,则会自动创建一个新的 pod。
只是想知道是否有办法在删除之前进行重新创建?就像用 surge 滚动重启一个 pod 一样。
将滚动更新模式设置为激增,然后使用 kubectl rollout restart deployment
。
没有简单的方法,但有一个解决方法,虽然它需要几个步骤,需要一个一个地完成,而且不容易出错,但我会向您展示,看看是否可以完成但是你可能不应该这样做。
让我们先创建一个测试部署:
$ kubectl create deployment --image nginx ngx --replicas 3 --dry-run -oyaml > depl
$ kubectl apply -f depl
deployment.apps/ngx created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 45s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 45s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 45s
将部署扩展一个副本:
$ kubectl scale deployment --replicas 4 ngx
deployment.apps/ngx scaled
使用 --cascade=orphan
删除部署和副本集(它将删除部署和副本集,但 pods 保持不变):
$ kubectl delete deployment ngx --cascade=orphan
deployment.apps "ngx" deleted
$ kubectl delete replicaset ngx-768fd5d6f5 --cascade=orphan
replicaset.apps "ngx-768fd5d6f5" deleted
删除您想要的广告连播:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 4m53s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 4m53s
ngx-768fd5d6f5-t4jch 1/1 Running 0 3m23s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 4m53s
$ kubectl delete po ngx-768fd5d6f5-t4jch
pod "ngx-768fd5d6f5-t4jch" deleted
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 5m50s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 5m50s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 5m50s
现在恢复部署:
$ kubectl apply -f depl
deployment.apps/ngx created
新创建的部署将创建一个新的副本集,该副本集将继承现有的 pods。
如您所见,这是可以做到的,但需要更多的努力和一些技巧。这有时很有用,但我不建议将其包含在您的 CI/CD 管道中。
我知道 kubectl delete pod <pod_name>
将删除 pod,如果它由部署管理,则会自动创建一个新的 pod。
只是想知道是否有办法在删除之前进行重新创建?就像用 surge 滚动重启一个 pod 一样。
将滚动更新模式设置为激增,然后使用 kubectl rollout restart deployment
。
没有简单的方法,但有一个解决方法,虽然它需要几个步骤,需要一个一个地完成,而且不容易出错,但我会向您展示,看看是否可以完成但是你可能不应该这样做。
让我们先创建一个测试部署:
$ kubectl create deployment --image nginx ngx --replicas 3 --dry-run -oyaml > depl
$ kubectl apply -f depl
deployment.apps/ngx created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 45s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 45s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 45s
将部署扩展一个副本:
$ kubectl scale deployment --replicas 4 ngx
deployment.apps/ngx scaled
使用 --cascade=orphan
删除部署和副本集(它将删除部署和副本集,但 pods 保持不变):
$ kubectl delete deployment ngx --cascade=orphan
deployment.apps "ngx" deleted
$ kubectl delete replicaset ngx-768fd5d6f5 --cascade=orphan
replicaset.apps "ngx-768fd5d6f5" deleted
删除您想要的广告连播:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 4m53s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 4m53s
ngx-768fd5d6f5-t4jch 1/1 Running 0 3m23s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 4m53s
$ kubectl delete po ngx-768fd5d6f5-t4jch
pod "ngx-768fd5d6f5-t4jch" deleted
$ kubectl get po
NAME READY STATUS RESTARTS AGE
ngx-768fd5d6f5-bj5z4 1/1 Running 0 5m50s
ngx-768fd5d6f5-rt9p5 1/1 Running 0 5m50s
ngx-768fd5d6f5-w4bv7 1/1 Running 0 5m50s
现在恢复部署:
$ kubectl apply -f depl
deployment.apps/ngx created
新创建的部署将创建一个新的副本集,该副本集将继承现有的 pods。
如您所见,这是可以做到的,但需要更多的努力和一些技巧。这有时很有用,但我不建议将其包含在您的 CI/CD 管道中。