如何重新启动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。

使用任何上述方法可在不影响最终用户的情况下快速安全地获取应用程序工作。