Sidecar 容器是和主容器(主业务容器)配套在同一个 Pod 中的辅助容器。主容器 focus 在业务应用上,Sidecar 容器可以提供辅助功能,如:日志收集、监控指标收集、代理等。
使用 Sidecar 容器的主要好处是:
- 解耦:将辅助功能从主容器中解耦出来,使主容器专注于业务。
- 重用:Sidecar 容器可在不同的 Pod 中重用。
- 隔离:Sidecar 容器运行在独立的容器中,与主容器隔离。
Sidecar模式有以下常见使用场景:
- 日志收集:Sidecar 容器收集主容器的日志并上传。
- 监控收集:Sidecar 容器收集主容器的监控指标并上报。
- 代理:Sidecar 容器作为代理转发流量到主容器。
- 文件传输:在 CI/CD 流水线中,Sidecar 容器将构建产物传输至远端存储。
部署 Sidecar 容器的主要步骤是:
- 在 Pod 中定义主容器与 Sidecar 容器。
- Sidecar 容器通过和主容器共享的 Volume 与主容器交互。
- 主容器通过 localhost 访问 Sidecar 容器。
- 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 模式主要具有以下特点:
- 与主容器(业务容器)在同一 Pod 中。
- 提供辅助功能,如日志收集、监控指标收集等。
- 与主容器共享 Volume,通过 localhost 通信。
- 解耦辅助功能,使主容器专注于业务。
- Sidecar 容器可重用,在不同 Pod 中使用。