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

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的关系。

相关文章:

  • Linux:进程:进程控制
  • AI软件栈:LLVM分析(六)
  • Shell脚本-变量的分类
  • 计算机组成与体系结构:内存接口(Memory Interface)
  • Linux学习笔记|入门指令
  • python生成动态库在c++中调用
  • 基于Spring Boot实现文件秒传的完整方案
  • Hibernate的组件映射
  • RPA系统应用通用文字识别技术,推动 RPA 在各个领域的广泛应用和发展
  • 信奥中的数学
  • 进程与线程:03 用户级线程
  • 系分论文《论数据中台建设的分析和应用》
  • HADOOP 3.4.1安装和搭建(尚硅谷版~)
  • uv运行一个MCP Server的完整流程
  • XAttention
  • 人工智能100问☞第9问:什么是AI芯片?
  • 基于SpringBoot的高校体育馆场地预约管理系统-项目分享
  • 理性决策与情绪偏差
  • 永磁同步电机参数辨识算法--递推最小二乘法辨识
  • 让专业更轻盈,让启蒙更智能——特伦斯便携钢琴V30Pro
  • 中国全国政协-越南祖国阵线中央暨边境省份组织第三次友好交流活动在南宁开幕
  • 西安一男子在闲鱼卖手机卷入电诈案,不愿前往异地接受调查被列网逃
  • 新任遂宁市委副书记王忠诚已任市政府党组书记
  • 商务部:支持“来数加工”等新业态新模式,发展游戏出海业务
  • 群内“分享”侵权书籍电子版,培训公司被判赔偿出版社2万元
  • 分离19年后:陈杨梅首度露面,父亲亲手喂棉花糖给女儿吃