Kubernetes 中的 Sidecar 容器是什么?

Sidecar 容器是和主容器(主业务容器)配套在同一个 Pod 中的辅助容器。主容器 focus 在业务应用上,Sidecar 容器可以提供辅助功能,如:日志收集、监控指标收集、代理等。

使用 Sidecar 容器的主要好处是:

  • 解耦:将辅助功能从主容器中解耦出来,使主容器专注于业务。
  • 重用:Sidecar 容器可在不同的 Pod 中重用。
  • 隔离:Sidecar 容器运行在独立的容器中,与主容器隔离。

Sidecar模式有以下常见使用场景:

  • 日志收集:Sidecar 容器收集主容器的日志并上传。
  • 监控收集:Sidecar 容器收集主容器的监控指标并上报。
  • 代理:Sidecar 容器作为代理转发流量到主容器。
  • 文件传输:在 CI/CD 流水线中,Sidecar 容器将构建产物传输至远端存储。

部署 Sidecar 容器的主要步骤是:

  1. 在 Pod 中定义主容器与 Sidecar 容器。
  2. Sidecar 容器通过和主容器共享的 Volume 与主容器交互。
  3. 主容器通过 localhost 访问 Sidecar 容器。
  4. Sidecar 容器与外部系统交互以提供辅助功能。

例如,我们可以部署一个 Nginx Pod,使用 Fluentd Sidecar 容器来收集日志:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-fluentd 
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
  - name: fluentd
    image: fluent/fluentd
    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: varlibdockercontainers
      mountPath: /var/lib/docker/containers
    command: ["fluentd", "-c", "/fluentd/etc/fluent.conf"]
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers

这个 Pod 中:

  • nginx 容器作为主容器运行业务。
  • fluentd 容器作为 Sidecar 容器收集 nginx 容器的日志。
  • fluentd 容器挂载 /var/log 和 /var/lib/docker/containers 卷来收集日志。
  • nginx 容器通过 localhost 访问 fluentd。

所以,Sidecar 模式主要具有以下特点:

  1. 与主容器(业务容器)在同一 Pod 中。
  2. 提供辅助功能,如日志收集、监控指标收集等。
  3. 与主容器共享 Volume,通过 localhost 通信。
  4. 解耦辅助功能,使主容器专注于业务。
  5. Sidecar 容器可重用,在不同 Pod 中使用。