当前位置: 首页 > java >正文

kubernetes--通俗理解Sidecar容器

文章目录

  • Sidecar 原理详解
    • 1.1 Pod 是调度的基本单位
    • 1.2 工作机制
  • 通俗例子理解Sidecar
  • 技术场景
    • 日志收集 Sidecar
    • 配置自动更新 Sidecar
  • Sidecar职责分离
  • 日志收集 Sidecar 示例
    • 实验目标
    • 完整 YAML 文件:nginx-logger-pod.yaml
      • 步骤说明
      • 如何运行
  • 回答面试官
  • Sidecar vs Init 容器
    • 面试回答

在Kubernetes(K8s)中,Sidecar(边车) 是一种容器模式(Sidecar Pattern),指的是在 同一个 Pod 内 部署一个或多个 辅助容器(即 Sidecar 容器),来为 主应用容器提供附加功能,如 日志收集、配置同步、代理通信等。

Sidecar 原理详解

1.1 Pod 是调度的基本单位

在 Kubernetes 中,一个 Pod 内可以包含多个容器,这些容器共享:

  1. 网络命名空间(即可通过 localhost 互通)
  2. 存储卷(Volumes)
  3. 生命周期(随 Pod 一起创建、销毁)

Sidecar 就是和主应用容器部署在同一个 Pod 内的“辅助容器”,它通常和主容器 紧密协作,但 职责不同。

1.2 工作机制

Sidecar 容器利用 Pod 内的共享网络与卷,通常以以下方式提供服务:

  1. 在主容器启动前或同时启动
  2. 持续运行,监听主容器状态或输出
  3. 主容器关闭时,Sidecar 也随之终止

通俗例子理解Sidecar

Sidecar 是和主应用一起运行在同一个 Pod 中的“辅助容器”,用来做主应用不方便或不擅长做的事。
就像一辆摩托车边上带的“边车”,边车不会开车,但能帮你装行李、放地图、带个乘客,让你专心骑车。

想象一个开餐馆的主厨(主容器),他专注炒菜做饭(业务逻辑),但还需要有人帮忙干这些事:

  1. 收拾碗筷、打扫卫生(日志收集)
  2. 检查菜单有没有更新(配置监听)
  3. 替客人点单并翻译菜单(流量代理)

这时候,店里配了个助手(Sidecar),和主厨一起在厨房里配合,主厨不用亲自干这些杂活。

技术场景

日志收集 Sidecar

例子1:日志收集 Sidecar

  1. 主容器: Nginx
  2. 作用: 提供网页服务
  3. 问题: Nginx 只写日志文件,不能把日志发送到日志服务器

解决方法: 加一个 Sidecar 容器,它做这件事:

1.每秒读取 Nginx 写的日志文件
2. 发送到外部的日志中心(如 ELK、Promtail)

所以:Sidecar 就像专门负责送日志的人。

配置自动更新 Sidecar

例子2:配置自动更新 Sidecar

  1. 主容器: Java 应用,需要一个配置文件 config.yaml
  2. 问题: 这个配置每隔几分钟会在配置中心更新,主容器不会自动拉取

Sidecar 容器做什么?

  1. 监听配置中心
  2. 拉取更新,写入共享目录,主容器实时读取

所以:Sidecar 是帮主容器搬运配置的人。

Sidecar职责分离

为什么不把这些功能写进主容器里?
这就是“职责分离”的思想:

主容器Sidecar 容器
只做业务负责辅助支持
减少复杂性关注非核心功能
更通用更专用(日志、代理、安全等)

Sidecar 容器的一个 很重要的优点是可以被复用和独立更新,比如 Fluentd、Envoy、Certbot 都可以作为 Sidecar 使用在多个服务中。

Sidecar 是一种设计模式,让主应用容器更专注做核心功能,其他的交给身边的“边车”处理,这些边车在 Pod 里和主应用并肩作战。

日志收集 Sidecar 示例

主容器(Nginx)产生日志,Sidecar 容器(BusyBox)收集这些日志并打印到控制台。

实验目标

实验目标

  1. 启动一个 Pod,有两个容器:
  1. nginx:正常运行,写 access.log
  2. busybox:周期性读取日志内容,模拟“收集”日志
  1. 共享日志路径 /var/log/nginx 作为 emptyDir 卷

完整 YAML 文件:nginx-logger-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: nginx-logger-pod
spec:volumes:- name: nginx-logsemptyDir: {}  # 临时共享目录containers:- name: nginximage: nginxvolumeMounts:- name: nginx-logsmountPath: /var/log/nginx  # nginx 日志目录挂载出来- name: log-sidecarimage: busyboxcommand: ["/bin/sh", "-c"]args:- while true; doif [ -f /var/log/nginx/access.log ]; thentail -n 10 /var/log/nginx/access.log;fi;sleep 5;donevolumeMounts:- name: nginx-logsmountPath: /var/log/nginx  # 同样挂载这个目录

