kubernetes macvlan 二层网络IP地址的管理插件

作者: admin 分类: kubernetes 发布时间: 2018-06-01 19:09 ė 6 没有评论

关于kubernetes下的容器网络实现方案有很多种,macvlan在要求网络性能较高的场景下比较适用, macvlan是Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。macvlan是一个简单的桥梁,不需要学习,因为它知道它可以接收的每个mac地址,因此它不需要实现学习或stp。 这使得它速度性能极高。

macvlan要考虑的要点是:

  1. macvlan往往比桥接更快,因为它跳过一大堆内核代码
  2. 使用macvlan时,主机将无法通过macvlan接口与容器通信,当然可以把物理网卡也添加为macvlan子接口,实现主机和虚拟机子接口通信
  3. 根据物理网卡的硬件限制,可能会限制macvlan设备的数量
  4. 调试macvlan相关问题可能非常困难,因为它在所有内核驱动程序和物理卡上的行为可能不同
  5. 如果没有任何限制会影响您的设置,那么请选择它。 如果您需要更多的灵活性,调试能力或更可重复的环境,桥接可能更为可取(openvswitch是优化性能的一种方法)。

我们选择了macvlan来部署容器服务,但是kubernetes cni的 macvlan IP地址管理很麻烦,需要给每个主机都分配一个范围的地址,并且需要在每个节点的/etc/cni/net.d下放一个配置文件,这样就造成了node节点过多,根本没办法维护的问题,如果不熟悉docker分配ip地址过程,请google(docker cni 与cnm),于是写了一个cni的plugin插件来管理,

实现过程:

  1.  部署etcd集群,可以直接使用kubernetes集群的etcd来做存储ip地址,我们将所有Node节点需要分配的地址统一中心化由etcd存储
  2.  下载https://github.com/xiaoqge/docker-Cni-Tdipam-plugin/releases的二进制文件
  3.  将二进制文件拷贝到kubernetes cni插件目录中 例如/opt/cni/bin。并且赋予可执行权限
  4.  删除/etc/cni/net.d下的所有conf文件,将https://github.com/xiaoqge/docker-Cni-Tdipam-plugin/blob/master/demo/10-macvlan.conf拷贝到/etc/cni/net.d,修改文件内容”master”: “ens33″, 这个ens33是本机node节点的网卡,修改”etcdcluster”: “http://127.0.0.1:4379,http://172.0.0.65:2379”, 将etcd地址修改为自己部署的etcd地址。
  5. IP初始化来确定容器IP的起始和结束范围,执行如下命令 
    "tdipam -init init -start 10.0.0.140 -end 10.0.0.150 -subnet 10.0.0.140/17 -gateway 10.0.0.254 -config /etc/cni/net.d/10-macvlan.conf", start是要给容器分配的ip地址起始,end是结束。 

 

请允许我做个广告,需要新疆库尔勒香梨/阿克苏苹果 当然技术交流也是没有任何问题的,扫描下方二维码加我微信:

 

本文出自 小Q,转载时请注明出处及相应链接。

本文永久链接: http://www.linuxqq.com/archives/1858.html

0
更多
Ɣ回顶部