码迷,mamicode.com
首页 > 其他好文 > 详细

k8s pod如何重启

时间:2021-05-24 07:38:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:删掉   code   root   scale   管道   管理   容器   container   running   

在使用 docker 的过程中,我们可以使用docker restart {container_id}来重启容器,但是在 kubernetes 中并没有重启命令(没有 kubectl restart {podname}),有时候我们的 Pod 出现 Bug意外终止,导致我们需要重启 Pod ,却没有一个很好的方式,特别是没有 yaml 文件的情况下,所以我总结了以下几种重启 Pod 的方式。

一、有yaml文件的重启方式

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

[root@k8s-master ~]# kubectl replace --force -f deployment-ngx.yaml 
deployment.apps "deployment-ngx" deleted
deployment.apps/deployment-ngx replaced
[root@k8s-master ~]# kubectl get pods -o wide
NAME                              READY   STATUS              RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
deployment-ngx-5f4d48bb95-7dhmf   0/1     Terminating         0          14m   <none>           k8s-node1   <none>           <none>
deployment-ngx-5f4d48bb95-k5k8l   0/1     Terminating         0          16m   <none>           k8s-node2   <none>           <none>
deployment-ngx-5f4d48bb95-nqbpf   0/1     Terminating         0          16m   10.244.169.136   k8s-node2   <none>           <none>
deployment-ngx-8ff559dc9-mtjlw    0/1     ContainerCreating   0          5s    <none>           k8s-node1   <none>           <none>
deployment-ngx-8ff559dc9-z64q5    0/1     ContainerCreating   0          5s    <none>           k8s-node2   <none>           <none>
ngx                               1/1     Running             0          21h   10.244.36.69     k8s-node1   <none>           <none>
test                              1/1     Running             0          22h   10.244.36.68     k8s-node1   <none>           <none>
test-nginx                        1/1     Running             0          21h   10.244.169.131   k8s-node2   <none>           <none>

  

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

使用scale命令

没有 yaml 文件,但是使用的是 Deployment 对象。可以使用以下方式重启

[root@k8s-master ~]# kubectl scale deployment deployment-ngx --replicas=0
deployment.apps/deployment-ngx scaled
[root@k8s-master ~]# kubectl get pods -o wide
NAME                             READY   STATUS        RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
deployment-ngx-8ff559dc9-mtjlw   0/1     Terminating   0          108s   <none>           k8s-node1   <none>           <none>
deployment-ngx-8ff559dc9-z64q5   0/1     Terminating   0          108s   <none>           k8s-node2   <none>           <none>
ngx                              1/1     Running       0          21h    10.244.36.69     k8s-node1   <none>           <none>
test                             1/1     Running       0          22h    10.244.36.68     k8s-node1   <none>           <none>
test-nginx                       1/1     Running       0          21h    10.244.169.131   k8s-node2   <none>           <none>

  

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

直接删除Pod进行重启

同样没有 yaml 文件,但是使用的是 Deployment 对象。查看deploy文件的重启策略,如果配置了重启策略。可以尝试删除重启:

技术图片

 

 使用命令

kubectl delete pod {podname} -n {namespace}

  

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

kubectl delete replicaset {rs_name} -n {namespace}

  

命令来删除 ReplicaSet

 

使用“-o yaml”参数导出Pod模板并重建Pod【推荐】

没有 yaml 文件,直接使用的 Pod 对象。

使用命令

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

  

 

在这种情况下,由于没有 yaml 文件,且启动的是 Pod 对象,那么是无法直接删除或者 scale 到 0 的,但可以通过上面这条命令重启。这条命令的意思是 get 当前运行的 pod 的 yaml声明,并管道重定向输出到 kubectl replace命令的标准输入,从而达到重启的目的。

原文:https://blog.csdn.net/weixin_44666068/article/details/102808609

 

k8s pod如何重启

标签:删掉   code   root   scale   管道   管理   容器   container   running   

原文地址:https://www.cnblogs.com/sucretan2010/p/14763851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!