k8s中Pod重启方法

文章目录
一、有yaml文件的重启方式
二、没有yaml文件的重启方式
使用scale命令
直接删除Pod进行重启
使用“-o yaml”参数导出Pod模板并重建Pod【推荐】
总结
在使用 docker 的过程中,我们可以使用docker restart {container_id}来重启容器,但是在 kubernetes 中并没有重启命令(没有 kubectl restart {podname}),有时候我们的 Pod 出现 Bug意外终止,导致我们需要重启 Pod ,却没有一个很好的方式,特别是没有 yaml 文件的情况下,所以我总结了以下几种重启 Pod 的方式。

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

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

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

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

使用命令

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

kubectl delete replicaset {rs_name} -n {namespace}
1
命令来删除 ReplicaSet

使用“-o yaml”参数导出Pod模板并重建Pod【推荐】
没有 yaml 文件,直接使用的 Pod 对象。

使用命令

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

总结
我们可以通过多种方式来重启对象,总的来说,最推荐的方式是使用

kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
1
这种方式,因为适用于多种对象。此外,重启 Pod 并不会修复运行程序的 bug,想要解决程序的意外终止,最终还是得要修复 bug。
————————————————
版权声明:本文为CSDN博主「Shawn-Li」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44666068/article/details/102808609

Kubernetes没有提供诸如docker restart类似的命令用于重启容器那样重启pod的命令,一般会结合restartPolicy进行自动重启,这篇文章整理一下偶尔需要手动进行重启的时候所需要使用的方法。

事前准备
环境准备
本文使用Kubernetes 1.17,可参看下文进行快速环境搭建:

单机版本或者集群版本环境搭建
pod准备
使用如下pod的yaml文件

[root@host131 config]# cat busybox-pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox-container
image: busybox:latest
command: [“sleep”, “15”]
restartPolicy: Never
[root@host131 config]#
1
2
3
4
5
6
7
8
9
10
11
12
执行命令:kubectl create -f busybox-pod-volume.yaml

执行日志示例如下所示

[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]# kubectl create -f busybox-pod-test.yaml
pod/test-pod created
[root@host131 ~]#
1
2
3
4
5
上述pod在15秒之后即会退出,而根据pod的生命周期的状态说明,会显示为completed的状态,状态示例如下所示:

[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 57s
[root@host131 ~]#
1
2
3
4
pod重启:方式1:使用replace命令替换
可以使用replace结合force选项进行重启,前提是有之前启动时所使用的yaml文件

[root@host131 ~]# kubectl replace --force -f busybox-pod-test.yaml
pod “test-pod” deleted
pod/test-pod replaced
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 ContainerCreating 0 3s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 4s
[root@host131 ~]#
1
2
3
4
5
6
7
8
9
10
从结果中可以看出,此种方式实际上替换(replace)的过程是先进行删除然后再次创建的过程

pod重启:方式2:无yaml文件的replace方法
执行命令:kubectl get pod pod名称 -n 命名空间名称 -o yaml | kubectl replace --force -f -

没有yaml文件时可以使用-o yaml生成,然后再进行replace,执行示例日志如下所示:

[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 5m15s
[root@host131 ~]# kubectl get pod test-pod -n default -o yaml | kubectl replace --force -f -
pod “test-pod” deleted
pod/test-pod replaced
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 13s
[root@host131 ~]#
1
2
3
4
5
6
7
8
9
10
pod重启:方式3:重新创建
相当于上述replace命令的手工执行,可以根据pod生成yaml文件进行创建,先生成创建的yaml文件

[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 3m13s
[root@host131 ~]# kubectl get pod test-pod -n default -o yaml >ttt.yml
[root@host131 ~]#
1
2
3
4
5
然后删除pod

[root@host131 ~]# kubectl delete pod test-pod
pod “test-pod” deleted
[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]#
1
2
3
4
5
然后重新创建pod

[root@host131 ~]# kubectl create -f ttt.yml
pod/test-pod created
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 6s
[root@host131 ~]#
1
2
3
4
5
6
pod重启:方式4:设定restartPolicy
前提是使用了Deployment或者直接是restartPolicy的设定不是Never,比如是Always,示例如下所示:

[root@host131 ~]# cat busybox-pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox-container
image: busybox:latest
command: [“sleep”, “15”]
restartPolicy: Always
[root@host131 ~]#
1
2
3
4
5
6
7
8
9
10
11
12
实际使用的时候可以看出,由于此restartPolicy的作用,pod变为completed的时候会立即被重启

[root@host131 ~]# kubectl get pods
No resources found in default namespace.
[root@host131 ~]# kubectl create -f busybox-pod-test.yaml
pod/test-pod created
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 7s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 25s
[root@host131 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 1 28s
[root@host131 ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
pod重启:方式5:直接删除Pod
前提:使用Deployment等方式的时候,相当于在pod之上又封了一层,所以此时直接删除pod,会有Deployment根据策略进行管控,一般直接删除即可,也可以调整replica来实现类似的效果。
————————————————
版权声明:本文为CSDN博主「淼叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liumiaocn/article/details/103825232
https://blog.csdn.net/liumiaocn/article/details/103825232

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值