首页/云/Kubernetes 速查/Sidecar 容器与原生 sidecar

Sidecar 容器与原生 sidecar

辅助容器与主容器同 Pod 协作(日志收集、代理、守护);较新版本支持 init 容器配 restartPolicy: Always 实现启动顺序可控的原生 sidecar。

Kubernetes 速查云更新于 2026-10-13

Sidecar 容器与原生 sidecar

边车是一个与主容器同 Pod 运行的辅助容器,负责日志采集、代理、配置同步这类横切工作,它和主容器共享网络命名空间与挂载的卷,但各自的根文件系统独立。经典边车就是普通容器,与主容器并行启动、退出顺序不确定;较新的集群支持把 init 容器声明为 restartPolicy: Always,得到启动顺序可控的原生 sidecar。

基本信息

声明位置经典边车在 spec.containers,原生边车在 spec.initContainers
关键字段原生边车必须写 restartPolicy: Always
共享资源同一 Pod 的网络命名空间与卷,不共享根文件系统
版本要求原生 sidecar 在 1.28 为 alpha,1.29 起 beta 并默认开启
适用范围Kubernetes 1.29 及以上;更早版本只能使用经典边车

经典 sidecar 写法

经典 sidecar 写法
spec:
  containers:
    - name: app
      image: registry.example.com/app:1.26.0
    - name: log-shipper
      image: registry.example.com/fluent-bit:2.2
      volumeMounts:
        - name: logs
          mountPath: /var/log/app
  volumes:
    - name: logs
      emptyDir: {}

原生 sidecar 写法

原生 sidecar 写法
spec:
  initContainers:
    - name: proxy
      image: registry.example.com/envoy:v1.29
      restartPolicy: Always        # init 容器总是重启即原生边车
      volumeMounts:
        - name: config
          mountPath: /etc/proxy
  containers:
    - name: app
      image: registry.example.com/app:1.26.0

两种边车差异

维度经典 sidecar原生 sidecar
声明位置containers 中的普通容器initContainers 且 restartPolicy 为 Always
启动顺序与主容器并行启动,无顺序保证按 init 顺序先启动边车,主容器随后开始
退出顺序与主容器并行,先后不确定主容器先停,边车最后退出
对 Job 的影响常驻边车会让 Job 一直不结束主容器结束后边车被终止,不阻塞 Job 完成
版本要求所有版本可用需要 1.29 及以上的集群

典型使用场景

  • 日志采集:边车读共享卷里的日志文件并转发到日志平台,主容器不需要感知
  • 服务网格代理:代理容器接管 Pod 的进出流量,业务容器不感知流量治理逻辑
  • 配置文件热更新:边车负责拉取配置并写入共享卷,主容器定期重载
  • 初始化依赖:需要先建好连接或准备目录再启动主容器,用原生边车把顺序固定下来
  • Job 场景:批处理任务加日志边车时,用原生边车避免任务因边车常驻而永不完成
原生 sidecar 只接受 restartPolicy: Always 这一个取值;写其他值会被校验拒绝。它的重启行为由 kubelet 按边车语义管理,与普通业务容器的重启退避不完全相同。
在旧集群上照抄原生边车清单风险很高:字段不生效时边车会按普通 init 容器只运行一次就退出,代理与日志采集中断,而主容器看起来完全正常,问题往往在事故后才被发现。

易错点

  • 经典边车的退出顺序没有保证:Job 场景里常驻边车会让任务永远不结束,最后由超时兜底
  • 把需要顺序的初始化逻辑塞进普通边车:并行启动意味着主容器可能在依赖就绪前就开始工作
  • 认为边车与主容器共享文件系统:它们只共享卷和网络命名空间,根文件系统各自独立
  • 在 1.28 之前的集群依赖原生边车:字段不生效,边车退化成一次性 init 容器
  • 边车抢占资源却没有配 requests:边车与主容器共享节点资源,缺失声明会干扰调度与驱逐判定

数据来源与参考

  • Kubernetes 官方文档 · Sidecar Containers
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