1. 使用 kubectl delete pod 命令直接删除Pod,Kubernetes会自动重启:
kubectl delete pod <pod-name> --namespace=<namespace>
这是最简单直接的方式,适用于单个Pod。
方法一:kubectl delete pod
kubectl delete pod my-pod -n default
删除后,Deployment会自动创建新的Pod替换它,实现重启效果。
方法二:kubectl rollout restart
kubectl rollout restart deployment/my-deployment -n default
这是推荐的现代方式,直接重启Deployment管理的Pod,支持DaemonSet、StatefulSet等。
方法三:kubectl scale
kubectl scale deployment/my-deployment --replicas=0 -n default
kubectl scale deployment/my-deployment --replicas=3 -n default
先缩容到0再扩容,实现所有Pod重启。
方法四:kubectl patch
kubectl patch deployment my-deployment -p '{"spec":{"template":{"metadata":{"annotations":{"date":"`date +'%s'`"}}}}}'
通过修改注解触发滚动更新,重启Pod。
方法五:kubectl set image
kubectl set image deployment/my-deployment app=v1 -n default
修改镜像版本,即使相同也会触发重启,常用于无变更重启。
方法六:kubectl apply -k
使用kustomize:kubectl apply -k ./overlays/restart
通过kustomization.yaml中的image或annotations变更实现重启。
额外方法:针对StatefulSet
kubectl rollout restart statefulset/my-statefulset -n default
StatefulSet也支持rollout restart。
Q: 重启Pod会丢失数据吗?
A: 无状态Pod不会,但有状态应用需确保数据持久化到PV。
Q: rollout restart需要多久?
A: 取决于Pod的ready状态,通常几秒到几分钟,支持--timeout参数。
Q: 如何重启所有命名空间的Pod?
A: 使用kubectl get pods --all-namespaces -o name | xargs kubectl delete,不推荐生产环境。
Q: 怎么查看重启进度?
A: kubectl rollout status deployment/my-deployment -n default。