1、任何cluster成员更改 都会在集群中每一个成员上同步 2、每一个子的cluster都是全量数据
通过DNS路由解析
数据都是共通的 按距离访问即可
4层负载 比如LVS 7层负载 比如Nginx
核心概念
pod 模版
k8s就一个大厨 pod模版是厨具
label:单进程一样就好了
控制器是最重要的
Deployment是长期服伺型
该类型代表 程序是一直运行在后台的 不会被杀死的
线上用的最多
Nginx Deployment
要求:Metadata 一定要全局唯一
K8S网络
1、Node独立IP段 1-254之间 2、node中pod的独立ip为10.1.1.0/24 24表示前面的24个字节(bytes)是子网掩码 3、pod中有dokcer容器,容器共享独立ip
四种模式
- 单机
单机所有应用程序只能访问127.0.0.1即无网模式
- host
Host模式 pod共享宿主机网络 导致的问题
要求pod1必须开公网权限 只能把node1这台机器的公网全部都打开 没有办法对每一个pod或对pod中的容器做操作 安全风险很高 host模式和宿主机直接共享网卡 eth0 安全性非常不好
- bridge
1、bridge docker原生模式其实就是一个net 2、宿主机本身有一个网卡 eth0 Docker demon 开一个网桥 docker0网桥 一方面连接物理网卡 另一方面连接pod pod里面有虚拟网卡 这个虚拟网卡会和docker0连接起来 有很多pod 都会共享docker这个网桥 3、有了docker网桥 每个pod都会有自己独立的ip 不需要共享宿主机的ip 4、bridge模式 网桥 dokcer0 (名字可以随便指定 docker1…) 5、Docker container中的eth0和veth通讯 6、网桥就是一个配置命令 不需要安装任何软件 无非就是套一个dokcer网桥就可以了
这是一个二层网络 没有办法做三层通信
所谓三层通信就是没有办法做网络虚拟化的 sdn是VXLAN技术 是一个三层网络 在多个机房之间就可以直接通信了
虚拟化模式
Web APP Frontend1如何访问Backend Service2的?
1、flannel是软件虚拟网络 就需要安装一个程序flannelid 虚拟化软件用来虚拟化网络的 在每台node上都需要安装 2、flannel将ip封装 之前都是二层网络 Flannel这块是三层网络 3、首先无缝经过网桥转换 包一层ip和port(源ip和目的ip) 传给物理链路的网卡 又包一层ip和port 传给另外一个物理链路网卡解掉一层 传给flannel 又解掉一层然后docker网卡
经过2层包装 传输效率很低
容器间怎么通信
容器间通讯
Ip1 不需要知道pod ip2的ip 在路由器(交换机)上都有配置
同一个node的pod间通信
pod1首先和网桥docker0通信 然后和本地网卡通信 另外一个机器的网卡通信 这是bridge模式
CNI
1、cni是网络规范 具体是通过bridge模式走 还是overlay模式做还是dhcp 2、执行add方法目的无非就是拿到一个ip 删除执行del把ip还回原来的地方 3、K8S-CNI默认提供了dhcp cni网络插件 集成dhcp服务器 比如分配了100个ip到dhcp中 每个pod重启的时候通过cni从dhcp中取一个ip 一旦不用则会还回去
后记
后续会继续介绍容器云的实践