k8s 中重启Pod的几种方法

一、 有 yaml 文件的重启方式

使用 kubectl replace --force 命令

1
# kubectl replace --force -f xxx.yaml

在有 yaml 文件的情况下可以直接使用 kubectl replace --force -f xxx.yaml 来强制替换Pod 的 API 对象,从而达到重启的目的

二、没有 yaml 文件的重启方式

2.1 使用 scale 命令

由于 Deployment 对象并不是直接操控的 Pod 对象,而是操控的 ReplicaSet 对象,而 ReplicaSet 对象就是由副本的数目的定义和Pod 模板组成的。所以这条命令分别是将ReplicaSet 的数量 scale 到 0,然后又 scale 到 1,那么 Pod 也就重启了。

1
2
# kubectl scale deployment {pod} --replicas=0 -n {namespace}
# kubectl scale deployment {pod} --replicas=1 -n {namespace}

2.2 直接 delete 重启

此方式只针对使用的deployment对象,并且重启策略为可以重启,则可以尝试删除重启

1
2
3
4
spec:
replicas: 1
strategy: #重启策略
type: Recreate
1
# kubectl delete po {poname} -n {namespace}

这个方法就很简单粗暴了,直接把 Pod 删除,因为 Kubernetes 是声明式 API,所以删掉了之后,Pod API 对象就与预期的不一致了,所以会自动重新创建 Pod 保持与预期一致,但是如果ReplicaSet 管理的 Pod 对象很多的话,那么要一个个手动删除,会很麻烦,所以可以删除 ReplicaSet

1
2

# kubectl delete replicaset {rs_name} -n {namespace}

2.3 使用 -o yaml

使用 -o yaml参数导出Pod模板并重建模板(推荐)

1
# kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -

2.4 使用 rollout restart

Kubernetes 1.15开始才有

1
# kubectl rollout restart deployment {pod} -n {namespace}
-------------本文结束感谢您的阅读-------------