命令记不住

登陆

K8S 重启 pod 的方法

K8S命令:重启pod的方法

1.restart命令

大于1.15版本直接用

kubectl rollout restart deploy <name>

方式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

从结果中可以看出,此种方式实际上替换(replace)的过程是先进行删除然后再次创建的过程

方式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

方式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 ~]#
然后删除pod

[root@host131 ~]# kubectl delete pod test-pod
pod "test-pod" deleted
[root@host131 ~]# kubectl get pods
No resources found in default namespace.
然后重新创建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 ~]#

方式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

实际使用的时候可以看出,由于此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

方式5:直接删除Pod

前提:使用Deployment等方式的时候,相当于在pod之上又封了一层,所以此时直接删除pod,会有Deployment根据策略进行管控,一般直接删除即可,也可以调整replica来实现类似的效果。