author:魏静崎
2025年4月26日
K8s学习
来源:学习b站薪享宏福Kubernetes课程
Pod
Pod是K8s中部署的最小单位,每个Pod都会有一个Pause容器。
Pod是一种逻辑概念,不是真实存在的。Pod中所有用户容器(即非Pause容器)都是Pause的子进程,因此Pod是一种概念,其实体是一个Pause容器,其子容器是其他用户容器。
Pause容器
是Pod内部第一个启动的容器,因为需要其初始化网络栈和挂在需要的存储卷,也用于回收僵尸进程。
其他容器和pause是共享namespace的,包括Network、PID、IPC。
共享网络即可以通过localhost的方式访问到其他容器(一般耦合度高才会在一个pod中),为了成为一号进程有权利回收僵尸进程,因此要共享PID和IPC看到其他的进程信息。
K8s网络
K8s的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中。这在GCE中是现成的网络模型,但在私有云中需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行K8s。
网络原则:
在不使用网络地址转换 (NAT) 的情况下,集群中的 Pod 能够与任意其他 Pod 进行通信。
在不使用网络地址转换 (NAT) 的情况下,在集群节点上运行的程序能与同一节点上的任何 Pod 进行通信。
每个 Pod 都有自己的 IP 地址(IP-per-Pod),并且任意其他 Pod 都可以通过相同的这个地址访问它。
实现:借助CNI标准,通过插件化的方式实现各种网络查件,CNI插件通常聚焦在容器到容器的网络通信。
k8s节点默认的CNI插件路径为/opt/cni/bin,CNI 通过 JSON 格式的配置文件来描述网络配置,当需要设置容器网络时,由容器运行时负责执行 CNI 插件。
从网络插件功能可以分为五类:
Main 插件,创建具体网络设备
IPAM 插件:负责分配IP地址
META 插件:其他功能的插件
Windows 插件:专门用于 Windows 平台的 CNI 插件
第三方网络插件:第三方开源的网络插件众多,每个组件都有各自的优点及适应的场景
大概是目前最主流的网络解决方案 - calico:是一个纯三层的虚拟网络,它没有复用 docker 的 docker0 网桥,而是自己实现的,calico 网络不对数据包进行额外封装,不需要 NAT 和端口映射。
架构:VXLAN、IPIP、BGP
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2025/04/26/K8s学习-1 Pod/
- 版权声明: 该文章来源及最终解释权归作者所有