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

容器设计模式: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 工作机制
  1. 网络共享

    • Pod 内所有容器共享同一个网络栈,Sidecar 容器可以通过 localhost 与主容器直接通信。
    • 适用于服务代理(如 Envoy)的场景。
  2. 存储共享

    • Pod 中的容器可以共享同一个存储卷,Sidecar 容器可以读取主容器的数据,或将日志、配置文件写入共享存储。
  3. 解耦辅助功能

    • 辅助功能从主容器中解耦,通过 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: {}

解释:

  1. app-container 是主容器,运行 Nginx 并生成日志到 /var/log/nginx
  2. sidecar-container 是 Sidecar 容器,使用 Fluentd 将日志发送到远程日志服务器。
  3. 两个容器共享一个 emptyDir 卷,Sidecar 容器可以访问主容器的日志文件。

4. Sidecar 模式的架构图

以下是 Sidecar 模式的架构图示例:

  1. 主容器(App Container):负责核心业务逻辑,如处理 HTTP 请求。
  2. Sidecar 容器(Sidecar Container):为主容器提供辅助功能,如日志收集、流量代理等。
  3. 共享资源
    • 网络:容器之间通过 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 模式的优点

  1. 功能解耦:将辅助功能从主容器中分离,简化核心应用逻辑。
  2. 灵活扩展:Sidecar 容器可以独立更换或更新,而无需修改主容器。
  3. 资源共享:通过共享存储和网络,轻松实现容器间的协作。
  4. 标准化:Sidecar 容器可以复用,适用于多个应用场景。

6. Sidecar 模式的局限性

  1. 生命周期绑定:Sidecar 容器和主容器共享 Pod 的生命周期,无法单独重启。
  2. 资源开销:增加了容器的数量,会占用更多的系统资源。
  3. 复杂性增加:需要对 Pod 的行为和资源分配进行更细致的设计和管理。

7. 适用场景

  1. 日志收集:通过 Sidecar 容器集中处理日志。
  2. 服务网格:如 Istio 和 Linkerd,代理服务间流量。
  3. 监控与分析:集成监控工具(如 Prometheus exporter)。
  4. 初始化与数据同步:用于初始化任务或数据分发。

总结

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 导出样式 前言 提示:这里可以添加本文要记录的大概内容: 例如&#xff…...

登陆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中没有&#xff1…...

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&#…...

嘎嘎降AI下载结果后的后处理教程:格式调整和质量自查方法

嘎嘎降AI下载结果后的后处理教程:格式调整和质量自查方法 上周室友第一次用降AI工具,操作错了好几步,差点浪费机会。觉得有必要写一篇详细教程。 我用的是嘎嘎降AI(www.aigcleaner.com),4.8元一篇&#x…...

Spring AI聊天记录丢了怎么办?手把手教你用Redis实现ChatMemory持久化(附完整代码)

Spring AI聊天记录持久化实战:Redis解决方案与工程实践 在构建智能对话系统时,聊天记录的持久化是一个经常被忽视却至关重要的环节。想象一下这样的场景:用户昨天与你的客服机器人进行了长达30分钟的咨询,今天再次访问时却发现系统…...

AutoUpdater.NET实战:Windows服务程序更新失败的3种解决方案

AutoUpdater.NET实战:Windows服务程序更新失败的3种解决方案 在Windows服务程序的开发和维护过程中,自动更新是一个常见但颇具挑战性的需求。许多开发者习惯使用AutoUpdater.NET这类便捷的库来处理桌面应用程序的更新,但当同样的代码迁移到Wi…...

告别重复劳动:用快马ai编程自动生成表单验证工具,效率翻倍

最近在开发一个用户注册系统时,发现表单验证这块特别耗费时间。每次都要重复写各种正则表达式,还要考虑各种边界情况,效率实在太低。于是我开始寻找能提升效率的解决方案,最终在InsCode(快马)平台上找到了理想的工具。 表单验证的…...

高效批量获取抖音无水印视频:从概念到实战的完整指南

高效批量获取抖音无水印视频:从概念到实战的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

AI如何重塑游戏公平性?让每个人都能享受射击乐趣的开源辅助方案

AI如何重塑游戏公平性?让每个人都能享受射击乐趣的开源辅助方案 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy …...

OmX与量子计算:量子编程的AI辅助工具

OmX与量子计算:量子编程的AI辅助工具 【免费下载链接】oh-my-codex OmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more. 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex OmX(Oh My c…...

如何用SwiftUI实现macOS自动化点击:技术原理与实战指南

如何用SwiftUI实现macOS自动化点击:技术原理与实战指南 【免费下载链接】macos-auto-clicker A simple auto clicker for macOS Big Sur, Monterey, Ventura, Sonoma and Sequoia. 项目地址: https://gitcode.com/gh_mirrors/ma/macos-auto-clicker macOS自动…...

别再让LDO过热罢工了!手把手教你用串联电阻给TPS732这类芯片‘减负’

巧用串联电阻为LDO芯片降温的工程实践 最近在调试一块嵌入式板卡时,发现采用SOT-23封装的TPS732频繁触发热保护,导致系统间歇性重启。这种看似简单的电源问题,往往会让工程师在深夜的实验室里抓狂。传统解决方案如增大铺铜面积或更换封装&…...

PyFluent:基于gRPC架构的Ansys Fluent Python自动化接口设计与实现

PyFluent:基于gRPC架构的Ansys Fluent Python自动化接口设计与实现 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent PyFluent作为Ansys Fluent的官方Python接口,通过gRPC远…...