标签:删掉 code root scale 管道 管理 容器 container running
在使用 docker 的过程中,我们可以使用docker restart {container_id}来重启容器,但是在 kubernetes 中并没有重启命令(没有 kubectl restart {podname}),有时候我们的 Pod 出现 Bug意外终止,导致我们需要重启 Pod ,却没有一个很好的方式,特别是没有 yaml 文件的情况下,所以我总结了以下几种重启 Pod 的方式。
在有 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 文件,但是使用的是 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 也就重启了。
同样没有 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
没有 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
标签:删掉 code root scale 管道 管理 容器 container running
原文地址:https://www.cnblogs.com/sucretan2010/p/14763851.html