InitContainer
2024-09-03 20:17:18
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;']
最新文章
- mysql悲观锁总结和实践--转
- Java 验证码工具类
- Kubernetes集群初探
- 如何利用word2013写图文并茂的博客
- AFNetworking 3.0+ 启用完整、严格的https证书较验参考代码
- LocalDB简介和在VS2012及以上版本的使用
- Bootstrap_排版
- POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]
- POJ3581---Sequence 后缀树组
- Unicode字符集下CString与char *相互转换
- NSIS:使用nsWindows.nsh头文件调整窗体大小
- C# 上传文件至远程服务器
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
- 一个关于Python正则表达式的快速使用手册
- 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core
- JAVA描述的简单ORM框架
- OpenLayers学习笔记(八)— 类似比例尺的距离环(二)
- Maven添加Web.xml的方法
- [Node.js] 08 - Web Server and REST API
- AngularJS的增删改查、state嵌套案例,不涉及服务端
热门文章
- matlab学习笔记12_4rmfield,arrayfun,structfun,struct2cell,cell2struct
- SpringMVC返回值响应
- 简单工厂(二)——coding
- node.js执行shell命令进行服务器重启
- 第2部分 Elasticsearch查询-请求体查询、排序
- 使用ReadtheDocs托管技术文档
- proc 下创建与应用交互的可读写节点
- Java开发笔记(一百五十一)Druid连接池的用法
- 代理服务器支持https(转)
- 原!!Spring redis的Scan的坑,慎用!