k8s系列:pod

Pod

  • 概念:多个docker的集合,有一个pause容器,其他容器共享这个容器的网络栈和存储,这样多个应用可以实现本地访问其他应用。
  • 分类
    • 自主式pod(不是被控制器管理的pod)
    • 控制器管理的pod

Pod控制器

  • Replication Controller/ ReplicaSet / Deployment

RC保证容器应用的副本始终保持在用户定义的副本数,如果容器异常,自动创建新的pod替代,异常多出来的容器也会自动回收。

RS相比RC多了集合式的selector。

Deployment支持滚动更新。

  • StatefullSet
  • DaemonSet

pod网络通讯模式

  • 同个pod多个容器之间:同过共享pause容器,使用lo回环网卡即可。
  • pod之间:overlay network。
  • pod与service之间:节点之间的iptable规则。

下图展示了利用flann eld组件进行转发的原理图,flanneld可以使整个网络扁平化:

  1. 假如webapp2想要访问backend,怎么同过内网ip进行通信?
  • 首先webApp2发送数据到docker0
  • docker0数据经过flannel0网桥转发
  • flanneld存放有etcd的数据信息,会对数据包进行封装,如右图所示,首先写入目标主机mac地址,然后写入目标主机和本机的内网ip,通过udp协议传输到目标主机。
  • 目标flanneld接受到数据包,进行逆向解封

Q:etcd想flannel提供了什么数据?
A:1.存储管理flannel可分配的ip地址段资源。2.flannel监控每个pod的实际地址,在内存中建立维护pod节点路由表。

  1. pod到Service的网络
    目前基于性能考虑。全部为LVS维护和转发。

  2. pod到外网

pod向外网发送请求,查找路由表,转发数据包到宿主机网卡,宿主机网卡完成路由选择后,iptables执行masquerade,把源ip更改为宿主网卡的ip,然后向往往服务器发送请求。

  1. 外网访问pod:通过Service