从零入门K8s-人人都能看懂 Pod 与容器设计模式1

preview
需积分: 0 0 下载量 89 浏览量 更新于2022-08-03 收藏 1.46MB PDF 举报
:“从零入门K8s-人人都能看懂 Pod 与容器设计模式1” :“以此类推,容器镜像其实就是:这个操作系统的软件安装包再来看一个真实操作系统里的例子• 举例:helloworld 程序• helloworld 程序实际上是由一组进程(Linux 里的线程)组成” 在这个话题中,我们主要探讨的是 Kubernetes 中的 Pod 和容器设计模式。Pod 是 Kubernetes 中的基本构建块,它代表了运行在集群中的一个或多个紧密耦合的容器的逻辑单元。在深入讨论之前,我们先要理解容器的本质,它是一个被隔离且资源受限的进程,其PID(进程ID)为1的进程就是应用程序本身。 当我们把容器比作操作系统的进程时,Kubernetes 就像是云时代的操作系统,而容器镜像则相当于操作系统的软件安装包。以 helloworld 程序为例,它是由一组进程(在 Linux 中表现为线程)组成的,这些进程共享资源并协同工作。 思考 Pod 的角色,我们发现 Pod 实际上可以被视为“进程组”,就像在操作系统中进程和线程组一样。在 Kubernetes 中,Pod 中的容器可以共享网络栈、存储卷和其他资源,这对于那些需要紧密协作的应用程序组件至关重要。 在容器设计模式中,通常我们会遇到一个问题:如何在一个容器中运行多进程的应用,比如 helloworld 程序的多个子进程。传统的 Docker 容器设计是“单进程”模型,意味着容器内的 PID=1 进程通常是应用的主进程。如果要在同一个容器内运行 helloworld 的所有子进程,就需要应用本身具备进程管理能力或者将 PID=1 的进程改为如 systemd 这样的服务管理工具。但这违背了直接管理应用的初衷,即管理容器等于管理应用本身。 为了解决这个问题,Kubernetes 引入了 Pod 概念。Pod 包含一个或多个紧密相关的容器,它们共享网络命名空间、存储卷以及运行环境。这样,Pod 成为了 Kubernetes 的原子调度单位,确保了需要共享资源和紧密协作的容器能够一起被调度到同一台节点上。例如,一个 Pod 可能包含一个业务容器(App)和一个日志收集器容器(LogCollector),它们共同工作,业务容器负责写日志文件,日志收集器负责转发日志到 Elasticsearch 中。 Pod 的这种设计来源于 Google 的 Borg 系统,Borg 是大规模集群管理的先驱,其经验为 Kubernetes 的设计提供了灵感。在 Borg 中,很多应用都存在着类似“进程和进程组”的关系,它们需要部署在同一台机器上共享信息。因此,Pod 作为原生调度单位,保证了这种协作关系的保持,避免了因拆分到不同节点而导致的通信复杂性和效率降低。 总结来说,Kubernetes 中的 Pod 是为了管理和调度那些需要共享资源、协同工作的容器而设计的,它是容器化应用程序的逻辑集合,模拟了操作系统中的进程组概念。通过 Pod,Kubernetes 能够更好地支持多进程应用,并确保这些应用在集群中的高效部署和协调。理解 Pod 和容器设计模式对于理解和使用 Kubernetes 进行微服务架构的部署至关重要。
芊暖
  • 粉丝: 28
  • 资源: 339
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源