Kubernetes 中的初始化容器和边车容器

Kubernetes 作为一个开源容器编排平台,引入了强大的概念来管理和增强 Pod 内容器的功能。其中两个概念是初始化容器(Init Containers)和边车容器(Sidecar Containers)。尽管这两种容器类型在协助主应用容器方面发挥着重要作用,但它们的工作方式、执行时间和用途都有显著差异。

初始化容器(Init Containers)

Definition: Init Containers are special containers that run before the main application containers in a pod start.

初始化容器是在 Pod 中的应用容器启动前运行的专用容器。它们在 Pod 中的所有应用容器启动之前,按顺序运行完成。如果 Pod 中定义了多个初始化容器,那么它们会按照在 Pod 规格中定义的顺序依次执行。只有当一个初始化容器成功完成后,下一个才会启动。初始化容器的特点:

  1. 按顺序运行:初始化容器总是按照它们在 Pod 规格中定义的顺序运行。
  2. 运行至完成:每个初始化容器必须成功完成后才能启动下一个。
  3. 前置条件:只有当所有初始化容器都成功完成后,应用容器才会启动。
  4. 单一职责:每个 Init 容器都是为特定的初始化任务设计,促进模块化和易维护的方式。
  5. 临时性质:Init 容器是短暂存在的,仅在 Pod 初始化期间执行分配的任务。
  6. 失败与重启:如果 Init 容器未能成功执行,整个 Pod 初始化失败,Pod 将重启,直到 Init 容器成功完成任务。
+-------------------+     +------------------+
|  Init Container   | --> |  Main Container  |
|   (Small Box)     |     |  (Large Box)     |
|                   |     |                  |
|   Initialization  |     |   Application    |
|   Tasks           |     |                  |
|                   |     |                  |
+-------------------+     +------------------+Support               Main Application

初始化容器的使用场景

  1. 等待依赖服务/初始化服务:在应用容器启动前,确保依赖的服务(如数据库)已经准备就绪。
  2. 推迟应用启动:直到满足特定条件后才启动应用容器。
  3. 设置环境:初始化工作目录、创建配置文件或设置权限。
  4. 注册服务:在服务发现系统中注册 Pod。

初始化容器示例

apiVersion: v1
kind: Pod
metadata:name: init-container-demo
spec:containers:- name: main-containerimage: busyboxcommand: ['sh', '-c', 'echo The main container is running! && sleep 3600']initContainers:- name: init-myserviceimage: busyboxcommand: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busyboxcommand: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

在这个例子中:

  • 两个初始化容器 init-myserviceinit-mydb 按顺序运行
  • 每个初始化容器等待特定服务可用
  • 只有当两个初始化容器都成功完成后,主容器main-container才会启动

边车容器(Sidecar Containers)

Definition: Sidecar Containers are additional containers that run alongside the main application container within the same pod.

边车容器是与主应用容器一起运行的辅助容器,它们与主容器共享相同的生命周期。边车容器为主容器提供补充功能,而不需要更改主容器的代码。边车容器的特点:

  1. 并行运行:边车容器与主应用容器并行运行。
  2. 共享资源:边车容器与主容器共享相同的网络命名空间、IPC 命名空间和卷。
  3. 全生命周期:边车容器在 Pod 的整个生命周期内运行。
  4. 独立功能:边车容器提供独立的功能,如日志收集、数据同步等。
  5. 功能增强:Sidecar 容器通过提供辅助功能来增强主容器,而不会影响主应用程序的核心逻辑。
  6. 容器间通信:Sidecar 容器可以通过共享卷或网络接口与主容器通信,促进协作。

边车容器的使用场景

  1. 日志收集:收集主容器生成的日志并发送到集中式日志服务。
  2. 代理:作为主容器的代理,处理网络请求。
  3. 数据同步:将数据从外部源同步到主容器可访问的卷。
  4. 监控:监控主容器的行为和性能。
  5. 安全:提供额外的安全功能,如 TLS 终止。

边车容器示例

apiVersion: v1
kind: Pod
metadata:name: sidecar-container-demo
spec:containers:- name: main-containerimage: nginxvolumeMounts:- name: shared-datamountPath: /usr/share/nginx/html- name: sidecar-containerimage: busyboxcommand: ["/bin/sh"]args: ["-c", "while true; do echo Hello from the sidecar container > /data/index.html; sleep 30; done"]volumeMounts:- name: shared-datamountPath: /datavolumes:- name: shared-dataemptyDir: {}

在这个例子中:

  • 主容器运行 Nginx Web 服务器
  • 边车容器每 30 秒更新一次 index.html 文件
  • 两个容器共享一个卷,允许边车容器更新主容器提供的内容
  • 两个容器同时运行,贯穿 Pod 的整个生命周期

