从零最先入门 K8s | 理解 CNI 和 CNI 插件

来源:http://www.popupad.cn 时间:03-22 07:24:58

原标题:从零最先入门 K8s | 理解 CNI 和 CNI 插件

永寿复讶汽配零售有限公司

作者 | 溪恒 阿里巴巴高级技术行家

本文清理自《CNCF x Alibaba 云原生技术公开课》第 26 讲,点击直达课程页面。

关注“阿里巴巴云原生”公多号,回复关键词“入门”,即可下载从零入门 K8s 系列文章 PPT。

导读:网络架构是 K8s 中较为复杂的方面之一。K8s 网络模型本身对某些特定的网络功能有着必定的请求,因此,业界已经有了不少的网络方案来已足特定的环境和请求。CNI 意为容器网络的 API 接口,为了让用户在容器创建或烧毁时都能够更容易地配置容器网络。在本文中,作者将带领行家理解典型网络插件地做事原理、掌握 CNI 插件的行使。

最先吾们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。

它是 K8s 中标准的一个调用网络实现的接口。Kubelet 经过这个标准的 API 来调用分歧的网络插件以实现分歧的网络配置手段,实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。

K8s 经过 CNI 配置文件来决定行使什么 CNI。

基本的行使手段为:

详细的流程如下图所示:

在集群内里创建一个 Pod 的时候,最先会经过 apiserver 将 Pod 的配置写入。apiserver 的一些管控组件(比如 Scheduler)会调度到某个详细的节点上往。Kubelet 监听到这个 Pod 的创建之后,会在本地进走一些创建的操作。当实走到创建网络这一步骤时,它最先会读取刚才吾们所说的配置现在录中的配置文件,配置文件内里会声明所行使的是哪一个插件,然后往实走详细的 CNI 插件的二进制文件,再由 CNI 插件进入 Pod 的网络空间往配置 Pod 的网络。配置完善之后,Kuberlet 也就完善了整个 Pod 的创建过程,这个 Pod 就在线了。

行家能够会觉得上述流程有许多步(比如要对 CNI 配置文件进走配置、安置二进制插件等等),望首来比较复杂。

但倘若吾们只是行为一个用户往行使 CNI 插件的话就比较浅易,由于许多 CNI 插件都已挑供了一键安置的能力。以吾们常用的 Flannel 为例,如下图所示:只必要吾们行使 kubectl apply Flannel 的一个 Deploying 模板,它就能自动地将配置、二进制文件安置到每一个节点上往。

安置完之后,整个集群的 CNI 插件就安置完善了。

因此,倘若吾们只是往行使 CNI 插件的话,那么其实许多 CNI 插件已经挑供了一键安置的脚本,无需行家关心 Kubernetes 内部是如何配置的以及如何调用 API 的。

社区有许多的 CNI 插件,比如 Calico, flannel, Terway 等等。那么在一个真实详细的生产环境中,吾们要选择哪一个 CNI 插件呢?

这就要从 CNI 的几栽实现模式说首。吾们必要根据分歧的场景选择分歧的实现模式,再往选择对答的详细某一个插件。

清淡来说,CNI 插件能够分为三栽:Overlay、路由及 Underlay。

晓畅了以上三栽常用的实现模式之后,再根据本身的环境、需求判定可由哪一栽模式进走实现,再在对答的模式中往找 CNI 插件。不过社区中有那么多插件,它们又都属于哪栽模式?如何进走选择呢?怎么挑选正当本身的呢?吾们能够从以下 3 个方面来考虑。

1. 环境局限

分歧环境中所声援的底层能力是分歧的。

环境局限考虑完之后,吾们心中答该都有一些选择了,清新哪些能用、哪些不及用。在这个基础上,吾们再往考虑功能上的需求。

2. 功能需求

K8s 声援 NetworkPolicy,就是说吾们能够经过 NetworkPolicy 的一些规则往声援“Pod 之间是否能够访问”这类策略。但不是每个 CNI 插件都声援 NetworkPolicy 的声明,倘若行家有这个需求,能够选择声援 NetworkPolicy 的一些插件,比如 Calico, Weave 等等。

行家的行使最初都是在虚拟机或者物理机上,容器化之后,行使无法一下就完善迁移,因此就必要传统的虚拟机或者物理机能跟容器的 IP 地址互通。为了实现这栽互通,就必要两者之间有一些打通的手段或者直接位于联相符层。此时能够选择 Underlay 的网络,比如 sriov 这栽就是 Pod 和以前的虚拟机或者物理机在联相符层。吾们也能够行使 calico-bgp,此时它们固然不在联相符网段,但能够经过它往跟原有的路由器做一些 BGP 路由的一个发布,云云也能够打通虚拟机与容器。

