• k8s 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 对象,从而达到重启的目的。如下:

    [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

  • 相关阅读:
    6 Django的视图层
    5 Django-2的路由层(URLconf)
    4 Django简介
    3 web框架
    2 http协议
    1 web应用
    15-jQuery补充
    14-jQuery的ajax
    13-轮播实现(各种)
    12-事件委托(事件代理)
  • 原文地址:https://www.cnblogs.com/sucretan2010/p/14763851.html
Copyright © 2020-2023  润新知