有时您可能会遇到需要重新启动 Pod 的情况。 为了 example,如果您的 Pod 处于错误状态。
根据重启策略,Kubernetes 本身会尝试重启并修复它。
但是,如果这不起作用并且您找不到错误的根源,那么手动重新启动 Kubernetes Pod 是让您的应用程序再次运行的最快方法。
如何在 Kubernetes 中重启 Pod
不幸的是,有 没有 kubectl restart pod 命令 以此目的。 您可以通过以下几种方式重新启动 Pod:
- Rollout Pod 重新启动
- 缩放副本数量
让我详细向您展示这两种方法。
方法一:Rollout Pod 重启
从 Kubernetes 版本 1.15 开始,您可以滚动重启部署。
控制器一次杀死一个 pod 并依赖 副本集 扩展新的 Pod,直到所有的 Pod 都比重新启动的时间新。 在我看来, 这是重新启动 pod 的最佳方式,因为您的应用程序不会关闭。
笔记: 单个 pod IP 将被更改。
让我们来一个 example. 您有一个名为 my-dep 的部署,其中包含两个 pod(因为副本设置为两个)。
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
让我们获取 pod 详细信息:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 47s 172.16.213.255 kworker-rj2 <none> <none>
my-dep-6d9f78d6c4-rkhrz 1/1 Running 0 47s 172.16.213.35 kworker-rj1 <none> <none>
现在让我们使用如下命令重启 my-dep 部署:
kubectl rollout restart deployment name_of_deployment
你还记得前面命令中的部署名称吗? 在这里使用它:
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
您可以使用以下方法查看旧 pod 被终止和新 pod 被创建的过程 kubectl get pod -w
命令:
[email protected]:~# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 5s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 69s
my-dep-6d9f78d6c4-rkhrz 1/1 Terminating 0 69s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 69s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-557548758d-svg7w 1/1 Running 0 3s
my-dep-6d9f78d6c4-8j5fq 1/1 Terminating 0 71s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 72s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
如果您现在检查 Pod,您可以在此处看到详细信息已更改:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-557548758d-kz6r7 1/1 Running 0 42s 172.16.213.43 kworker-rj1 <none> <none>
my-dep-557548758d-svg7w 1/1 Running 0 38s 172.16.213.251 kworker-rj2 <none> <none>
方法 2. 缩放副本数量
在 CI/CD 环境中,出现错误时重新启动 pod 的过程可能需要很长时间,因为它必须再次经历整个构建过程。
实现此目的的更快方法是使用 kubectl scale
命令将副本编号更改为零,一旦您设置一个大于零的数字,Kubernetes 就会创建新的副本。
让我们试试看。 首先检查您的 Pod:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 11m
my-dep-557548758d-svg7w 1/1 Running 0 11m
获取部署信息:
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
现在,将副本号设置为零:
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
然后将其设置回两个:
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
现在检查 pod:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-d2pmd 1/1 Running 0 10s
my-dep-557548758d-gprnr 1/1 Running 0 10s
您已成功重启 Kubernetes Pod。
使用上述任何一种方法,在不影响最终用户的情况下,快速安全地让您的应用运行。
完成此练习后,请确保找到核心问题并修复它,因为重新启动您的 pod 不会解决根本问题。
希望你喜欢这个 Kubernetes 技巧。 不要忘记订阅更多。
拉克什耆那教
DevOps 专业 | RHCA | 詹金斯 | 吉特 | 码头工人 | Kubernetes | 稳定 | 普罗米修斯 | 格拉法纳 | AWS Cloud