1. 什么是 Sidecar 容器

Sidecar 是 Kubernetes 里一种常见的设计模式。它和主容器(这里是 httpd)共享同一个 Pod。它们可以共享网络、存储等资源,通常用来为主容器提供辅助功能,比如日志收集、配置注入、流量代理等。

在这个例子里,busybox 就是典型的 Sidecar 容器。


2. 配置逐段解析

🎯 整体结构
kind: Pod
metadata:
  name: sidecarpod
spec:
  containers:
  - name: httpd          # 主容器(Web服务)
    ...
  - name: busybox        # Sidecar容器(内容注入)
    ...
  volumes:               # 共享存储卷
  - name: sidecarvolume
    emptyDir: {}

🚀 主容器 httpd
  • 镜像httpd(Apache HTTP Server),用来提供 Web 服务。
  • 挂载卷:把 sidecarvolume 挂载到 /usr/local/apache2/htdocs/,这是 Apache 默认的网页根目录。
  • 作用:负责对外提供 HTTP 访问服务,展示网页内容。

🛠️ Sidecar 容器 busybox
  • 镜像busybox(一个轻量级的 Linux 工具集)。
  • 启动命令
    command: ['sh', '-c', 'echo "Hello Sidecar!" > /usr/local/apache2/htdocs/index.html && sleep 3600']
    
    这个命令会在共享目录里创建一个 index.html 文件,内容是 Hello Sidecar!,然后让容器休眠 1 小时,保持运行状态。
  • 挂载卷:同样挂载 sidecarvolume/usr/local/apache2/htdocs/,和主容器共享同一个目录。
  • 作用:通过共享存储,动态为主容器注入网页内容,而无需修改主容器本身。

📦 共享存储 sidecarvolume
  • 类型是 emptyDir,这是一个临时目录,Pod 启动时创建,Pod 删除时销毁。
  • 两个容器通过它实现了文件共享,Sidecar 生成的网页文件可以被主容器直接读取并对外提供服务。

3. 工作流程

  1. Pod 启动时,会创建 emptyDir 类型的 sidecarvolume
  2. busybox 容器启动,执行命令生成 index.html 并写入共享目录,然后休眠。
  3. httpd 容器启动,从共享目录读取 index.html,并通过 HTTP 端口对外提供访问。
  4. 当你访问 httpd 服务时,就能看到 Hello Sidecar! 这个内容。

4. 设计优势

  • 解耦:主容器专注于核心的 Web 服务,Sidecar 负责内容注入,职责清晰。
  • 复用:Sidecar 可以被多个 Pod 复用,无需在每个主容器里重复实现相同功能。
  • 共享资源:通过 emptyDir 实现文件共享,避免了网络传输,性能更高。

更多推荐