如何重新启动Kubernetes
时间:2020-03-05 15:31:11 来源:igfitidea点击:
有时我们可能会在我们需要重新启动Pod的情况下。
例如,如果POD处于错误状态。
根据重启策略,Kubernetes本身试图重新启动并修复它。
但如果这不起作用,如果我们找不到错误的来源,手动重新启动Kubernetes Pod是让应用程序再次工作的最快方法。
如何重新启动Kubernetes的Pods
不幸的是,为此目的没有Kubectl Restart Pod命令。
以下是我们可以重新启动POD的几种方式:
- Rollout Pod重新启动
- 缩放副本的数量
让我详细展示两种方法。
方法1:卷展列套装重新启动
从Kubernetes版本1.15开始,我们可以执行部署的滚动重启。
控制器一次杀死一个POD,并依赖于复制品以缩放新的POD,直到所有POD都比重新启动的时间更新。
在我看来,这是重新启动POD的最佳方式,因为申请不会下降。
注意:将更改单个POD IP。
让我们举个例子。
我们有一个名为my-dep的部署,由两个pod组成(因为副本设置为两个)。
Hyman@theitroad:~# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 13s
让我们获得POD详细信息:
Hyman@theitroad:~# 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>
现在让我们用这样的命令推出Realout for My-Dep部署:
kubectl rollout restart deployment name_of_deployment
我们还记得从上一个命令部署的名称吗?
在这里使用它:
Hyman@theitroad:~# kubectl rollout restart deployment my-dep deployment.apps/my-dep restarted
我们可以观看旧POD的过程终止和使用kubectl get pod -w
命令创建的新Pods:
Hyman@theitroad:~# 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,我们可以看到详细信息已更改此处:
Hyman@theitroad:~# 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:
Hyman@theitroad:~# 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
获取部署信息:
Hyman@theitroad:~# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 12m
现在,将副本号设置为零:
Hyman@theitroad:~# kubectl scale deployment --replicas=0 my-dep deployment.apps/my-dep scaled
然后将其恢复到两个:
Hyman@theitroad:~# kubectscale deployment --replicas=2 my-dep deployment.apps/my-dep scaled
立即检查POD:
Hyman@theitroad:~# 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 Pods。
使用任何上述方法可在不影响最终用户的情况下快速安全地获取应用程序工作。