cni k8s 插件安装_从零开始入门 K8s | 理解 CNI 和 CNI 插件

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:15   814   0
<div class="._5ce-wx-style" style="font-size:16px;">
<div class="rich_media_content" id="js_content">
  <p><img alt="992ff06f4db8a2b4a7f4d63b506c4c5c.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8b3685acdd5715fbec1e6a4e26915b7e.png"></p>
  作者 | 溪恒 阿里巴巴技术专家
  <p></p>
  关注“Go语言中文网”公众号,回复关键词
  <strong>“入门”</strong>
  ,即可下载从零入门 K8s 系列文章 PPT。
  <p><strong>导读:</strong>网络架构是 K8s 中较为复杂的方面之一。K8s 网络模型本身对某些特定的网络功能有着一定的要求,因此,业界已经有了不少的网络方案来满足特定的环境和要求。CNI 意为容器网络的 API 接口,为了让用户在容器创建或销毁时都能够更容易地配置容器网络。在本文中,作者将带领大家理解典型网络插件地工作原理、掌握 CNI 插件的使用。</p>
  <p><img alt="c9e3c3ade76978c14c68654befb37e89.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-1febab68e844ff9e1068b6e188545694.gif"></p>
  <p><strong>CNI 是什么</strong></p>
  首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。
  它是 K8s 中标准的一个调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式,实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。
  <p><img alt="c9e3c3ade76978c14c68654befb37e89.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-1febab68e844ff9e1068b6e188545694.gif"></p>
  <p><strong>Kubernetes 中如何使用 CNI</strong></p>
  K8s 通过 CNI 配置文件来决定使用什么 CNI。
  基本的使用方法为:
  
  <ul><li>首先在每个结点上配置 CNI 配置文件(/etc/cni/net.d/xxnet.conf),其中 xxnet.conf 是某一个网络配置文件的名称;</li><li>安装 CNI 配置文件中所对应的二进制插件;</li><li>在这个节点上创建 Pod 之后,Kubelet 就会根据 CNI 配置文件执行前两步所安装的 CNI 插件;</li><li>上步执行完之后,Pod 的网络就配置完成了。</li></ul>
  
  具体的流程如下图所示:
  
  <p><img alt="58f8bed8f5e86e77b5f0cc26e84f86c5.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4bcf0ac5040c445a1b61d06c97955400.png"></p>
  在集群里面创建一个 Pod 的时候,首先会通过 apiserver 将 Pod 的配置写入。apiserver 的一些管控组件(比如 Scheduler)会调度到某个具体的节点上去。Kubelet 监听到这个 Pod 的创建之后,会在本地进行一些创建的操作。
  
  当执行到创建网络这一步骤时,它首先会读取刚才我们所说的配置目录中的配置文件,配置文件里面会声明所使用的是哪一个插件,然后去执行具体的 CNI 插件的二进制文件,再由 CNI 插件进入 Pod 的网络空间去配置 Pod 的网络。配置完成之后,Kuberlet 也就完成了整个 Pod 的创建过程,这个 Pod 就在线了。
  大家可能会觉得上述流程有很多步(比如要对 CNI 配置文件进行配置、安装二进制插件等等),看起来比较复杂。
  但如果我们只是作为一个用户去使用 CNI 插件的话就比较简单,因为很多 CNI 插件都已提供了一键安装的能力。以我们常用的 Flannel 为例,如下图所示:只需要我们使用 kubectl apply Flannel 的一个 Deploying 模板,它就能自动地将配置、二进制文件安装到每一个节点上去。
  <p><img alt="714f97c72c44c3ec1a98dfa62841b7bf.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-422bf1ba0f54e2d2bb501bd16705a757.png"></p>
  安装完之后,整个集群的 CNI 插件就安装完成了。
  因此,如果我们只是去使用 CNI 插件的话,那么其实很多 CNI 插件已经提供了一键安装的脚本,无需大家关心 Kubernetes 内部是如何配置的以及如何调用 API 的。
  <p><img alt="c9e3c3ade76978c14c68654befb37e89.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-1febab68e844ff9e1068b6e188545694.gif"></p>
  <p><strong>哪个 CNI 插件适合我?</strong></p>
  社区有很多的 CNI 插件,比如 Calico, flannel, Terway 等等。那么在一个真正具体的生产环境中,我们要选择哪一个 CNI 插件呢?
   
  这就要从 CNI 的几种实现模式说起。我们需要根据不同的场景选择不同的实现模式,再去选择对应的具体某一个插件。
  通常来说,CNI 插件可以分为三种:Overlay、路由及 Underlay。
  <img alt="03fcbd138f4320dea7e8de35e4c0cef4.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-e5e2cd94f411c468ea34429747c0fde9.png">
   
  <ul><li>Overlay 模式的典型特征是容器独立于主机的 IP 段,这个 IP 段进行跨主机网络通信时是通过在主机之间创建隧道的方式,将整个容器网段的包全都封装成底层的物理
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP