Kubernetes之Pod组件重启策略

Posted 爱上口袋的天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes之Pod组件重启策略相关的知识,希望对你有一定的参考价值。

一、重启策略

pod的重启策略有3种,如下:

  • Always:容器失效时,自动重启该容器,这是默认值
  • OnFailure:容器停止运行且退出码不为0时重启
  • Never:不论状态为何,都不重启该容器

重启策略适用于pod对象中的所有容器,首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作的延迟时长为10s,20s,40s,80s,160s,300s,300s是最大延迟时长

如下,修改pod_restartPolicy.yaml文件,其中restartPolicy字段即设置重启策略,这里需要注意的是,restartPolicy字段跟containers字段是平行的,是对所有容器生效的

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: pod-nginx
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      httpGet:
        scheme: HTTP
        port: 80
        path: /hello
  restartPolicy: Never

使用如下命令创建pod

[root@master resource_manage]# kubectl apply -f pod_restartPolicy.yaml
namespace/dev created
pod/pod-nginx created
[root@master resource_manage]#

通过如下命令查询,可以发现这里因为设置Never重启策略,所以这里没有重启痕迹

[root@master resource_manage]# kubectl get pod -n dev
NAME        READY   STATUS      RESTARTS   AGE
pod-nginx   0/1     Completed   0          25m
[root@master resource_manage]# kubectl describe pod pod-nginx -n dev
Name:         pod-nginx
Namespace:    dev
Priority:     0
Node:         node2/192.168.16.42
Start Time:   Thu, 24 Mar 2022 15:35:21 +0800
Labels:       user=redrose2100
Annotations:  <none>
Status:       Succeeded
IP:           10.244.2.42
IPs:
  IP:  10.244.2.42
Containers:
  nginx:
    Container ID:   docker://4203b0f3ccd87a1df0012c08ada6fb6d1cbac583da1b63dffc5d2ceb194c0255
    Image:          nginx:1.17.1
    Image ID:       docker-pullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a967c03dbb
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 24 Mar 2022 15:35:21 +0800
      Finished:     Thu, 24 Mar 2022 15:35:51 +0800
    Ready:          False
    Restart Count:  0
    Liveness:       http-get http://:80/hello delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7sn8d (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  kube-api-access-7sn8d:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  25m                default-scheduler  Successfully assigned dev/pod-nginx to node2
  Normal   Pulled     25m                kubelet            Container image "nginx:1.17.1" already present on machine
  Normal   Created    25m                kubelet            Created container nginx
  Normal   Started    25m                kubelet            Started container nginx
  Warning  Unhealthy  24m (x3 over 25m)  kubelet            Liveness probe failed: HTTP probe failed with statuscode: 404
  Normal   Killing    24m                kubelet            Stopping container nginx
[root@master resource_manage]#

使用如下命令可以删除资源

[root@master resource_manage]# kubectl delete -f pod_restartPolicy.yaml
namespace "dev" deleted
pod "pod-nginx" deleted
[root@master resource_manage]#

二、重启策略设置建议

因为重启策略默认的就是Always,这也是合理的,因此在一般情况下,重启策略不需要设置,这里仅仅是作为知识点拿出来展示一下,在实际使用中,在大多数情况下都不需要进行重启策略配置

以上是关于Kubernetes之Pod组件重启策略的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes之Pod镜像拉取策略配置

Kubernetes组件_APIServer_静态Pod网关apiserver的audit审计日志

k8s之Pod健康检测

kubernetes 组件之 kubelet

Kubernetes之Pod组件简介启动命令

K8S/Kubernetes组件介绍