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 管道中。