初始化容器与边车容器的比较

特点初始化容器边车容器
运行时间在应用容器前按顺序运行与应用容器并行运行
生命周期运行完成后终止与 Pod 同生命周期
执行顺序严格按定义顺序无特定顺序
用途准备环境、验证依赖提供辅助功能
重启策略如果允许重启,会持续尝试直到成功根据 Pod 的 restartPolicy 处理重启

选择合适的容器类型

选择初始化容器还是边车容器取决于您的具体需求:

  • 如果需要在应用容器启动前执行一次性任务,选择初始化容器
  • 如果需要在应用容器整个生命周期内提供辅助功能,选择边车容器

实际应用案例

初始化容器案例:数据库迁移

apiVersion: v1
kind: Pod
metadata:name: database-migration
spec:containers:- name: appimage: my-app# 主应用容器配置initContainers:- name: schema-migrationimage: migration-toolcommand: ["migrate", "--database", "$(DATABASE_URL)"]env:- name: DATABASE_URLvalue: postgresql://user:password@postgres:5432/db

在这个案例中,初始化容器在应用启动前执行数据库迁移,确保数据库架构是最新的。

边车容器案例:日志收集

apiVersion: v1
kind: Pod
metadata:name: logging-pod
spec:containers:- name: appimage: my-appvolumeMounts:- name: logsmountPath: /var/log/app- name: log-collectorimage: fluentdvolumeMounts:- name: logsmountPath: /fluentd/logreadOnly: truevolumes:- name: logsemptyDir: {}

在这个案例中,边车容器从主应用容器收集日志,并可能将其转发到中央日志聚合系统。
Understanding Init Containers and Sidecar Containers in Kubernetes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87936.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87936.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87936.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线Debugger攻防全解:原理剖析与突破之道

引言​​ 在Web安全防护体系中,反调试技术已成为对抗爬虫和分析的关键武器。2023年OWASP报告显示,Top 1000网站中92%部署了反调试机制,其中​​无线Debugger技术​​(也称为无限Debug)因其难以破解的特性,…

Eslint自定义规则使用

文章目录 前言场景设定:维护代码分层,禁止“跨级调用”实现步骤:从零到一,创建你的第一条自定义规则**第 1 步:创建规则文件****第 2 步:在 eslint.config.mjs 中注册并启用你的规则** 验证成果 前言 设计…

深入剖析Spring Cloud Gateway,自定义过滤器+断言组合成拦截器链实现Token认证

一、Spring Cloud Gateway网关的整体架构 Spring Cloud Gateway 是 Spring Cloud 官方推出的网关解决方案,旨在替代 Netflix Zuul 1.x。其底层基于 Spring WebFlux Reactor 模型 构建,具备响应式、异步非阻塞的高性能特点。 1. 整体架构图 ----------…

VMware Workstation Pro下Centos 7.9 安装

背景系统安装方案1、VMware安装    1.1、下载    1.2、安装 2、Centos 7.9 安装    2.1 、Centos7.9 iso 下载    2.2、使用VMware 安装    2.2.1、VMware配置虚拟机    2.2.2、Linux安装 结语 背景 本文所在专栏的所有文章基于Centos7.9系统来演示,系…

我做个一个APP叫【图影工具箱】:一站式解决视频提取音频和加水印的鸿蒙神器

在数字内容创作和日常使用手机的过程中,提取视频音频、处理图片和视频水印是一大需求。许多人在寻找合适的软件时,往往试遍各种工具却仍无法满足需求。所以,我做了一款应用 —— 图影工具箱,一站式解决这些令人头疼的问题。 图影…

【StarRocks系列】查询语句执行全流程

目录 StarRocks 查询数据流程详解 1. 提交查询语句 2. FE 解析与优化 3. 选择 BE 节点与数据路由 4. BE 数据读取与计算 5. 结果返回 关键优化点总结 示例流程 流程图 StarRocks 查询数据流程详解 StarRocks 采用分布式 MPP 架构,查询流程涉及 FE&#xff…

HarmonyOS 5的分布式通信矩阵是如何工作的?

