乐趣区

关于云原生:k8s家族Pod辅助小能手Init容器认知答疑

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

退出移动版