Pod概念与机制

Pod 概念

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod 是一组(一个或多个) 容器, 这些容器共享存储/network。

In terms of Docker concepts, a Pod is similar to a group of Docker containers with shared namespaces and shared filesystem volumes.


Pod的使用

  • 运行单容器的Pod,最常见的用法
  • 运行多个容器的Pod。耦合性高与需要共享资源的一组容器组。是一种高级场景的用法,比较少用

使用Deployment创建Pod

Deployment为Pod提供了一个声明式定义方法

  • 滚动升级与回滚版本
  • 扩容与缩容(增加或者减少Pod的数量)
# 1.手动扩容或缩容
# 2.利用HPA(Horizontal Pod Autoscaling),根据Deployment使用的资源,如CPU与内存,改变Pod的数量
  • 暂停和继续Deployment

Pod的网络通讯

每一个 Pod 被分配一个独立的 IP 地址。Pod 中的所有容器共享一个网络名称空间:


Pod内部(容器之间)

  • 同一个 Pod 中的所有容器 IP 地址都相同
  • 同一个 Pod 中的不同容器不能使用相同的端口,否则会导致端口冲突
  • 同一个 Pod 中的不同容器可以通过 localhost:port 进行通信
  • 同一个 Pod 中的不同容器可以通过使用常规的进程间通信手段,例如 SystemV semaphores 或者 POSIX 共享内存

Pod中存在一个Pause的容器,Pod中的其他容器都使用container模式与Pause容器共享Network Namespace,与其共享IP、端口范围等。相当于同一个Pod内部的容器都是通过lo口进行通讯

# Master Node:
[root@centos1 yaml]# kubectl describe pods| grep Container
Containers:
    Container ID:   docker://2a9b19251c146b9797548d5a2804af11dca8cb7e63724528913c6b7500cb05f7
  ContainersReady   True 
  Normal  Pulled     38m   kubelet, centos2   Container image "nginx:1.8" already present on machine
[root@centos1 yaml]# 

# Worker Node
[root@centos2 ~]# docker ps | grep nginx
2a9b19251c14        0d493297b409                             "nginx -g 'daemon of…"   40 minutes ago      Up 39 minutes                           k8s_nginx_nginx-deployment-7cd7fc4dbf-bfwtw_default_e0fe2e2d-59f2-4035-8a05-66185fcf9022_0
fe3304b303f1        registry.aliyuncs.com/k8sxio/pause:3.2   "/pause"                 40 minutes ago      Up 40 minutes                           k8s_POD_nginx-deployment-7cd7fc4dbf-bfwtw_default_e0fe2e2d-59f2-4035-8a05-66185fcf9022_0
[root@centos2 ~]# 

[root@centos2 ~]# docker inspect fe3304b303f1| grep Network
            "NetworkMode": "none",
        "NetworkSettings": {
            "Networks": {
                    "NetworkID": "1ae8fa9fc1d71f66975c3a47581965244c07bda1162ccad59c14896b626253e5",
[root@centos2 ~]# 

[root@centos2 ~]# docker inspect 2a9b19251c14| grep Network
            "NetworkMode": "container:fe3304b303f1dcf7af23faae0a876207cf90682fd7651218e0ea50799ff6a507",
        "NetworkSettings": {
            "Networks": {}
[root@centos2 ~]# 

Pod-to-Pod

从 Pod 的视角来看,Pod 是在其自身所在的 network namespace 与同节点上另外一个 network namespace 进程通信。在Linux上,不同的 network namespace 可以通过 Virtual Ethernet Device 或 veth pair (两块跨多个名称空间的虚拟网卡)进行通信。为连接 pod 的 network namespace,可以将 veth pair 的一段指定到 root network namespace,另一端指定到 Pod 的 network namespace。每一组 veth pair 类似于一条网线,连接两端,并可以使流量通过。节点上有多少个 Pod,就会设置多少组 veth pair。下图展示了 veth pair 连接 Pod 到 root namespace 的情况:

在这里插入图片描述


此时,我们的 Pod 都有了自己的 network namespace,从 Pod 的角度来看,他们都有自己的以太网卡以及 IP 地址,并且都连接到了节点的 root network namespace。为了让 Pod 可以互相通过 root network namespace 通信,我们将使用 network bridge(网桥)。

Linux Ethernet bridge 是一个虚拟的 Layer 2 网络设备,可用来连接两个或多个网段(network segment)。网桥的工作原理是,在源于目标之间维护一个转发表(forwarding table),通过检查通过网桥的数据包的目标地址(destination)和该转发表来决定是否将数据包转发到与网桥相连的另一个网段。桥接代码通过网络中具备唯一性的网卡MAC地址来判断是否桥接或丢弃数据。

网桥实现了 ARP 协议,以发现链路层与 IP 地址绑定的 MAC 地址。当网桥收到数据帧时,网桥将该数据帧广播到所有连接的设备上(除了发送者以外),对该数据帧做出相应的设备被记录到一个查找表中(lookup table)。后续网桥再收到发向同一个 IP 地址的流量时,将使用查找表(lookup table)来找到对应的 MAC 地址,并转发数据包。

在这里插入图片描述


数据包的传递:Pod-to-Pod,同节点

在 network namespace 将每一个 Pod 隔离到各自的网络堆栈的情况下,虚拟以太网设备(virtual Ethernet device)将每一个 namespace 连接到 root namespace,网桥将 namespace 又连接到一起,此时,Pod 可以向同一节点上的另一个 Pod 发送网络报文了。下图演示了同节点上,网络报文从一个Pod传递到另一个Pod的情况。

image

1.Pod1 发送一个数据包到其自己的默认以太网设备 eth0。
2.对 Pod1 来说,eth0 通过虚拟以太网设备(veth0)连接到 root namespace
3.网桥 cbr0 中为 veth0 配置了一个网段。一旦数据包到达网桥,网桥使用ARP 协议解析出其正确的目标网段 veth1
4.网桥 cbr0 将数据包发送到 veth1
5.数据包到达 veth1 时,被直接转发到 Pod2 的 network namespace 中的 eth0 网络设备。

数据包的传递:Pod-to-Pod,跨节点

待续。。。

Pod-to-Service

待续。。。

Internet-to-Service

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值