步骤说明

步骤说明

  1. Nginx 容器会把访问日志写到 /var/log/nginx/access.log
  2. Sidecar(BusyBox) 会每 5 秒读取一次这个日志文件的内容
  3. 它们通过 emptyDir 卷共享这个目录

如何运行

kubectl apply -f nginx-logger-pod.yaml

然后你可以用如下命令观察 Sidecar 容器日志:

kubectl logs nginx-logger-pod -c log-sidecar -f

然后用下面命令触发访问日志产生:

kubectl exec -it nginx-logger-pod -c nginx -- curl localhost

再看 Sidecar 输出,会发现它打印了日志内容。

回答面试官

面试官问:

“请简述 Sidecar 模式下日志收集的实现方式。”

你可以说:

Sidecar 以辅助容器的形式,与主容器共享日志目录(通常使用 emptyDir 卷),主容器将日志写入该目录,Sidecar 容器读取并处理这些日志,例如转发到日志系统,做到日志与业务解耦。

Sidecar vs Init 容器

它们的相似点是:都运行在 Pod 中,用于“辅助”主容器,但它们的用途和生命周期是完全不同的。

项目Init 容器Sidecar 容器
🧠 作用启动前准备工作运行时辅助主容器
⏱ 生命周期运行一次,先启动,运行完即退出与主容器同时启动、同时终止
⏳ 运行顺序串行,必须全部完成主容器才启动并行运行,和主容器并肩运行
🔁 重启行为失败时重启,成功后不再运行和主容器一样会被 kubelet 监控
🧰 常见用途拉取配置、下载依赖、准备数据、权限设置等日志收集、流量代理、配置监听、服务网格等
🪣 卷共享可以和主容器共享卷可以和主容器共享卷
🚫 网络共享和主容器共享网络空间和主容器共享网络空间

面试回答

Sidecar 和 Init 容器的核心区别在于生命周期和用途:

  1. Init 容器用于 Pod 启动前的初始化工作,是串行执行的,只运行一次。
  2. Sidecar 容器用于主容器运行时的辅助功能,是并行运行的,生命周期和主容器一致。

它们都可以共享存储卷和网络,但职责和执行时机完全不同。

http://www.xdnf.cn/news/13508.html

相关文章:

  • WinHex 20.8-SR1 安装教程详细步骤+下载
  • 【AI大模型入门指南】概念与专有名词详解 (一)
  • 【算法篇】逐步理解动态规划模型6(回文串问题)
  • RabbitMQ可靠和延迟队列
  • 2025下半年软考系统分析师备考攻略:6个月通关计划与高频考点解析
  • CBAM认证概述,CBAM认证的核心要素,CBAM认证的未来发展
  • 力扣HOT100之堆:295. 数据流的中位数
  • 分类数据集 - 植物分类数据集下载
  • 【C++】浅谈C++多态
  • vue3 + ant 实现 tree默认展开,筛选对应数据打开,简单~直接cv
  • Linux 引导过程与服务控制
  • TBvision 静态测试以及生成报告教程
  • GlusterFS 分布式文件系统
  • 【笔记】NVIDIA AI Workbench 中 sudo 密码问题排查与解决
  • 电流传感器在汽车中的应用:从BMS电池管理到电机控制的工程解析
  • 纯血Harmony NETX 5小游戏实践:趣味三消游戏(附源文件)
  • 「Java流程控制」顺序结构
  • 华为Pura 80系列发布 6499元起
  • 如何利用测试Agent自动分析覆盖率报告与缺陷趋势
  • 第十四章 Linux实操篇——进程管理(重点)
  • 锂电池(3V/3.3V/3.7V)升压 5V 全场景方案:大小电流 DC-DC 芯片参数对比与选型指南
  • 台湾TEMI协会竞赛——1、龙舟机器人组装教学
  • Spring事务同步器(TransactionSynchronizationManager)+ 事务钩子函数的使用案例
  • 行为设计模式之Observer(观察者)
  • 【20】番茄叶片病害数据集(有v5/v8模型)/YOLO番茄叶片病害检测
  • 分布式ID实现方案实战示例总结
  • Qt工作总结06 < QMap<> 和QVector<QPair>、以及QPair<>和QMakePair<> >
  • Windows 安装以及配置Docker全流程 - Docker Toolbox
  • 聊天室项目多进程纯C版
  • JAVA学习