MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

kubernetes中容器重启策略_kubernetes如何简化容器化部署

2025-02-20 15:47 huorong 精选文章 3 ℃ 0 评论

1、概述


在上一篇文章中,一旦容器探测出现了问题,kubernetes就会对容器所在的Pod进行重启,其实这是由pod的重启策略决定的,pod的重启策略有 3 种,分别如下:


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


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


2、容器重启策略实例


创建pod-restartpolicy.yaml:


apiVersion: v1
kind: Pod
metadata:
  name: pod-restartpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      httpGet:
        scheme: HTTP
        port: 80
        path: /hello   # 存活性探针检测此地址时由于/hello 不存在导致容器重启
  restartPolicy: Never # 设置重启策略为Never



实例操作效果


#创建pod
[root@k8s-master ~]# kubectl apply -f pod-restartpolicy.yaml
pod/pod-restartpolicy created
#获取pod
[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME                READY   STATUS              RESTARTS   AGE   IP       NODE        NOMINATED NODE   READINESS GATES
pod-restartpolicy   0/1     ContainerCreating   0          9s       k8s-node2              
[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME                READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pod-restartpolicy   1/1     Running   0          29s   172.17.169.143   k8s-node2              
#查看pod详情 可以看出倒数第二步访问http 404 最后 容器终止
[root@k8s-master ~]# kubectl describe pod pod-restartpolicy -n dev
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  45s               default-scheduler  Successfully assigned dev/pod-restartpolicy to k8s-node2
  Normal   Pulling    44s               kubelet            Pulling image "nginx"
  Normal   Pulled     29s               kubelet            Successfully pulled image "nginx" in 15.467788602s
  Normal   Created    29s               kubelet            Created container nginx
  Normal   Started    29s               kubelet            Started container nginx
  Warning  Unhealthy  5s (x3 over 25s)  kubelet            Liveness probe failed: HTTP probe failed with statuscode: 404
  Normal   Killing    5s                kubelet            Stopping container nginx
#等几秒钟再查看pod状态变为  Completed(已完成)
[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME                READY   STATUS      RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pod-restartpolicy   0/1     Completed   0          54s   172.17.169.143   k8s-node2              



至此我们就能看出容器重启策略的重要性。


3、总和


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


Pod 的重启策略与控制方式息息相关,当前可用于管理Pod 的控制器包括ReplicationController ,Job,DaemonSet,还可以通过kubelet 管理(静态Pod)。


每种控制器对Pod 的重启策略要求如下:
(1)RC和DaemonSet : 必须设置为Always,需要保证该容器持续运行。
(2)Job : OnFailure 或 Never,确保容器执行完成后不再重启。
(3)kubelet : 在Pod 失效时自动重启它,不论将RestartPolicy 设置为什么值,也不会对Pod进行健康检查。

?

Tags:重启容器

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言