HarmonyOS 5 的分布式通信矩阵通过多层级技术协同实现跨设备高效协同,其核心工作机制如下: 一、核心架构:分布式软总线 3.0‌ ‌动态拓扑感知‌ 设备自动发现并构建最优传输路径(如手机与智慧屏优先采用 Wi-Fi P2P 直连&#xf…

自定义Django rest_framework中response的示例

在实际项目开发中,原有框架的response可能并不能完全满足我们的需求。比如我们需要定义一些更加详细的RESULT_CODE来说明情况。那么我们就可以基于原有的response进行自定义。 下面是一个自定义Django rest_framework中response的示例 # -*- coding:utf-8 -*- imp…

如何开发HarmonyOS 5的分布式通信功能?

以下是基于HarmonyOS 5开发分布式通信功能的完整技术指南,涵盖核心流程与关键代码实现: 一、开发前置配置 权限声明‌ 在module.json5中添加分布式权限: {"module": {"requestPermissions": [{"name": &quo…

Linux --静态库和动态库的制作和原理

本章重点: 动静态库的制作,使用和查找 可执行程序ELF格式 可执行程序的加载过程 虚拟地址空间和动态库加载的过程 动静态库的制作,使用和查找 1.在了解库的制作之前,我们首先需要知道什么是库。库是写好的现有的,成…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | IncrementingCounter(递增计数器)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— IncrementingCounter组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup&g…

简约求职简历竞聘工作求职PPT模版共享

简历竞聘&#xff0c;自我介绍&#xff0c;个人简历&#xff0c;工作求职PPT模版&#xff0c;岗位竞聘求职简历PPT模版&#xff0c;低调绿自我介绍PPT模版&#xff0c;简约求职简历PPT模版&#xff0c;个人介绍PPT模版&#xff0c;我的简历PPT模版&#xff0c;个人求职简介PPT模…

Java大厂面试攻略:Spring Boot与微服务架构深度剖析

问题一&#xff1a;Spring Boot 的自动配置原理是什么&#xff1f; 简洁面试回答&#xff1a; Spring Boot 的自动配置基于条件化配置&#xff0c;通过 Conditional 注解实现&#xff0c;根据项目中依赖和环境自动装配 Bean。 详细解析&#xff1a; Spring Boot 自动配置的核…

Windows核心端口攻防全解析:135、139、445端口的技术内幕与安全实践

Windows核心端口攻防全解析&#xff1a;135、139、445端口的技术内幕与安全实践 引言&#xff1a;Windows网络通信的命脉 在Windows网络生态系统中&#xff0c;135、139和445端口犹如网络通信的"大动脉"&#xff0c;承载着关键的系统服务和网络功能。这些端口不仅是…

从生活场景学透 JavaScript 原型与原型链

一、构造函数&#xff1a;以 “人” 为例的对象工厂 1. 生活场景下的构造函数定义 我们以 “人” 为场景创建构造函数&#xff0c;每个人都有姓名、年龄等个性化属性&#xff0c;也有人类共有的特征&#xff1a; // 人类构造函数 function Person(name, age) {this.name na…

学c++ cpp 可以投递哪些岗位

此次描述知识针对应届生来说哈&#xff0c;如果是社招&#xff0c;更多是对于你目前从事的方向&#xff0c;技术栈进行招聘就好了。 此次编写是按照boss上岗位筛选的方式进行编写的&#xff0c;其实投简历一般也是用boss&#xff0c;后面也会出一篇文章给大家介绍一般找工作都用…

【Docker基础】Docker镜像管理:docker rmi、prune详解

目录 引言 1 Docker镜像管理概述 1.1 为什么需要镜像清理&#xff1f; 1.2 镜像生命周期管理 2 docker rmi命令详解 2.1 基本语法 2.2 常用选项 2.3 删除单个镜像 2.4 删除多个镜像 2.5 强制删除镜像 2.6 删除所有镜像 3 docker rmi工作原理 3.1 镜像删除流程 3.…

57-Oracle SQL Profile(23ai)实操

在上一期中说到了SQL Tuning Advisor其中一个影响对象就是SQL Profile&#xff0c;同样在管理和应用开发中,SQL性能优化是个任重道远的工作&#xff0c;低效的SQL语句让应用响应缓慢,用户整体体验下降,拖垮搞蹦整个系统都有可能。Oracle数据库提供了多种组合工具&#xff0c;有…

man的使用

man的使用 文章目录 man的使用基本用法&#xff1a;常见 man 命令操作&#xff1a;man 命令的章节&#xff1a;示例&#xff1a; man 是 Linux 和 macOS 系统中的命令&#xff0c;用于查看命令和程序的手册页&#xff08;manual pages&#xff09;。手册页包含了关于命令、函…

【蓝牙】手机连接Linux系统蓝牙配对,Linux Qt5分享PDF到手机

要实现手机连接 A40i Linux 系统并通过蓝牙接收 PDF 文件&#xff0c;可以按照以下步骤操作&#xff1a; 1. 配置 Linux 蓝牙功能 确保开发板上的蓝牙模块已正确驱动并支持蓝牙协议栈。 安装蓝牙工具&#xff1a; bash sudo apt install bluetooth bluez bluez-tools 启动蓝…