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可以使整个网络扁平化:
- 假如webapp2想要访问backend,怎么同过内网ip进行通信?
- 首先webApp2发送数据到docker0
- docker0数据经过flannel0网桥转发
- flanneld存放有etcd的数据信息,会对数据包进行封装,如右图所示,首先写入目标主机mac地址,然后写入目标主机和本机的内网ip,通过udp协议传输到目标主机。
- 目标flanneld接受到数据包,进行逆向解封
Q:etcd想flannel提供了什么数据?
A:1.存储管理flannel可分配的ip地址段资源。2.flannel监控每个pod的实际地址,在内存中建立维护pod节点路由表。
pod到Service的网络
目前基于性能考虑。全部为LVS维护和转发。pod到外网
pod向外网发送请求,查找路由表,转发数据包到宿主机网卡,宿主机网卡完成路由选择后,iptables执行masquerade,把源ip更改为宿主网卡的ip,然后向往往服务器发送请求。
- 外网访问pod:通过Service