苏宁容器云基于Kubernetes和Contiv的网络架构技术实现
Posted 分布式实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了苏宁容器云基于Kubernetes和Contiv的网络架构技术实现相关的知识,希望对你有一定的参考价值。
AddNetwork(net NetworkConfig, rt RuntimeConf) (types.Result, error)
DelNetwork(net NetworkConfig, rt RuntimeConf) error
Kubelet接受到创建Pod请求
Kubelet 首先创建Pause容器,并生成network namespace
将配置namespace 请求到CNI Driver
CNI Driver(Contiv)根据具体配置调用具体的CNI插件
CNI Driver(Contiv)给pause容器配置namespace,并返回
容器Pod中的其他容器都是使用Pause容器网络
L2(VLAN)
L3(BGP)
Overlay(VXLAN)
Cisco SDN Solution(ACI)
Bandwidth,限制一个Application Group的整理网络资源使用。
Isolation,限制一个组的网络访问。
图中是多个Kubernetes Master架构。
图中所示Netmaster、Netplugin、Auth_proxy都是以容器形式存在的,网络链接方式通过Contianer link方式到pause容器。
Auth_proxy作为认证代理,提供基于RBAC认证,通过认证后,将请求转发给Netmaster。
在Contiv原生版本中,并不支持多Netmaster存在,我们多配置文件做了些修改,使Netmaster和Netplugin都是以DaemonSet资源形式存在。
Contiv开源版本中默认使用的OVS Driver,我们也做了改造,使其支持多网络驱动,比如SR-IOV,DPDK。
最后Kubernetes和Contiv的数据都会写到ectd分布式存储中。
利于运维或者研发调试修正问题
Deployment
Stateful set
Replica set
上图展示了Kubernetes创建Pod请求IP流程,由kubelet向Contiv Netplugin发起请求。
Contiv Netplugin整合Pod信息(Pod所属资源,所属资源副本数等信息)发送给Netmaster。
Netmaster根据Pod请求的网络信息分配一个IP与Mac返回给Netplugin,并在etcd中维护一个该Pod所属资源的ip-pool映射关系
Contiv Netplugin接收到IP Mac信息后,从网络命名空间(namespace)中配置ip/mac/GW,同时请求OVS创建好对应的port和interface。
最终Contiv Netplugin返回kubelet,网络配置完成。
Pod在发生异常退出(可能是被删除或者宿主机重启)进行重新调度时,Kubernetes会先删除异常Pod,Netmaster会把ip-pool中异常pod-ip设置成可用状态。
Netmaster会根据Pod所属资源期望副本数与etcd中该资源副本数作比较,确认该副本是重新调度,并把该资源ip-pool中可用IP分配给Pod。
Netplugin接收到IP信息继续创建Pod流程。
Contiv Netplugin整合Pod信息向Netmaster发起删除请求。
Netmaster根据Pod所属资源副本数确认是删除Pod操作,Netmaster会释放pod-ip,同时ip-pool中删除此IP。
若删除的Pod是该资源中最后一个副本,则Netmaster释放pod-ip,同时删除etcd中对该资源ip-pool的维护。
以上操作完成后Netplugin返回IP已释放信号,kubelet删除Pod、删除网络命名空间。
使用netlink包,通过unix socket和内核通信
使用tbf限速方式,直接将规则作用在ovs port上
使用OVS中Ingress方式
设置rate和burst
超过设置速率限制,直接简单丢弃
在新建资源时,labels增加io.contiv.net-group: groupb。
Group(app Group)中要关联对应的bandwidth policies。
如果关联bandwidth,则在创建port是,增加限速规则。
请求创建资源,在经过调度之后,请求创建Pod。
Kubelet负责维护和运行Pod。
Kubelet调用Contiv CNI接口,创建port。
在创建port中判断rate值和burst是否为空,如果为空,代表不设置QoS,如果为空,QoS规则会建立在具体的port上。
在openvswitch 2.8.0 以后版本,支持了 meter table限速。这也是我们以后改进的一个方向。
Contiv支持多种分布式存储,Consul、etcd等
Contiv默认仅支持etcdv2 client
预留fakestatedriver.go,支持扩展其它client
保持方法名称不变,使用clientv3重写clientv2方法。
SR-IOV技术是基于硬件的虚拟化解决方案
SR-IOV标准允许虚拟化高效共享PCIe设备
可以获取与本机媲美的性能
增加sriovd驱动目录
仿造FakeNetEpDriver设计sriovd驱动
需要重新修改Contivinit,以便在初始化Netplugin时,对SR-IOV进行初始化。
一个Netplugin仅支持一种驱动,但是同一集群内可以有多种网络驱动。
以上是关于苏宁容器云基于Kubernetes和Contiv的网络架构技术实现的主要内容,如果未能解决你的问题,请参考以下文章
腾讯基于Kubernetes的企业级容器云平台GaiaStack
快手基于 Kubernetes 与 Istio 的容器云落地实践