📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架 系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!
容器组_初始化容器
初始化容器介绍
Pod 可以包含多个工作容器,也可以包含一个或多个初始化容器,初始化容器在工作容器启动之前执行。
初始化容器与工作容器完全相同,除了如下几点:
- 初始化容器总是运行并自动结束
- kubelet 按顺序执行 Pod 中的初始化容器,前一个初始化容器成功结束后,下一个初始化容器才开始运行。所有的初始化容器成功执行后,才开始启动工作容器
- 如果 Pod 的任意一个初始化容器执行失败,kubernetes 将反复重启该 Pod,直到初始化容器全部成功(除非 Pod 的 restartPolicy 被设定为 Never)
- 初始化容器的 Resource request / limits 处理不同,
- 初始化容器不支持 就绪检查 readiness probe,因为初始化容器必须在 Pod ready 之前运行并结束
使用初始化容器
初始化容器可以指定不同于工作容器的镜像,这使得初始化容器相较于直接在工作容器中编写启动相关的代码更有优势:
- 初始化容器可以包含工作容器中没有的工具代码或者自定义代码。例如:您无需仅仅为了少量的 setup 工作(使用 sed, awk, python 或 dig 进行环境设定)而重新从一个基础镜像制作另外一个镜像
- 初始化容器可以更安全地执行某些使工作容器变得不安全的代码
- 应用程序的镜像构建者和部署者可以各自独立地工作,而无需一起构建一个镜像
- 初始化容器相较于工作容器,可以以另外一个视角处理文件系统。例如,他们可以拥有访问 Secrets 的权限,而工作容器却不一定被授予该权限
- 初始化容器在任何工作容器启动之前结束运行,这个特性使得我们可以阻止或者延迟工作容器的启动,直到某些前提条件得到满足。一旦前提条件满足,所有的工作容器将同时并行启动
Examples
下面是一些使用初始化容器的例子:
- 使用一行 shell 命令,等待某一个 Service 启动后再启动工作容器
for i in {1…100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
- 使用 Pod 的信息将其注册到某一个远程服务:
curl -X POST http://

最低0.47元/天 解锁文章
319

被折叠的 条评论
为什么被折叠?



