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 容器上定义的任何特定资源的
limit
或request
的最大值,作为 Pod 无效初始request/limit
。如果任何资源没有指定资源限度,这被视为最高限度。 -
Pod 对资源的无效
limit/request
,取决于两种判断规范中的较大者- 所有利用容器对某个资源的
limit/request
之和 - 对某个资源的无效初始
limit/request
- 所有利用容器对某个资源的
- 基于无效 limit/request 实现调度,这意味着 Init 容器可能为 初始化过程预留资源,这些资源在 Pod 生命周期过程中并没有被应用。
- Pod 的 无效
QoS
层,与 Init 容器和利用容器的一样。
配额和限度实用于无效 Pod 的申请和限度值。Pod 级别的 cgroups 是基于无效 Pod 的申请和限度值,和调度器雷同。
同时 Init 容器不反对 lifecycle
、livenessProbe
、readinessProbe
和 startupProbe
,因为它们必须在 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、python
或dig
这样的工具而去FROM
一个镜像来生成一个新的镜像。 - Init 容器能够平安地运行这些工具,防止这些工具导致利用镜像的安全性升高。
- 利用镜像的创建者和部署者能够各自 独立工作,而没有必要联结构建一个独自的利用镜像。
- Init 容器能以 不同于 Pod 内利用容器的文件系统视图运行。因而,
Init
容器能够拜访 利用容器不能拜访的Secret
的权限。 - 因为 Init 容器必须在利用容器启动之前运行实现,因而 Init 容器 提供了一种机制来阻塞或提早利用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod 内的所有的利用容器会并行启动。
Kubernetes 举荐学习书
Kubernetes 权威指南 PDF
链接:https://pan.baidu.com/s/11huL… 提取码:sa88
k8s 系列所有问题更新记录:GitHub Gitee