相当于`helbectl delete pods --all -n namespace`

时间:2019-09-12 17:40:20

标签: kubernetes kubernetes-helm kubectl

我只需要在生产集群上简单地重新创建某些发行版(例如10个)上的所有Pod。 是否有helm命令来循环发行版本名称,每个发行版下的Pod应该删除然后重新创建。有什么提示吗?

我熟悉

for nmspc in $namespace_list; do kubectl delete pods -n $nmspc; done

但是,我试图查看是否存在等效的helm命令来执行相同的操作,以便一旦在发行版中删除了pod,它们就会再次旋转。

for rlsz in $release_list; do helm delete pods -n $rlsz; done

这样的东西存在吗?

2 个答案:

答案 0 :(得分:1)

@Alex Pakka建议您使用helm upgrade --recreate-pods <release_name> path/to/chart正确的方法,但是是的,有时这取决于图表。

例如,我从nginx-ingress-1.15.0.tgz拿走了stable/nginx-ingress

helm fetch stable/nginx-ingress

并以标准方式安装

helm install --name nginx-ingress --namespace kube-system nginx-ingress-1.15.0.tgz

部署后,我可以使用以下命令成功重新创建Pod:

helm upgrade --recreate-pods nginx-ingress nginx-ingress-1.15.0.tgz --username "xxxxx" --password "xxxxx"

---
nginx-ingress-controller-cd996946d-95ndx                       1/1     Running   0          47s
nginx-ingress-default-backend-77c7c664bb-2nsdp                 1/1     Running   0          46s
---
nginx-ingress-controller-cd996946d-95ndx                       1/1     Terminating         0          93s
nginx-ingress-controller-cd996946d-dd6dc                       0/1     ContainerCreating   0          0s
nginx-ingress-default-backend-77c7c664bb-2nsdp                 1/1     Terminating         0          92s
nginx-ingress-default-backend-77c7c664bb-mnrvj                 0/1     ContainerCreating   0          0s
---
nginx-ingress-controller-cd996946d-dd6dc                       1/1     Running   0          21s
nginx-ingress-default-backend-77c7c664bb-mnrvj                 1/1     Running   0          21s

答案 1 :(得分:0)

您可以尝试

helm upgrade --recreate-pods <release_name> path/to/chart

如果您的图表按目录列表进行组织,并且目录名与发行版名称相对应(建议的方法),则可以使用

for d in */ ; do
    helm upgrade --recreate-pods "${d%?} "${d}"
done

其中${d%?}从目录名中删除斜杠。

请注意,根据定义,recreate-pods将导致停机。

如果您只是想重新启动Pod,并且它们都通过Helm部署,则只需完成

kubectl delete pods -n my-namespace --all

耕种机将重新创建它们,就像它们崩溃了一样。