Kubernetes相关的名词解释Container(16)

什么是Container?

在 Kubernetes 中,Container(容器) 是一个核心概念,你可以将镜像(Image)类比为程序的“源代码”,而容器是这段“代码”运行时的进程。例如,一个 nginx:latest 镜像被运行时,就成为一个正在执行的容器。

容器是隔离的进程(通过 Linux Namespace 和 Cgroups 实现),包含独立的文件系统(由镜像提供)、资源限制和运行环境。

Container 的作用

  • 运行应用:容器封装应用及其依赖,确保环境一致性(开发、测试、生产环境一致)。

  • 资源隔离:通过 Cgroups 限制 CPU、内存等资源,避免进程间冲突。

  • 快速启停:容器比虚拟机更轻量,秒级启动和销毁,适合动态扩缩容。

  • 可移植性:镜像与容器解耦,使得应用可以跨平台(云、本地)运行。

Container 与容器运行时的关系

前面提到过容器运行时,比如containerd、docker、CRI-O等。容器运行时(Container Runtime) 是真正管理容器生命周期的组件,负责:

  • 拉取镜像(如从 Docker Hub)。

  • 创建/销毁容器(调用底层技术如 runc)。

  • 监控容器状态(如 CPU 使用率)。

Container 与镜像的关系

  • 镜像是静态模板
    镜像是一个只读文件,包含应用代码、依赖库、环境变量等(类似“安装包”)。例如,ubuntu:22.04 镜像包含一个最小化的 Ubuntu 系统。

  • 容器是动态实例
    容器基于镜像创建,运行时会在镜像顶层添加一个可写层(存储运行时数据)。多个容器可以共享同一个镜像(节省资源)。

  • 生命周期

    • 镜像通过 docker build 或 podman build 生成。

    • 容器通过 kubectl create 或 docker run 启动,停止后可写层默认销毁(除非使用持久化存储)。

总结图示

镜像(Image) → 容器运行时(Container Runtime) → 容器(Container)
  (只读模板)      (containerd/CRI-O/runc)         (运行时进程 + 可写层)

Pod 和 Container 的设计哲学

Pod 与业务独立性的关系

  • Pod 是 Kubernetes 的最小调度单元,但它的核心设计目标不是“一个 Pod 对应一个业务”,而是:
    “一个 Pod 封装一个或多个紧密耦合的容器,这些容器共享生命周期和资源,共同完成一个业务逻辑单元”。

    • 典型场景

      • 主容器 + Sidecar 容器:例如一个 Web 应用容器(主业务)和一个日志收集容器(Sidecar)。

      • 多容器协作:如一个 Pod 中同时运行应用容器和数据库代理容器(二者需直接通过 localhost 通信)。

    • 共享资源:Pod 内的容器共享网络命名空间(同一 IP)、存储卷(Volume)和 IPC 命名空间(可通过共享内存通信)。

一个 Pod 代表一个逻辑上的“服务实例”,它可能包含多个协作的容器来完成这个实例的功能。

Container 与应用独立性的关系

Container 是镜像的运行实例,它的设计目标是:
“一个 Container 封装一个独立的进程(应用),遵循单一职责原则”

  • 典型场景

    • 一个容器只运行一个主进程(如 Nginx、MySQL)。

    • 容器之间通过明确接口(如网络或 Volume)通信,避免内部状态依赖。

Pod 和 Container 的类比关系

  • Pod 像一台物理机,而 Container 像这台机器上运行的进程

    • 同一 Pod 的容器就像同一台机器上的进程,共享网络和存储,通过 localhost 直接通信。

    • 不同 Pod 的容器就像不同机器上的进程,需要通过 Service 或 Ingress 通信。

  • 为什么需要 Pod 这一层?
    因为有些“应用”需要多个进程(容器)紧密协作(例如需要共享本地文件或频繁本地通信),而容器本身是隔离的,Pod 提供了这种协作的抽象。

实际用例对比

场景正确设计错误设计原因
Web 应用 + 日志收集一个 Pod(主容器 + Logstash Sidecar 容器)两个独立 PodSidecar 需要共享主容器的日志文件
微服务 A 和 B两个独立 Pod(每个 Pod 一个容器)一个 Pod 两个容器微服务应独立扩缩容
Nginx + PHP-FPM一个 Pod(Nginx 容器 + PHP 容器)一个容器内运行两个进程违反单一职责,但需权衡运维复杂度

图例总结

下面用图例的方式加深一下容器运行时、容器、pod的关系。

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

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

相关文章

学习设计模式《四》——单例模式

一、基础概念 单例模式的本质【控制实例数目】; 单例模式的定义:是用来保证这个类在运行期间只会被创建一个类实例;单例模式还提供了一个全局唯一访问这个类实例的访问点(即GetInstance方法)单例模式只关心类实例的创建…

零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!

写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…

信奥中的数学

信奥赛的数学大纲 ps:知识点是其他小伙伴分享的,我现在在做一下系列视频 会逐步更新,希望大家支持喜欢。 1.基础数学 数论 整数和自然数 素数、合数和因数分解 最大公约数(GCD)和最小公倍数(LCM) 同余和取模运算 欧几里得算法 扩展欧几里得算法 中国…

PHP腾讯云人脸核身获取Access Token

