胡文成的个人博客

Pod中三种特殊容器

2024-08-14

一、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中的网络问题而产生的

img

实现方式:让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命名空间共享的话,可以查看其他容器中的进程
Tags: k8s

扫描二维码,分享此文章