一、Pod中三种特殊容器
1、init容器
概念:是一种特殊的、在应用容器启动之前运行的特殊容器。
功能:可以包括一些应用镜像中不存在的实用工具和安装脚本
好处:
- 应用镜像的创建者与部署者独立开来,从而没有必要将双方的内容重新构建为一个镜像
- init容器提供了一种机制来阻塞(或延迟)应用容器的启动
- init容器中可以安全地运行自定义程序或代码,从而提高了应用容器镜像的安全性
与普通应用容器的区别:
init容器只要运行成功的话,就会一直运行直到Pod被删除之前
Pod中如果有多个init容器的话,这些容器会按顺序逐个运行的(必须等前一个init容器运行成功,后一个init容器才会启动)
当所有的init容器运行完成时,Kubernetes才初始化Pod中的应用容器,并像平常一样运行
如果有一个init容器运行失败,就会导致Pod状态为失败
如果第一个init容器运行失败,Pod会根据重启策略,重启init容器
2、Pause容器
为什么需要Pause容器:因为多个容器是可以运行在一个Pod中,那么这些容器间如何高效地共享某些资源和数据。
因为容器之间是通过Namespace和Cgroups进行隔离的,那么为解决上面的问题,就需要打破这样的隔离。
分为两个方面进行打破:网络隔离的打破 以及 存储隔离的打破
而Pause容器就是为解决Pod中的网络问题而产生的
实现方式:让Pod中多个容器可以共享网络
实现原理:在Pod中,额外启动一个永远处于暂停
状态的infra容器,这样其他容器会通过join Namespace
方式加入到这个容器的Network命名空间中
作用:
- 在Pod中担任共享命名空间的基础
- 启用PID命名空间,开启init进程
3、临时容器(Ephemeral Containers)
概念:在现有Pod中临时运行,以便完成用户发起的操作g
功能:检查现有Pod的状态
特点:
- 没有端口配置
- 不允许为临时容器配置
resources
参数
创建方式:使用API中一种特殊的ephemeralcontainers
处理器进行创建的,而不是直接添加到pod.spec
配置中的,因此无法通过kubectl edit
来添加一个临时容器
说明:临时容器与其他容器一样, 一旦添加到Pod中,旧不能倍更改或被删除
用途:
- 当应用容器崩溃或容器镜像不包含调试工具而导致无法使用
kubectl exec
进入容器时,可以使用临时容器进行交互式排查故障 - 使用临时容器时,如果启用了PID命名空间共享的话,可以查看其他容器中的进程
扫描二维码,分享此文章