K8s 的服务发现与负载平衡就是吾们前线所介绍的 K8s 的 Service,常见问题但并不是一切的 CNI 插件都能实现这两栽能力。比如许多 Underlay 模式的插件,在 Pod 中的网卡是直接用的 Underlay 的硬件,或者经过硬件虚拟化插到容器中的,这个时候它的流量无法走到宿主机所在的命名空间,因此也无法行使 kube-proxy 在宿主机配置的规则。

这栽情况下,插件就无法访问到 K8s 的服务发现。因此行家倘若必要服务发现与负载平衡,在选择 Underlay 的插件时就必要仔细它们是否声援这两栽能力。

经过功能需求的过滤之后,能选的插件就很少了。经过环境局限和功能需求的过滤之后,倘若还剩下 3、4 栽插件,能够再来考虑性能需求。

3. 性能需求

吾们能够从 Pod 的创建速度和 Pod 的网络性能来衡量分歧插件的性能。

当吾们创建一组 Pod 时,比如营业高峰来了,需主要急扩容,这时比如说吾们扩容了 1000 个 Pod,就必要 CNI 插件创建并配置 1000 个网络资源。Overlay 和路由模式在这栽情况下的创建速度是很快的,由于它是在机器内里又做了虚拟化,于是只必要调用内核接口就能够完善这些操作。但对于 Underlay 模式,由于必要创建一些底层的网络资源,于是整个 Pod 的创建速度相对会慢一些。因此对于频繁需主要急扩容或者创建大批量的 Pod 这些场景,吾们答该尽量选择 Overlay 或者路由模式的网络插件。

主要外现在两个 Pod 之间的网络转发、网络带宽、PPS 迟误等这些性能指标上。Overlay 模式的性能较差,由于它在节点上又做了一层虚拟化,还必要往封包,封包又会带来一些包头的亏损、CPU 的消耗等,倘若行家对网络性能的请求比较高,比如说机器学习、大数据这些场景就不正当行使 Overlay 模式。这栽情形下吾们清淡选择 Underlay 或者路由模式的 CNI 插件。

置信行家经过这三步的挑选之后都能找到正当本身的网络插件。

未必社区的插件无法已足本身的需求,比如在阿里云上只能行使 vxlan 这栽 Overlay 的插件,而 Overlay 插件的性能相对较差,无法已足阿里云上的一些营业需求,于是阿里云上开发了一个 Terway 的插件。

倘若吾们本身的环境比较稀奇,在社区内里又找不到正当的网络插件,此时能够开发一个本身的 CNI 插件。

CNI 插件的实现清淡包含两个片面:

给 Pod 插上网线

那么如何实现第一步,给 Pod 插上网线呢?清淡是云云一个步骤:

1. 给 Pod 准备一个网卡

清淡吾们会用一个 "veth" 这栽虚拟网卡,一端放到 Pod 的网络空间,一端放到主机的网络空间,云云就实现了 Pod 与主机这两个命名空间的打通。

2. 给 Pod 分配 IP 地址

这个 IP 地址有一个请求,吾们在之前介绍网络的时候也有挑到,就是说这个 IP 地址在集群里必要是唯一的。如何保障集群内里给 Pod 分配的是个唯一的 IP 地址呢?

清淡来说吾们在创建整个集群的时候会指定 Pod 的一个大网段,根据每个节点往分配一个 Node 网段。比如说上图右侧创建的是一个 172.16 的网段,吾们再根据每个节点往分配一个 /24 的段,云云就能保障每个节点上的地址是互不冲突的。然后每个 Pod 再从一个详细的节点上的网段中再往挨次分配详细的 IP 地址,比如 Pod1 分配到了 172.16.0.1,Pod2 分配到了 172.16.0.2,云云就实现了在节点内里 IP 地址分配的不冲突,并且分歧的 Node 又分属分歧的网段,因此不会冲突。

云云就给 Pod 分配了集群内里一个唯一的 IP 地址。

3. 配置 Pod 的 IP 和路由

给 Pod 连上网络

刚才吾们是给 Pod 插上网线,也就是给它配了 IP 地址以及路由外。那怎么打通 Pod 之间的通信呢?也就是让每一个 Pod 的 IP 地址在集群内里都能被访问到。

清淡吾们是在 CNI Daemon 进程中往做这些网络打通的事情。清淡来说是云云一个步骤:

本文的主要内容就到此为止了,这边为行家浅易总结一下:

上云就望云栖号,点此查望更多:https://yqh.aliyun.com/?utm_content=g_1000100940

本文为阿里云内容,未经批准不得转载。

为支持新冠肺炎疫情期间建筑施工企业复工复产,有效推进三亚工程项目建设,三亚市日前面向三亚建筑施工企业中的疫期省外返琼复工人员开展补助申报工作,复工人员每人可获补助700元至1000元。(海南日报)

(原标题:虚拟货币第二波暴跌潮恐至 稳定币发行蜂拥而上难成“避风港”)

原标题:人生无常,愿你无憾

  原标题:发放消费券举措能否推广?发改委:支持地方结合实际推出务实管用的扩消费政策


发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?