容器设计模式:Sidecar
文章目录
- 容器设计模式:Sidecar 模式
- 1. 什么是 Sidecar 模式?
- 2. Sidecar 模式的原理
- 2.1 工作机制
- 2.2 常见用途
- 3. Sidecar 模式示例
- 示例:日志收集
- 4. Sidecar 模式的架构图
- 图例:
- 5. Sidecar 模式的优点
- 6. Sidecar 模式的局限性
- 7. 适用场景
- 总结
容器设计模式:Sidecar 模式
1. 什么是 Sidecar 模式?
Sidecar 模式是一种容器设计模式,指的是在一个 Pod 中运行主容器和辅助容器(Sidecar 容器),二者共享 Pod 的资源(如网络和存储)。主容器负责核心业务逻辑,Sidecar 容器则负责为主容器提供增强功能,如日志收集、数据同步、服务代理等。
关键特点:
- 同一个 Pod:主容器和 Sidecar 容器运行在同一个 Pod 中,属于同一个生命周期。
- 共享环境:它们共享网络、存储卷等资源,能通过
localhost直接通信。
2. Sidecar 模式的原理
2.1 工作机制
-
网络共享:
- Pod 内所有容器共享同一个网络栈,Sidecar 容器可以通过
localhost与主容器直接通信。 - 适用于服务代理(如 Envoy)的场景。
- Pod 内所有容器共享同一个网络栈,Sidecar 容器可以通过
-
存储共享:
- Pod 中的容器可以共享同一个存储卷,Sidecar 容器可以读取主容器的数据,或将日志、配置文件写入共享存储。
-
解耦辅助功能:
- 辅助功能从主容器中解耦,通过 Sidecar 容器独立实现,从而简化主容器的逻辑。
2.2 常见用途
- 日志与监控:如 Fluentd 收集主容器的日志并发送到日志服务器。
- 服务代理:如 Envoy 或 Istio 代理流量,实现服务网格功能。
- 初始化任务:如同步配置文件或预加载缓存。
- 数据管理:如定期从远程服务器同步数据。
3. Sidecar 模式示例
示例:日志收集
以下是一个 Pod 的 YAML 配置,展示如何使用 Sidecar 模式实现日志收集:
apiVersion: v1
kind: Pod
metadata:name: sidecar-demo
spec:containers:- name: app-containerimage: nginx:latestvolumeMounts:- name: shared-logsmountPath: /var/log/nginx- name: sidecar-containerimage: fluentd:latestargs:- "--log-file=/var/log/nginx/access.log"- "--destination=http://log-server"volumeMounts:- name: shared-logsmountPath: /var/log/nginxvolumes:- name: shared-logsemptyDir: {}
解释:
app-container是主容器,运行 Nginx 并生成日志到/var/log/nginx。sidecar-container是 Sidecar 容器,使用 Fluentd 将日志发送到远程日志服务器。- 两个容器共享一个
emptyDir卷,Sidecar 容器可以访问主容器的日志文件。
4. Sidecar 模式的架构图
以下是 Sidecar 模式的架构图示例:
- 主容器(App Container):负责核心业务逻辑,如处理 HTTP 请求。
- Sidecar 容器(Sidecar Container):为主容器提供辅助功能,如日志收集、流量代理等。
- 共享资源:
- 网络:容器之间通过
localhost通信。 - 存储卷:共享日志文件或数据。
- 网络:容器之间通过
图例:
+--------------------------- Pod ---------------------------+
| |
| +----------------+ +--------------------------+ |
| | App Container | | Sidecar Container | |
| | -------------- | | ----------------------- | |
| | - App Logic | | - Logging Agent | |
| | - Generates Logs| | - Sends Logs to Server | |
| +----------------+ +--------------------------+ |
| ^ ^ |
| | Shared Volume | Shared Network |
| v v |
| Logs (/var/log) Communication (localhost) |
| |
+-----------------------------------------------------------+
5. Sidecar 模式的优点
- 功能解耦:将辅助功能从主容器中分离,简化核心应用逻辑。
- 灵活扩展:Sidecar 容器可以独立更换或更新,而无需修改主容器。
- 资源共享:通过共享存储和网络,轻松实现容器间的协作。
- 标准化:Sidecar 容器可以复用,适用于多个应用场景。
6. Sidecar 模式的局限性
- 生命周期绑定:Sidecar 容器和主容器共享 Pod 的生命周期,无法单独重启。
- 资源开销:增加了容器的数量,会占用更多的系统资源。
- 复杂性增加:需要对 Pod 的行为和资源分配进行更细致的设计和管理。
7. 适用场景
- 日志收集:通过 Sidecar 容器集中处理日志。
- 服务网格:如 Istio 和 Linkerd,代理服务间流量。
- 监控与分析:集成监控工具(如 Prometheus exporter)。
- 初始化与数据同步:用于初始化任务或数据分发。
总结
Sidecar 模式是容器编排中的重要设计模式,通过将辅助功能模块化到独立的容器中,增强了应用的可维护性和扩展性。这种模式广泛应用于日志收集、服务网格和监控系统中,是 Kubernetes 应用设计的基础实践之一。
相关文章:
容器设计模式:Sidecar
文章目录 容器设计模式:Sidecar 模式1. 什么是 Sidecar 模式?2. Sidecar 模式的原理2.1 工作机制2.2 常见用途 3. Sidecar 模式示例示例:日志收集 4. Sidecar 模式的架构图图例: 5. Sidecar 模式的优点6. Sidecar 模式的局限性7. …...
ensp 静态路由配置
A公司有广州总部、重庆分部和深圳分部3个办公地点,各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3,为路由器配置静态路由,使所有计算机能够互相访问,实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…...
MATLAB图卷积神经网络GCN处理分子数据集节点分类研究
全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…...
Android-Glide详解
目录 一,介绍 二,使用 三,源码分析思路 四,with源码分析 五,模拟Glide生命周期管理 一,介绍 Glide目前是安卓最主流的加载图片的框架,也是源码最为复杂的框架之一。 要想完完全全吃透Glide的源…...
2.Nuxt学习 组件使用和路由跳转相关
组件定义和使用 普通组件的使用 在Nuxt的项目中,可以直接在components文件夹下建立组件 在页面中直接使用 无需引入 多层级组件的使用 我们有时候会需要多层级组件来简化代码结构 比如我们需要给Banner组件添加一个子组件 我们直接建立其名称的文件夹 写入子组…...
代码开发相关操作
使用Vue项目管理器创建项目:(vue脚手架安装一次就可以全局使用) windowR打开命令窗口,输入vue ui,进入GUI页面,点击创建-> 设置项目名称,在初始化git下面输入:init project&…...
动态导出word文件支持转pdf
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示:这里可以添加本文要记录的大概内容: 例如ÿ…...
登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢
Error response from daemon: Get "https://172.16.21.35/v2/": tls: failed to verify certificate: x509: certificate is valid for 127.0.0.1, ::1, 172.16.21.30, not 172.16.21.35 版本 v2.10.1-b7b88476 不需要从头看, 直接看最下面的成功的证书创建 这里面首…...
【Leetcode Top 100】199. 二叉树的右视图
问题背景 给定一个二叉树的 根节点 r o o t root root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 数据约束 二叉树的节点个数的范围是 [ 0 , 100 ] [0,100] [0,100] − 100 ≤ N o d e . v a l ≤ 100…...
React自学:如何使用localStorage,以及如何实现删除笔记操作
1. 初始化notes 以下这段代码完成了这些操作: 调用 localStorage.getItem("notes") 从浏览器的本地存储中获取名为 “notes” 的数据。使用 JSON.parse 将获取到的字符串解析成数组。如果本地存储中没有 “notes” 数据(返回值为 null&#…...
go语言使用websocket发送一条消息A,持续接收返回的消息
在Go语言中实现一个WebSocket客户端,可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例,展示了如何创建一个WebSocket客户端,向服务器发送消息"A",并持续接收来自服务器的响应。 首…...
如何对小型固定翼无人机进行最优的路径跟随控制?
控制架构 文章继续采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为: { x ˙ p V a cos γ cos χ V w cos γ w cos χ w y ˙ p V a cos γ sin χ V w cos γ w sin χ…...
C++常见面试题-初级2
1. C和C有什么区别? C是面向对象的语言,而C是面向过程的语言;C引入new/delete运算符,取代了C中的malloc/free库函数;C引入引用的概念,而C中没有;C引入类的概念,而C中没有࿱…...
Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理
之所以想写这一系列,是因为之前工作过程中使用Spring Security,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0,关键是其风…...
mfc140.dll是什么东西?mfc140.dll缺失的几种具体解决方法
mfc140.dll是Microsoft Foundation Classes(MFC)库中的一个动态链接库(DLL)文件,它是微软基础类库的一部分,为Windows应用程序的开发提供了丰富的类库和接口。MFC库旨在简化Windows应用程序的开发过程&…...
【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器
作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…...
Windows安全中心(病毒和威胁防护)的注册
文章目录 Windows安全中心(病毒和威胁防护)的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心(病毒和威胁防护)的注册 本文我们来分析一下Windows安全中心(Windows Security Center…...
微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods
4.2 Direction Fields and Numerical Methods - Calculus Volume 2 | OpenStax...
深入理解旋转位置编码(RoPE)及其在大型语言模型中的应用
文章目录 前言一、 旋转位置编码原理1、RoPE概述2、 复数域内的旋转1、位置编码生成2、 应用位置编码二、RoPE的实现细节1、RotaryEmbedding类设计2、apply_rotary_pos_emb函数3、demo_apply_rotary_pos_emb函数三、完整RoPE代码Demo前言 随着自然语言处理(NLP)领域的快速发…...
内网穿透的应用-在OpenWrt上轻松搭建SFTP服务,安全传输文件不再难!
文章目录 前言1. 安装openssh-sftp-server2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT系统上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