参考腾讯云官方文档: 人脸核身 获取 Access Token_腾讯云 public function getAccessToken(){$data [appId > , //WBappid,https://cloud.tencent.com/document/product/1007/49634secret > ,grant_type > client_credential, //授权类型version > 1…

《作用域大冒险:从闭包到内存泄漏的终极探索》

“爱自有天意,天有道自不会让有情人分离” 大家好,关于闭包问题其实实际上是js作用域的问题,那么js有几种作用域呢? 作用域类型关键字/场景作用域范围示例全局作用域var(无声明)整个程序var x 10;函数作用…

为什么Makefile中的clean需要.PHONY

原因一:避免Makefile检查时间戳 前置知识:makefile在依赖文件没有改变时不会执行编译命令 #第一次执行,OK [rootVM-16-14-centos ~]# make g -E main.cc -o main.i g -S main.i -o main.s g -c main.s -o main.o g main.o -o main#第二…

垂直行业突围:工业软件在汽车、航空领域的 “破壁” 实践

在当今科技高速发展的时代,工业软件已悄然完成从通用工具到垂直行业 “战略武器” 的蜕变。特别是在汽车与航空这两大高端制造领域,工业软件的价值早已超越单纯的效率提升,成为关乎核心技术自主可控的关键要素,一场围绕工业软件的…

07.Python代码NumPy-排序sort,argsort,lexsort

07.Python代码NumPy-排序sort,argsort,lexsort 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望…

LVDS系列8:Xilinx 7系可编程输入延迟(一)

在解析LVDS信号时,十分重要的一环就是LVDS输入信号线在经过PCB输入到FPGA中后,本来该严格对齐的信号线会出现时延,所以需要在FPGA内部对其进行延时对齐后再进行解析。 Xilinx 7系器件中用于输入信号延时的组件为IDELAYE2可编程原语&#xff0…

AI驱动研发效率在中后台的实践

本文探讨了AI驱动的中后台前端研发实践, 涵盖设计出码、接口定义转换、代码拟合、自动化测试等多个环节,通过具体案例展示了AI技术如何优化研发流程并提升效率。特别是在UI代码编写和接口联调阶段,并提出了设计出码(Design to Cod…

【Rust 精进之路之第6篇-流程之舞】控制流:`if/else`, `loop`, `while`, `for` 与模式匹配初窥

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:让代码“活”起来——指令的流动 在前面的文章中,我们已经掌握了 Rust 的基础数据类型(标量和复合类型)以及如何通过变量绑定来存储和命名它们。这相当于我们准备好了程序…

C++ 表达式求值的基础(四十九)

1. 运算符的分类 1.1 按操作数个数 一元运算符(Unary) 作用于单个操作数: 取地址 &obj解引用 *ptr逻辑非 !b一元加减 x, -x递增递减 i, i-- 二元运算符(Binary) 作用于两个操作数: 算术运算 a b, a …

Three.js + React 实战系列 : 从零搭建 3D 个人主页

可能你对tailiwindcss毫不了解,别紧张,记住我们只是在学习,学习的是作者的思想和技巧,并不是某一行代码。 在之前的几篇文章中,我们已经熟悉了 Three.js 的基本用法,并通过 react-three-fiber 快速构建了一…

Kotlin实现Android应用保活方案

Kotlin实现Android应用保活优化方案 以下的Android应用保活实现方案,更加符合现代Android开发规范,同时平衡系统限制和用户体验。 1. 前台服务方案 class OptimizedForegroundService : Service() {private val notificationId 1private val channel…

windows拷贝文件脚本

1、新建脚本文件xxx.bat,名字任意,后缀未.bat即可,将以下内容拷贝进去,修改src和des为自己文件的目录即可。 echo off :: 设置字符集为UTF-8,命令窗口能正确显示中文字符。 chcp 65001 rem 读取当前目录并进入当前目…

Qt 核心库总结

Qt 核心库(QtCore) QtCore 是 Qt 框架的基础模块,提供非图形界面的核心功能,是所有 Qt 应用程序的基石。它包含事件循环、信号与槽、线程管理、文件操作、字符串处理等功能,适用于 GUI 和非 GUI 应用程序。本文将从入…

大模型相关面试问题原理及举例

大模型相关面试问题原理及举例 目录 大模型相关面试问题原理及举例Transformer相关面试问题原理及举例大模型模型结构相关面试问题原理及举例注意力机制相关面试问题原理及举例大模型与传统模型区别 原理:大模型靠海量参数和复杂结构,能学习更复杂模式。传统模型参数少、结构…

【AI+HR实战应用】用DeepSeek提升HR工作效能

用DeepSeek提升HR工作效能 一、AI 与 AIGC 简介二、DeepSeek 介绍三、使用 DeepSeek 的渠道及硬件要求四、使用 DeepSeek 的核心技巧五、AI 在人力资源的应用场景六、AI 绘画与多模态应用七、个人使用 AI 的能力层级八、企业拥抱 AI 的策略九、提示词管理的重要性 一、AI 与 AI…

Postgresql几个常用的json操作

将行记录转为jsonb row_to_json(表名或别名)将行记录集转为json数组 (jsonb) select json_agg(row_to_json(t) order by t.task_name) into v_next_taskfrom dyna_flow_task t where t.zidv_template_id and t.levelv_next_level ;访问json字段,用->…

ESP32学习与快速总结——5.系统存储

1.ESP32分区表 为什么ESP32要分区 00:34-- 简述:其他单片机生成文件少,功能少,而ESP32功能多,文件多 分区表各个文件简介 --7:31vscode查看分区表 --9:33ota通过idf.py menuconfi…