专栏名称: 分布式实验室
最专业的Docker文章,最权威的Docker新闻。关注容器生态圈的发展。
目录
相关文章推荐
zartbot  ·  从AI落地的视角看看Infra的需求 ·  昨天  
zartbot  ·  从AI落地的视角看看Infra的需求 ·  昨天  
51好读  ›  专栏  ›  分布式实验室

黑客级Kubernetes网络指南

分布式实验室  · 公众号  · 后端  · 2017-05-02 07:45

正文

请到「今天看啥」查看全文



  • 硬件交换:当前大多数NIC都已经支持单节点 I/O虚拟化(SR-IOV),这也是创建虚拟设备的一种方式。每个虚拟的设备都将自己显示为单独的PCI设备。它可以拥有自己的VLAN和硬件强制的QoS关联。SR-IOV提供裸机性能,但通常再公共云中不可用。



  • 虚拟网络模式:虚拟桥、多路复用和 SR-IOV。


    在很多场景下,用户希望可以创建跨越多个L2/3网段的逻辑网络子网。这需要覆盖封装协议(最常见的VXLAN,它将网路进一步包装成UDP的数据包)。VXLAN可能会引入更多的网络开销,而且由于控制中缺乏标准化,来自不同供应商的多个VXLAN网络通常不能互相操作。


    Kubernetes还广泛使用IPTABLES和NAT来拦截流量,并将其路由到相应的物理目标。像Flannel,Calico和Weave使用Veth与桥接/路由器和覆盖或者路由/NAT的操作作为容器网络的解决方案。


    有关各种Linux网络选项,请参与这个很好的实践教程和使用指南(http://suo.im/JGwKn)。


    除了预期的数据包操作额外开销外,虚拟网络增加了隐藏的成本,可能会对CPU和内存并行行造成负面的影响,例如:


    • NIC根据报文的消息头将流量引入到内核中。如果报文头发现变化,流量将引入错误的内核,从而降低内存和CPU的效率。


    • NIC构建数据包并在硬件上校验和卸载,从而节省大量的CPU和内存周期。如果重新包装数据是软件内置功能,或者我们在最顶层覆盖(Cloud/laaS).结果都会导致性能的下降。新的NIC可以在硬件中构建VXLAN数据包,但是封装的解决方案中必须使用它。


    一些应用程序(如Iguazio的)使用了先进的NIC功能,如RDMA,DPDK快速网络处理库或加密来卸载消息传递,对CPU的并行性进行更严格的控制,减少中断或消除内存副本。这只能在使用直接网络接口或SR-IOV虚拟接口时使用。


    玩转POD网络


    没有简单的方法可以看到网络的命名空间,因为Kubernetes和Docker并没有注册它们(“ip netns”将不会与Kubernetes和Docker一起使用)。但是我们还是可以用一些黑科技从主机上查看、调试、管理和配置POD网络。


    网络命名空间在/proc/ /ns/net 可以查看,所以我们需要从我们的POD中找到进程ID(PID)。首先,通过以下命令可以找到容器ID,注意只取前12个数字。







    请到「今天看啥」查看全文