InitContainer

初始化容器

在Pod中,容器是共享存储资源和网络资源的,所以Init Container容器产生的数据是可以被其他容器作用到的。初始化容器有点类似于postStart 钩子的作用,在Pod没有启动之前,为应用容器做一些准备工作,但是跟钩子的启动处于不同的阶段,在Pod生命周期图中可以明显看出。Pod中可以启动一个或多个容器,也可以有一个或多个initContainer 容器。

initContainer 容器和普通容器几乎一样,除了一下两点:

  • 总是运行到完成
  • 必须在Pod启动下一个容器之前运行完成

如果init容器启动失败,容器根据restartPolicy策略重启,如果有多个,它们会按顺序,一次执行一个,每个init容器都必须运行成功了才会运行下一个。init容器不支持readnessProbe,因为它们必须在Pod就绪前运行完成。

initContainer能做什么?

  • 等他其他容器Ready: 比如web服务器需要等待mysql数据库服务器启动完成,可以启动一个initContainer 容器检测mysql服务启动,成功后退出,运行主容器
  • 环境构建:为主容器运行提供配置和初始化等操作。
  • 可以包含运行使用工具:处于安全考虑,在镜像中是不建议包含这些工具的。
  • 构建工具和代码:在镜像中没有,而服务需要用到的工具可以用init Container构建
  • 构建和部署分离: 不需要重新将两步打包成一个镜像
  • 提供一种阻塞容器启动的方式:必须在initContainer容器启动成功后,才会运行下一个容器,保证了一组条件运行成功的方式

示例

apiVersino: v1
kind: Pod
metadata:
name: myapp
spec:
initContainers:
- name: init-server
image: busybox
command: ["/bin/bash","-c","chown -R apache:apache /var/www"]
volumeMount:
- name: wwwroot
mountPath: /var/www
containers:
- name: my-service
image: httpd
containerPort:
- name: http
port: 80
protocol: TCP
volumeMount:
- name: wwwroot
mountPath: /var/www
volumes:
- name: wwwroot
hostPath:
path: /home/wwwroot

可以通过init Container修改主容器应用中的共享存储文件权限,让/var/www 路径成为apache用户和组拥有。这是我们利用initContainer起到的作用之一。

官方文档示例

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

最新文章

  1. mysql悲观锁总结和实践--转
  2. Java 验证码工具类
  3. Kubernetes集群初探
  4. 如何利用word2013写图文并茂的博客
  5. AFNetworking 3.0+ 启用完整、严格的https证书较验参考代码
  6. LocalDB简介和在VS2012及以上版本的使用
  7. Bootstrap_排版
  8. POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]
  9. POJ3581---Sequence 后缀树组
  10. Unicode字符集下CString与char *相互转换
  11. NSIS:使用nsWindows.nsh头文件调整窗体大小
  12. C# 上传文件至远程服务器
  13. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
  14. 一个关于Python正则表达式的快速使用手册
  15. 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core
  16. JAVA描述的简单ORM框架
  17. OpenLayers学习笔记(八)— 类似比例尺的距离环(二)
  18. Maven添加Web.xml的方法
  19. [Node.js] 08 - Web Server and REST API
  20. AngularJS的增删改查、state嵌套案例,不涉及服务端

热门文章

  1. matlab学习笔记12_4rmfield,arrayfun,structfun,struct2cell,cell2struct
  2. SpringMVC返回值响应
  3. 简单工厂(二)——coding
  4. node.js执行shell命令进行服务器重启
  5. 第2部分 Elasticsearch查询-请求体查询、排序
  6. 使用ReadtheDocs托管技术文档
  7. proc 下创建与应用交互的可读写节点
  8. Java开发笔记(一百五十一)Druid连接池的用法
  9. 代理服务器支持https(转)
  10. 原!!Spring redis的Scan的坑,慎用!