它是一种专用的容器,在应用容器启动之前运行,并包括一些应用镜像中不存在的实用工具和安装脚本。
Pod 能够具有多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的 Init 容器。
Init 容器与普通的容器非常像,除了如下两点:
如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy
值为 Never,它不会重新启动。
指定容器为 Init 容器,需要在 PodSpec 中添加 initContainers
字段,以 v1.Container 类型对象的 JSON 数组的形式,还有 app 的 containers
数组。 Init 容器的状态在 status.initContainerStatuses
字段中以容器状态数组的格式返回(类似 status.containerStatuses
字段)。
Init 容器支持应用容器的全部字段和特性,包括资源限制、数据卷和安全设置。 然而,Init 容器对资源请求和限制的处理稍有不同,在下面 资源 处有说明。 而且 Init 容器不支持 Readiness Probe,因为它们必须在 Pod 就绪之前运行完成。
如果为一个 Pod 指定了多个 Init 容器,那些容器会按顺序一次运行一个。 每个 Init 容器必须运行成功,下一个才能够运行。 当所有的 Init 容器运行完成时,Kubernetes 初始化 Pod 并像平常一样运行应用容器。
因为 Init 容器具有与应用容器分离的单独镜像,它们的启动相关代码具有如下优势:
FROM
另一个镜像,只需要在安装过程中使用类似 sed
、 awk
、 python
或 dig
这样的工具。