Init 容器与 Sidecar
约 686 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › K8s › Pod 与容器(在新窗口打开) › Init 容器与 Sidecar
Init 容器
Init 容器在 Pod 的应用容器启动之前运行,用于完成初始化任务。
特点
- 按顺序执行,一个成功后才启动下一个。
- 所有 Init 容器成功后才启动应用容器。
- 共享 Pod 的网络栈和 Volume。
- 如果失败,K8s 根据
restartPolicy决定是否重启。
示例
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: app
image: nginx:alpine
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
initContainers:
- name: init-clone
image: alpine/git
command:
- sh
- -c
- "git clone https://github.com/example/repo.git /data"
volumeMounts:
- name: data
mountPath: /data
- name: init-permissions
image: busybox:latest
command:
- sh
- -c
- "chmod -R 755 /data"
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}# 查看 Init 容器状态
kubectl get pod init-demo
kubectl describe pod init-demo
# Init Containers 字段显示状态适用场景
| 场景 | 说明 |
|---|---|
| 等待依赖服务就绪 | 循环检查数据库是否可连接 |
| 初始化数据 | 从 Git 拉取数据、初始化数据库 Schema |
| 文件权限修复 | 调整挂载卷的权限 |
| 生成配置文件 | 从环境变量或 Secret 生成配置文件 |
Sidecar 模式
Sidecar 是与主容器运行在同一 Pod 中的辅助容器,共享网络和存储。
apiVersion: v1
kind: Pod
metadata:
name: sidecar-demo
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log/nginx
- name: log-collector
image: busybox:latest
command:
- sh
- -c
- "tail -f /var/log/nginx/access.log | while read line; do echo \"[$(date)] $line\" >> /var/log/nginx/processed.log; done"
volumeMounts:
- name: logs
mountPath: /var/log/nginx
volumes:
- name: logs
emptyDir: {}典型 Sidecar 模式
| Sidecar 类型 | 作用 |
|---|---|
| 日志采集 | Filebeat/Fluentd 读取应用日志发往 Elasticsearch |
| 指标采集 | Prometheus 指标暴露端点(metrics adapter) |
| 网络代理 | Istio Envoy、Nginx 反向代理 |
| 配置同步 | 监听配置变更并通知应用重载 |
| 认证代理 | 对外请求做 OAuth2 认证 |
Init 容器 vs Sidecar
| 对比 | Init 容器 | Sidecar 容器 |
|---|---|---|
| 启动顺序 | 应用容器之前 | 与应用容器同时 |
| 运行周期 | 执行完毕即退出 | 长期运行 |
| 用途 | 一次性初始化 | 辅助功能 |
| 共享 | Volume 共享 | 网络 + Volume |
小结
- Init 容器按顺序在应用启动前执行,用于等待依赖、初始化数据、生成配置。
- Sidecar 容器与应用容器长期共存,用于日志采集、指标暴露、网络代理。
- 两者都共享 Pod 的网络栈和 Volume。
- Init 容器失败后会按
restartPolicy重试(Pod 级别为 Always 时 Init 容器总是重试)。 - Sidecar 模式是服务网格(Istio)的核心实现方式。
上一节:Pod 生命周期与探针 下一节:Deployment 与滚动更新
