【深入剖析K8s】第五章 1 为什么我们需要Pod

Docker容器存在的问题

Docker容器的本质: '''Namespace做隔离,Cgroups做限制,rootfS做文件系统"。 我们为啥需要Pod?

bash 复制代码
# 展示当前系统中正在运行的进程的树状结构
pstree -g

在一个真正的操作系统里,是以进程组的方式'有原则"地组织在---起。

容器的单进程模型,并不是指容器里只能运行''一个"进程,而是指容器无法管理多个进程。这是因为容器里PID=1的进程就是应用本身,其他进程都是这个PlD=1进程的子进程。

  • 容器的资源调度上,对于超亲密关系的容器的调度存在难度。
  • Pod在Kubemetes项目里还有更重要的意义'那就是容器设计模式

多容器的Pod

所有"超亲密关系"的容器都属于同一个Pod。可以把容器间的这种紧密协作称为超亲密关系。这些具有'超亲密关系"的容器的典型特征包括但不限于:

  • 互相之间会发生直接的文件交换、
  • 使用localhost或者Sockct文件进行本地通信
  • 发生非常频繁的远程调用
  • 需要共享某些LinuxNamespace(比如---个容器要加人另---
    个容器的NetworkNamespace)

Pod 如何被创建

Pod其实是---组共享了某些资源的容器。Pod里的所有容器都共享---个Network Namespace,并且可以声明共享同一个Volume。

如此看来---个有A、B两个容器的Pod不就等同于一个容器(容器A)共享另外---个容器(容器B)的网络和Volume的做法吗?

bash 复制代码
docker run --net=B --volumes-from=B --name=A image-A

如果真这样做的话,容器B就必须比容器A先启动'这样一个Pod里的多个容器就不是对等关系。

在Kubemetes项目里'Pod的实现需要使用---个中间容器'这个容器叫作Infra容器。在这个Pod中Infra容器永远是第---个被创建的容器,用户定义的其他容器则通过Jojn Network Namespace的方式与Infra容器关联在---起。

Infra容器---定要占用极少的资源,所以它使用的是---个非常特殊的镜像'

叫作k8s.gcr.io/pause。这个镜像是---个用汇编语言编写的,永远处于"暂停',状态的容器

网络、Volume 都是真的Pod 来定义的。Kubemetes项目只要把所有Volume的定义都设计在Pod层级即可。

Pod这种'超亲密关系"容器的设计思想'实际上就是希望,当用户想在一个容器里运行多个功能无关的应用时,应该优先考虑它们是否更应该被描述成---个Pod里的多个容器。

举例说明Pod

1

两个容器都挂载了shared-data 的Volume。

这就是nginx-container 可以从它的/usr/share/ngjnx/html目录中读取到debian-container 生成的 indexhtml文件的原因。

2

在Pod中所有Init Container定义的容器'都会比speccontainers定义的用户容器先启动。并且Init Container容器会按顺序逐一启动,而直至它们都启动并且退出了,用户容器才会启动。

我执行了---句cp /sample.war /app,把应用的WAR包复制到/app目录下'然后退出

而后这个/app目录就挂载了一个名叫app-volume的Volume。

等Tomcat容器启动时,它的webapps目录下就---定会存在sample.war文件:这个文件正是WAR包容器启动时复制到这个Volume里面的,而这个Volume是被这两个容器共享的。

相关推荐
我是谁??2 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson2 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
运维瓦工2 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Plastic garden3 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden3 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
与海boy3 小时前
docker compose minio
docker·容器·eureka
星辰徐哥4 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
武子康4 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
heimeiyingwang5 小时前
【架构实战】分布式会话:从Session到JWT的演进
微服务·云原生·架构