随笔 - 329  文章 - 0  评论 - 5  阅读 - 4962

Pod的类型

Kubernetes 容器类型与初始化容器实战案例

在 Kubernetes 中,Pod 是最小的部署单元,它可以包含多个容器。在实际使用中,我们常常会遇到包含初始化容器(Init Containers)和业务容器(App Containers)的场景。本文将详细介绍 Kubernetes 中容器类型的概念,并通过实际案例展示如何使用初始化容器。

1. Kubernetes 容器类型

Kubernetes 中的容器主要有三种类型:基础架构容器、初始化容器和业务容器。

1.1 基础架构容器(Pause Container)

基础架构容器是最先启动的容器,由 Kubernetes 自身管理,无需运维人员干预。它的作用是为初始化容器和业务容器提供网络命名空间。

1.2 初始化容器(Init Containers)

初始化容器用于在业务容器启动之前执行一些初始化任务。它们会按顺序执行,且可以定义多个初始化容器。只有当所有初始化容器执行完成后,Kubernetes 才会启动业务容器。

  • 特点
    • 初始化容器可以执行环境准备工作,如拉取配置文件、初始化数据库等。
    • 它们总是先于业务容器启动,且只执行一次。

1.3 业务容器(App Containers)

业务容器是 Pod 中实际运行业务逻辑的容器。它通常包含应用程序的主要功能和代码,负责执行任务。

2. 实战案例:配置初始化容器

以下是一个简单的实战案例,展示如何在 Kubernetes 中配置初始化容器和业务容器。

2.1 编写资源清单

首先,我们创建一个 Pod 配置文件 11-pods-initContainers.yaml,其中包含两个初始化容器和一个业务容器。

apiVersion: v1
kind: Pod
metadata:
  name: pause-initcontainers-containers-001
spec:
  nodeName: worker232
  initContainers:
  - name: init01
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    command: ["sleep", "30"]
  - name: init02
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    command:
      - /bin/sh
      - -c
      - "touch /haha"
  containers:
  - name: xiuxian
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

在这个配置中,我们定义了两个初始化容器 init01init02,以及一个业务容器 xiuxian。初始化容器将按照顺序执行,并在所有初始化容器完成后启动业务容器。

2.2 查看容器信息

创建 Pod 后,使用以下命令查看容器状态:

docker ps -a --no-trunc | grep pause-initcontainers-containers-001

3. 初始化容器与业务容器的数据共享

初始化容器和业务容器可以通过共享 Volume 进行数据交换。例如,初始化容器可以创建文件或写入日志,业务容器可以读取这些文件。

以下是更新后的配置,包含了共享 Volume 的设置:

apiVersion: v1
kind: Pod
metadata:
  name: initcontainers-containers-volumes-001
spec:
  nodeName: worker232
  volumes:
  - name: data
    emptyDir: {}
  initContainers:
  - name: init02
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    command:
      - /bin/sh
      - -c
      - "echo www.oldboyedu.com >> /haha/init02.log"
    volumeMounts:
    - name: data
      mountPath: /haha
  containers:
  - name: xiuxian
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    volumeMounts:
    - name: data
      mountPath: /data

在这个配置中:

  • init02 初始化容器向共享 Volume /haha 写入数据。
  • 业务容器 xiuxian 挂载相同的 Volume,并将其挂载到 /data 路径,以便读取初始化容器的数据。

3.1 查看容器的数据

通过 kubectl exec 进入业务容器,查看共享卷中的数据:

kubectl exec -it initcontainers-containers-volumes-001 -- sh
ls /data/
cat /data/init01.log
cat /data/init02.log

3.2 结果输出:

/data/
init01.log  init02.log

cat /data/init01.log
Wed Jul 31 08:42:24 UTC 2024

cat /data/init02.log
www.oldboyedu.com

4. 容器重启行为

在 Kubernetes 中,当业务容器被杀死时,初始化容器不会重新执行。这意味着初始化容器在 Pod 启动时只会执行一次。

例如,我们通过 docker kill 命令强制停止业务容器,观察初始化容器的行为:

docker kill <业务容器ID>

可以看到,初始化容器不会重新启动,只会执行一次,直到 Pod 被完全删除或重新创建。

5. 总结

  • 初始化容器:用于在业务容器启动之前执行一次性的初始化任务。初始化容器的执行顺序严格,且它们只执行一次。
  • 共享 Volume:初始化容器和业务容器可以通过 Volume 实现数据共享,从而在容器之间传递信息或文件。
  • 容器重启:当业务容器重启时,初始化容器不会重新执行,它们只会在 Pod 启动时执行一次。

-以上三种pod是工作中常见的三种pod在查看容器是都可以找到对应的容器,以及每个容器的作用,上述已经说明,还有什么疑问可以在评论区提问哦~~

posted on   Leo-Yide  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示