ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

K8s-Pod的生命周期

2022-07-21 18:01:43  阅读:133  来源: 互联网

标签:容器 生命周期 启动 重启 探针 Init Pod K8s


Pod的生命周期


示意图:

  • pod里的探针:检测服务的可用性

    • 是否就绪
    • 是否工作正常
  • 分类

    • 就绪探针:判断服务是否可以提供访问
    • 存活探针:检测是否可以继续工作
  • 检测方法

    • TCP socket响应
    • HTTP >=200 && <400 #正常值
    • EXEC 0 #运行脚本的返回值为0正常
  • pod生命周期详细说明

  • 注:

    • 可以将启动后看成启动前
    • pause一启动就休眠,所以适合初始化网络栈和挂载网络卷,不易出问题
    • initC-1 > initC-2 > initC-3 线性启动
    • mainC-1,mainC-2.....并行启动
  • init容器

​ 引入:Pod 能够具有多个容器,应用运行在容器里面,但是它也可 能有一个或多个先于应用容器启动的 Init 容器

​ init容器与普通的容器非常像,除了以下两点:

​ init容器总是运行到成功完成为止,

​ 每个init容器都必须在下一个init容器启动之前完成

  • 注:

    • 不能将应用程序放到initc中去运行
    • 如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod, 直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动
  • kubernetes重启策略

    • Always: 当容器失效时,由Kubelet 自动重启该容器。
    • OnFailure:当容器终止运行且退出码不为0时,由Kubelet 自动 重启该容器, 即正常退出时不重启,异常退出重 启。
    • Nerver:从不重启容器。

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

  • 每种控制器对Pod的重启策略要求如下:

    • RC和DaemonSet:必须设置为Always,需要保证该容器持续运 行。
    • Job和CronJob:OnFailure或Never,确保容器执行完成后不再 重启。
    • kubelet:在Pod失效时自动重启它,不论将RestartPolicy设置为 什么值,也不会对Pod进行健康检查。
  • init容器的作用:因为init容器具有与应用程序容器分离的单独镜像,所以它们的启动 相关代码具有如下优点

    • 它们可以包含并运行实用工具,但是出于安全考虑,是不建议在 应用程序容器镜像中包含这些实用工具的
    • 应用程序镜像可以分离出创建和部署的角色,而没有必要联合他 们构建一个单独的镜像
    • Init 容器使用 Linux Namespace,所以相对应用程序容器来说具 有不同的文件系统视图。因此,它们能够具有访问 Secret 的权限, 而应用程序容器则不能
    • 它们必须在应用程序容器启动之前运行完成,而应用程序容器是 并行运行的,所以 Init 容器能够提供了一种简单的阻塞或延迟应用 容器的启动的方法,直到满足了一组先决条件
  • initC特殊说明

    • 在 Pod 启动过程中,Init 容器会按顺序在网络和数据卷初始化之 后启动。每个容器必须在下一个容器启动之前成功退出
    • 如果由于运行时或失败退出,将导致容器启动失败,它会根据 Pod 的 restartPolicy 指定的策略进行重试。然而,如果 Pod 的 restartPolicy 设置为 Always,Init 容器失败时会使用 RestartPolicy 策略
    • 所有的 Init 容器没有成功之前,Pod 将不会变成 Ready 状态。 Init 容器的端口将不会在 Service 中进行聚集。 正在初始化中的 Pod 处于 Pending 状态,但应该会将 Initializing 状态设置为 true
    • 对 Init 容器 spec 的修改被限制在容器 image 字段,修改其他字 段都不会生效。更改 Init 容器的 image 字段,等价于重启该 Pod
    • 注意: Init 容器具有应用容器的所有字段。除了 readinessProbe,因为 Init 容器无法定义不同于完成(completion)的就绪(readiness) 之外的其他状态
    • 在 Pod 中的每个 app 和 Init 容器的名称必须唯一;与任何其它 容器共享同一个名称,会在验证时抛出错误
  • 容器探针:探针是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler。有三种类型的处理程序:

    • ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功

    • HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊 断被认为是成功的

    • TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检 查。如果端口打开,则诊断被认为是成功的。

      每次探测都将获得以下三种结果之一:

      • 成功:容器通过了诊断
      • 失败:容器未通过诊断
      • 未知:诊断失败,因此不会采取任何行动
  • 探针类型

    • livenessProbe(存活探测):指示容器是否正在运行。如果存活探测 失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影 响。如果容器不提供存活探针,则默认状态为 Success
    • readinessProbe(就绪探测):指示容器是否准备好服务请求。如果 就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点 中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success
  • 钩子--启动退出动作

    Pod hook(钩子)是由 Kubernetes 管理的 kubelet 发起的,在 容器中的进程启动前或者容器中的进程终止之前运行,这是包含在 容器的生命周期之中。可以同时为 Pod 中的所有容器都配置hook

  • Hook的类型

    • exec:执行一段命令
    • HTTP:发送HTTP请求

标签:容器,生命周期,启动,重启,探针,Init,Pod,K8s
来源: https://www.cnblogs.com/xycloud/p/16502890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有