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
在这个配置中,我们定义了两个初始化容器 init01 和 init02,以及一个业务容器 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在查看容器是都可以找到对应的容器,以及每个容器的作用,上述已经说明,还有什么疑问可以在评论区提问哦~~
浙公网安备 33010602011771号