POD
- 分类
- 自主式POD
- 控制器管理的POD
- 容器
- 每个容器独立存在,有自己的IP地址,如果有两个组件相互依赖,有两种解决方式
- 组件在一起,直接互相访问,local host访问,但违反隔离性原则
- 容器A采用容器B的网络栈
- 安全性问题
- 每个容器独立存在,有自己的IP地址,如果有两个组件相互依赖,有两种解决方式
- Pod
- 一个POD很多容器
- 共用POD网络栈
- 共用POD存储卷
- localhost互相访问,所以要求端口不能互相冲突
- 一个POD很多容器
POD控制器类型
- RC+RS+Deployment
- RS可取代RC
- RS额外支持集合式的selector
- RS不支持滚动更新(创建一个,删除一个),Deployment支持
- Deployment创建RS,RS来创建pod
- RS1停用,而不是删除,便于回滚
- HPA: 根据CPU利用率水平自动扩容
- SS
- 解决有状态服务问题
- 稳定化的持续化储存
- 稳定化的网络标示
- 有序部署,有序拓展
- 只是基础结构,不是全面解决有状态服务问题的方案
- docker:面对无状态服务(没有储存,需要去时时保留,摘出去放回去能正常工作)
- APACHE,负载均衡调度器
- APACHE,负载均衡调度器
DeamonSet
- 有且只有一个POD副本
Cron job
- 保证批处理任务的一个或多个Pod成功结束
服务发现
- 通过标签select
- RR算法(round robin)
- MYSQL通过SS部署,则通过名称固定到对应的POD上
- K8S 扁平化结构
网络通讯方式
- 所有POD处在扁平的网络空间
- 同一个POD内的多个容器之间:
- 共用基础容器的PAUSE的 lo(回环网卡),通过localhost访问
- 各个POD之间通讯: overlay network
- POD和svc之间的通讯:各节点的Iptables规则+IVS机制转发
- 允许通过某个接口实现各自网络方案
- 修改docker配置文件来修改分配网段
- 安装FlannelD守护进程,监听端口,转发和接收数据包的服务端口
- 启动进程,开启网桥Flannel0(路由表记录《记录转发机器》,通过ETCD来获取),收集Docker0发出的的数据包(hook)
- 网关Docker0分配自己IP到对应的POD上
- 通过docker0网桥转发,同一个网桥下面的子IP
封装报文,使用UDP数据报文来转发数据包,更快
分层拆包
私有网络,并不能在和物理机相连的网络内访问到,借助node port来映射
真实的物理的网络就一个:节点网络
其他虚拟网络,内部网络