7.2. 在部署 pod 前使用初始容器来执行任务
您可以使用 init 容器,它们是在应用程序容器之前运行的专用容器,可以包含不出现在应用程序镜像中的实用程序或设置脚本。
7.2.1. 了解 init 容器 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在部署 pod 的其余部分之前,您可以使用 init 容器执行任务。您可以使用 init 容器执行在主应用程序逻辑开始前应完成的设置任务,如环境准备、依赖项检查或配置生成。
pod 可以同时具有 init 容器,以及应用程序容器。借助初始容器,您可以重新整理设置脚本和绑定代码。
init 容器可以:
- 包含并运行不需要包含在应用程序容器镜像中的实用程序,以安全考虑。
- 包含不出现在应用程序镜像中的设置的实用程序或自定义代码。例如,不需要仅仅为了在设置过程中使用 sed、awk、python 或 dig 等工具而使用 FROM 从其他镜像生成一个镜像。
- 使用 Linux 命名空间,以便使用与应用程序容器不同的文件系统,如访问应用程序容器无法访问的 Secret。
因为每个 init 容器必须在下一个初始容器启动前成功完成,所以它们提供了一种简单的方法来阻止或延迟应用程序容器的启动,直到满足一组条件为止。
例如,您可以使用 init 容器的一些方法:
使用类似如下的 shell 命令等待创建服务:
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1使用类似以下示例的命令,从 Downward API 将此 pod 注册到远程服务器:
$ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’-
使用
sleep 60等命令延迟启动应用容器。 - 将一个 git 存储库克隆到卷中。
-
将值放入配置文件中,再运行模板工具为主应用容器动态生成配置文件。例如,将
POD_IP值放在配置中,并使用 Jinja 生成主应用程序配置文件。