k8s家族Pod辅助小能手Init容器认知答疑?

k8s集群Init 容器是一种非凡容器,职责是在Pod的生命周期中作为利用容器的前置启动容器

在很多利用场景中,在 Pod 内的利用容器正式启动之前之前须要进行预热操作,为正式启动利用容器铺垫先决条件,如预加载一些根本配置、资源限度配额、还能够包含一些利用镜像中不存在的实用工具和装置脚本

囧么肥事-胡言乱语

Init容器有什么非凡吗?与一般容器有何不同?

k8s集群Init 容器是一种非凡容器,职责是在Pod的生命周期中作为利用容器的前置启动容器

在很多利用场景中,在 Pod 内的利用容器正式启动之前之前须要进行预热操作,为正式启动利用容器铺垫先决条件,如预加载一些根本配置、资源限度配额、还能够包含一些利用镜像中不存在的实用工具和装置脚本。例如

  • 1、基于环境变量或配置模板生成配置文件
  • 2、期待其余关联组件加载实现(如MySQL数据库服务,Nginx服务等)
  • 3、下载相干依赖包,对系统预配置等
  • 4、从近程数据库获取本地利用所需配置,或将本人数据库注册到某个地方数据库等

Init 容器与一般的容器十分像,Init 容器反对利用容器的全副字段和个性,包含资源限度、数据卷和平安设置。

然而也有本人独特的”性情“。

第一点Init容器必须保障胜利启动后才会启动下个容器

如果 Pod 的 Init 容器失败,kubelet 会一直地重启该 Init 容器直到该容器胜利为止,而后才会思考去启动其余容器。对本人的要求比拟严格,只许成功,不许失败!

第二点 Kubernetes 其实禁止Init容器应用 readinessProbe

因为 Init 容器不能定义不同于实现态(Completion)的就绪态(Readiness)

第二点Init 容器对资源申请和限度的解决稍有不同

在给定的 Init 容器执行程序下,资源应用实用于如下规定:

  • 所有 Init 容器上定义的任何特定资源的 limitrequest 的最大值,作为 Pod 无效初始 request/limit。 如果任何资源没有指定资源限度,这被视为最高限度。
  • Pod 对资源的无效 limit/request,取决于两种判断规范中的较大者

    • 所有利用容器对某个资源的 limit/request 之和
    • 对某个资源的无效初始 limit/request
  • 基于无效 limit/request 实现调度,这意味着 Init 容器可能为初始化过程预留资源, 这些资源在 Pod 生命周期过程中并没有被应用。
  • Pod 的 无效 QoS ,与 Init 容器和利用容器的一样。

配额和限度实用于无效 Pod 的申请和限度值。 Pod 级别的 cgroups 是基于无效 Pod 的申请和限度值,和调度器雷同。

同时 Init 容器不反对 lifecyclelivenessProbereadinessProbestartupProbe, 因为它们必须在 Pod 就绪之前运行实现。

如果为一个 Pod 指定了多个 Init 容器,这些容器会按程序一一运行。 每个 Init 容器必须运行胜利,下一个才可能运行。当所有的 Init 容器运行实现时, Kubernetes 才会为 Pod 初始化利用容器并像平时一样运行。

它的启动有什么不同,如果多个Init容器启动呢?失败呢?

在 Pod 启动过程中,每个 Init 容器会在网络和数据卷初始化之后按程序启动。 kubelet 运行根据 Init 容器在 Pod 规约中的呈现程序顺次运行之。

如果 Pod 的 Init 容器失败,kubelet 会一直地重启该 Init 容器直到该容器胜利为止。 然而,如果 Pod 对应的 restartPolicy 值为 "Never",并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

如果为一个 Pod 指定了多个 Init 容器,这些容器会按程序一一运行。 每个 Init 容器必须运行胜利,下一个才可能运行。当所有的 Init 容器运行实现时, Kubernetes 才会为 Pod 初始化利用容器并像平时一样运行。

应用 Init 容器有什么劣势?

因为 Init 容器具备与利用容器拆散的独自镜像,其启动相干代码具备如下劣势:

  • Init 容器能够蕴含一些装置过程中利用容器中不存在的实用工具或个性化代码

    例如,没有必要仅为了在装置过程中应用相似 sed、awk、pythondig 这样的工具而去 FROM 一个镜像来生成一个新的镜像。

  • Init 容器能够平安地运行这些工具,防止这些工具导致利用镜像的安全性升高。
  • 利用镜像的创建者和部署者能够各自独立工作,而没有必要联结构建一个独自的利用镜像。
  • Init 容器能以不同于 Pod 内利用容器的文件系统视图运行。因而,Init 容器能够拜访 利用容器不能拜访的Secret 的权限。
  • 因为 Init 容器必须在利用容器启动之前运行实现,因而 Init 容器 提供了一种机制来阻塞或提早利用容器的启动,直到满足了一组先决条件。 一旦前置条件满足,Pod 内的所有的利用容器会并行启动。


Kubernetes 举荐学习书

Kubernetes权威指南PDF
链接:https://pan.baidu.com/s/11huL... 提取码:sa88

k8s系列所有问题更新记录:GitHub Gitee