cni / computing resource

This commit is contained in:
huanqing.shao
2019-09-08 20:41:47 +08:00
parent ca6359aa94
commit a5e9fb21a1
16 changed files with 294 additions and 23 deletions

View File

@ -1,5 +1,13 @@
<template>
<div id="vcomments" class="theme-default-content content__default"></div>
<div class="theme-default-content content__default">
<div style="padding: 10px;">
<span :id="$page.path" class="leancloud_visitors" :data-flag-title="$page.title">
<em class="post-meta-item-text">阅读量 </em>
<i class="leancloud-visitors-count">1000000</i>
</span>
</div>
<div id="vcomments"></div>
</div>
</template>
<script>
@ -20,7 +28,8 @@ export default {
appKey: 'jVhBid22mLeLr3ilPIcfWBBw', // your appKey
notify:false,
verify:false,
avatar:'mm',
avatar:'identicon',
visitor: window === undefined,
placeholder: 'just go go'
});
},

View File

@ -202,6 +202,7 @@ module.exports = {
// 'k8s-intermediate/service/dns',
// 'k8s-intermediate/service/connecting',
'k8s-intermediate/service/ingress',
'k8s-intermediate/service/cni',
]
},
{
@ -219,8 +220,8 @@ module.exports = {
collapsable: true,
children: [
'k8s-intermediate/config/config-map',
// 'k8s-intermediate/config/computing-resource',
// 'k8s-intermediate/config/assign-pod-node',
'k8s-intermediate/config/computing-resource',
'k8s-intermediate/config/assign-pod-node',
// 'k8s-intermediate/config/taints-and-toleration',
// 'k8s-intermediate/config/secret',
]

View File

@ -3,8 +3,8 @@
<slot name="top"/>
<Content class="theme-default-content"/>
<div style="text-align: center; margin-bottom: 10px;">
<a href="https://github.com/eip-work/kuboard-press" target="_blank">如果您觉得这篇文档有帮到您给个 Github Star谢谢</a>
<div style="text-align: center; margin-bottom: 10px; margin-bottom: -80px;">
<a href="https://github.com/eip-work/kuboard-press" target="_blank">如果您觉得这篇文档有帮到您点击此处给个 Github Star谢谢</a>
</div>
<Valine></Valine>
<footer class="page-edit">

View File

@ -62,11 +62,11 @@ Kuboard 是一款基于 Kubernetes 的微服务管理界面。
* [存储类 StorageClass](www.kuboard.cn/learning/k8s-intermediate/persistent/storage-class.html)
* [自建 NFS 服务](www.kuboard.cn/learning/k8s-intermediate/persistent/nfs.html)
* 配置
* [使用 ConfigMap 配置您的应用程序](www.kuboard.cn/learning/k8s-intermediate/config-map.html)
* [管理容器的计算资源](www.kuboard.cn/learning/k8s-intermediate/computing-resource.html)
* [将容器调度到指定的节点](www.kuboard.cn/learning/k8s-intermediate/assign-pod-node.html)
* [污点和容忍 taints and toleration](www.kuboard.cn/learning/k8s-intermediate/taints-and-toleration.html)
* [Secrets](www.kuboard.cn/learning/k8s-intermediate/secret.html)
* [使用 ConfigMap 配置您的应用程序](www.kuboard.cn/learning/k8s-intermediate/config/config-map.html)
* [管理容器的计算资源](www.kuboard.cn/learning/k8s-intermediate/config/computing-resource.html)
* [将容器调度到指定的节点](www.kuboard.cn/learning/k8s-intermediate/config/assign-pod-node.html)
* [污点和容忍 taints and toleration](www.kuboard.cn/learning/k8s-intermediate/config/taints-and-toleration.html)
* [Secrets](www.kuboard.cn/learning/k8s-intermediate/config/secret.html)
## **Kubernetes 实战**

View File

@ -45,17 +45,18 @@ description: Kubernetes 免费教程
* [Service/Pod 的 DNS](/learning/k8s-intermediate/service/dns.html) <Badge text="正在撰写" type="warn"/>
* [Service 连接应用程序](/learning/k8s-intermediate/service/connecting.html) <Badge text="正在撰写" type="warn"/>
* [Ingress 通过互联网访问您的应用](/learning/k8s-intermediate/service/ingress.html)
* [如何选择网络插件](/learning/k8s-intermediate/service/cni.html)
* 存储
* [数据卷 Volume](/learning/k8s-intermediate/persistent/volume.html)
* [存储卷 PV 和存储卷声明 PVC](/learning/k8s-intermediate/persistent/pv.html)
* [存储类 StorageClass](/learning/k8s-intermediate/persistent/storage-class.html)
* [自建 NFS 服务](/learning/k8s-intermediate/persistent/nfs.html) <Badge text="正在撰写" type="warn"/>
* 配置
* [使用 ConfigMap 配置您的应用程序](/learning/k8s-intermediate/config-map.html)
* [管理容器的计算资源](/learning/k8s-intermediate/computing-resource.html) <Badge text="正在撰写" type="warn"/>
* [将容器调度到指定的节点](/learning/k8s-intermediate/assign-pod-node.html) <Badge text="正在撰写" type="warn"/>
* [污点和容忍 taints and toleration](/learning/k8s-intermediate/taints-and-toleration.html) <Badge text="正在撰写" type="warn"/>
* [Secrets](/learning/k8s-intermediate/secret.html) <Badge text="正在撰写" type="warn"/>
* [使用 ConfigMap 配置您的应用程序](/learning/k8s-intermediate/config/config-map.html)
* [管理容器的计算资源](/learning/k8s-intermediate/config/computing-resource.html)
* [将容器调度到指定的节点](/learning/k8s-intermediate/config/assign-pod-node.html)
* [污点和容忍 taints and toleration](/learning/k8s-intermediate/config/taints-and-toleration.html) <Badge text="正在撰写" type="warn"/>
* [Secrets](/learning/k8s-intermediate/config/secret.html) <Badge text="正在撰写" type="warn"/>
## **Kubernetes 实战**

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -5,4 +5,76 @@ description: 在 Kubernetes 中,将 Pod 容器组调度到指定的节点
# 将容器组调度到指定的节点
正在撰写...
参考文档: Kubernetes 官网 [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)
## 概述
在 Kubernetes您可以限定 Pod 只能在特定的节点上运行,或者优先选择在特定的节点上运行。通常您并不需要这样做,而应该交由 kubernetes 调度程序根据资源使用情况自动地为 Pod 分配节点。但是少数情况下,这种限定仍然是必要的,例如:
* 确保某些 Pod 被分配到具有固态硬盘的节点
* 将相互通信频繁的两个 Pod 分配到同一个高可用区的节点
Kubernetes 一共提供了四种方法,可以将 Pod 调度到指定的节点上,这些方法从简便到复杂的顺序如下:
* 指定节点 nodeName <Badge text="Kuboard 已支持" type="success"/>
* 节点选择器 nodeSelector <Badge text="Kuboard 已支持" type="success"/> <Badge text="Kubernetes 推荐用法" type="error"/>
* Node isolation/restriction <Badge text="Kuboard 暂不支持" type="warn"/>
* Affinity and anti-affinity <Badge text="Kuboard 暂不支持" type="warn"/>
本文后续章节逐个描述了他们的用法
## 指定节点 nodeName
nodeName 是四种方法中最简单的一个但是因为它的局限性也是使用最少的。nodeName 是 PodSpec 当中的一个字段。如果该字段非空,调度程序直接将其指派到 nodeName 对应的节点上运行。
通过 nodeName 限定 Pod 所运行的节点有如下局限性:
* 如果 nodeName 对应的节点不存在Pod 将不能运行
* 如果 nodeName 对应的节点没有足够的资源Pod 将运行失败可能的原因有OutOfmemory /OutOfcpu
* 集群中的 nodeName 通常是变化的(新的集群中可能没有该 nodeName 的节点,指定的 nodeName 的节点可能从集群中移除)
### 在 Kuboard 中使用 nodeName
您在 Kuboard 工作负载编辑器中,可以通过 ***指定节点*** --> ***选择节点*** 按钮,选择对应 nodeName 的取值。如下图所示:
![image-20190908141039251](./assign-pod-node.assets/image-20190908141039251.png)
## 节点选择器 nodeSelector
nodeSelector 是 PodSpec 中的一个字段。指定了一组名值对。节点的 labels 中必须包含 Pod 的 nodeSelector 中所有的名值对,该节点才可以运行此 Pod。最普遍的用法中 nodeSelector 只包含一个名值对。
下面的步骤描述了如何在 Kuboard 中使用 nodeSelector
### 为节点增加标签 labels
* 从 Kuboard **集群概览** 界面进入您选定的节点界面
* 点击 ***编辑标签*** 按钮
增加标签 disk:ssd并保存如下图所示
![image-20190908152121423](./assign-pod-node.assets/image-20190908152121423.png)
### 为工作负载选择节点
* 在 Kuboard 界面进入工作负载所在的名称空间
* 点击您要编辑的工作负载,进入工作负载查看页
* 点击 ***编辑*** 按钮,进入工作负载编辑页
* 点击 **节点选择** --> **匹配节点** --> **选择标签** 按钮
选择 disk:ssd 标签,此时可以看到匹配的节点有刚才您添加标签的节点。点击 ***确定*** 按钮
![image-20190908152640876](./assign-pod-node.assets/image-20190908152640876.png)
* 点击 ***保存*** 按钮
此时您已完成了通过 nodeSelector 为 Pod 指定节点的任务。
## Node isolation/restriction <Badge text="Kuboard 暂不支持" type="warn"/>
请参考 Kubernetes 官网文档 [Node isolation/restriction](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-isolation-restriction)
## Affinity and anti-affinity <Badge text="Kuboard 暂不支持" type="warn"/>
请参考 Kubernetes 官网文档 [Affinity and anti-affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -5,4 +5,61 @@ description: 在 Kubernetes 中,管理和分配容器的计算资源
# 管理容器的计算资源
正在撰写...
参考文档: Kubernetes 官网 [Managing Compute Resources for Containers](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
## 概述
在 Kubernetes 中创建工作负载时,您可以为 Pod 中的每一个容器指定其所需要的内存RAM大小和 CPU 数量。如果这些信息被指定了Kubernetes 调度器可以更好的决定将 Pod 调度到哪一个节点。对于容器来说,其所需要的资源也将依据其指定的数值得到保证。
## 资源类型及计量
当我们讨论计算资源的时候,主要是指 CPU 和 内存。CPU 的计量单位是内核的单元数,内存的计量单位是 byte 字节数。应用程序可以按量请求、分配、消耗计算资源。
### CPU 的计量
在 Kubernetes 中1 个 CPU 代表:
* 1 AWS vCPU
* 1 GCP Core
* 1 Azure vCore
* 1 IBM vCPU
* 物理机上 Intel 超线程 CPU 的 1 个超线程Hyperthread
Kubernetes 中0.5 代表请求半个 CPU 资源。表达式 0.1 等价于 表达式 100m (英文读作 one hundred millicpu 或 one hundred millicores。在 API Server 中,表达式 0.1 将被转换成 100m精度低于 1m 的请求是不受支持的。 CPU 的计量代表的是绝对值,而非相对值,例如,您请求了 0.1 个 CPU无论您的节点是 单核、双核、48核您得到的 CPU 资源都是 0.1 核。
### 内存的计量
内存的计量单位是 byte 字节。您可以使用一个整数来表达内存的大小也可以使用后缀来表示E、P、T、G、M、K。您也可以使用 2 的幂数来表示内存大小其后缀为Ei、Pi、Ti、Gi、Mi、Ki。例如下面的几个表达方式所表示的内存大小大致相等
`128974848`, `129e6`, `129M`, `123Mi`
## 容器组及容器的计算资源请求及限制
Kubernetes 中,可以为容器指定计算资源的请求数量 request 和限制数量 limit。尽管资源的请求/限制数量只能在容器上指定,我们仍然经常讨论容器组的资源请求/限制数量。容器组的对某一个类型的资源请求/限制数量是该容器组中所有工作容器对该资源请求/限制数量的求和。
在 Kuboard 的工作负载编辑器中编辑容器资源请求及限制的界面如下图所示:
![image-20190908193257183](./computing-resource.assets/image-20190908193257183.png)
## 带有资源请求的容器组是如何调度的
当您创建 Pod 时直接创建或者通过控制器创建Kubernetes 调度程序选择一个节点去运行该 Pod。每一个节点都有一个最大可提供的资源数量CPU 数量和内存大小。调度程序将确保:对于每一种资源类型,已调度的 Pod 对该资源的请求之和小于该节点最大可供使用资源数量。
::: tip
尽管某个节点实际使用的CPU、内存数量非常低如果新加入一个 Pod 使得该节点上对 CPU 或内存请求的数量之和大于了该节点最大可供使用 CPU 或内存数量,则调度程序不会将该 Pod 分配到该节点。Kubernetes 这样做可以避免在日常的流量高峰时段,节点上出现资源短缺的情况。
:::
## 带有资源限制的容器组时如何运行的
Kubelet 启动容器组的容器时,将 CPU、内存的最大使用限制作为参数传递给容器引擎。
以 Docker 容器引擎为例:
* 容器的 cpu 请求将转换成 docker 要求的格式,并以 `--cpu-shares` 标志传递到 `docker run` 命令
* 容器的 cpu 限制将也将转换成 millicore 表达式并乘以 100。结果数字是每 100ms 的周期内,该容器可以使用的 CPU 份额
* 容器的内存限制将转换成一个整数,并使用 `--memory` 标志传递到 `docker run` 命令
如下情况可能会发生:
* 如果某个容器超出了其内存限制,它可能将被终止。如果 restartPolicy 为 Always 或 OnFailurekubelet 将重启该容器
* 如果某个容器超出了其内存申请(仍低于其内存限制),当节点超出内存使用时,该容器仍然存在从节点驱逐的可能性
* 短时间内容器有可能能够超出其 CPU 使用限制运行。kubernetes 并不会终止这些超出 CPU 使用限制的容器

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -0,0 +1,130 @@
# 如何选择网络插件
本文转载自: https://www.toutiao.com/a6708893686517727748/
原文作者:残花花败柳柳
本文将在介绍技术原理和相应术语的基础上再集中探索与详细对比目前最流行的CNI插件
- Flannel
- Calico
- Weave
# 介绍
网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求但在实现方面也具有一定的灵活性。因此业界已有不少不同的网络方案来满足特定的环境和要求。
CNI意为容器网络接口它是一种标准的设计为了让用户在容器创建或销毁时都能够更容易地配置容器网络。在本文中我们将集中探索与对比目前最流行的CNI插件Flannel、Calico、Weave和Canal技术上是多个插件的组合。这些插件既可以确保满足Kubernetes的网络要求又能为Kubernetes集群管理员提供他们所需的某些特定的网络功能。
# 背景
容器网络是容器选择连接到其他容器、主机和外部网络如Internet的机制。容器的Runtime提供了各种网络模式每种模式都会产生不同的体验。
例如Docker默认情况下可以为容器配置以下网络
- none将容器添加到一个容器专门的网络堆栈中没有对外连接。
- host将容器添加到主机的网络堆栈中没有隔离。
- default bridge默认网络模式。每个容器可以通过IP地址相互连接。
- 自定义网桥:用户定义的网桥,具有更多的灵活性、隔离性和其他便利功能。
Docker还可以让用户通过其他驱动程序和插件来配置更高级的网络包括多主机覆盖网络
CNI的初衷是创建一个框架用于在配置或销毁容器时动态配置适当的网络配置和资源。下面链接中的CNI规范概括了用于配制网络的插件接口这个接口可以让容器运行时与插件进行协调
```
https://github.com/containernetworking/cni/blob/master/SPEC.md
```
插件负责为接口配置和管理IP地址并且通常提供与IP管理、每个容器的IP分配、以及多主机连接相关的功能。容器运行时会调用网络插件从而在容器启动时分配IP地址并配置网络并在删除容器时再次调用它以清理这些资源。
运行时或协调器决定了容器应该加入哪个网络以及它需要调用哪个插件。然后插件会将接口添加到容器网络命名空间中作为一个veth对的一侧。接着它会在主机上进行更改包括将veth的其他部分连接到网桥。再之后它会通过调用单独的IPAMIP地址管理插件来分配IP地址并设置路由。
在Kubernetes中kubelet可以在适当的时间调用它找到的插件来为通过kubelet启动的pod进行自动的网络配置。
# 术语
在对CNI插件们进行比较之前我们可以先对网络中会见到的相关术语做一个整体的了解。不论是阅读本文还是今后接触到其他和CNI有关的内容了解一些常见术语总是非常有用的。
一些最常见的术语包括:
- **第2层网络**OSIOpen Systems Interconnections开放系统互连网络模型的“数据链路”层。第2层网络会处理网络上两个相邻节点之间的帧传递。第2层网络的一个值得注意的示例是以太网其中MAC表示为子层。
- **第3层网络**OSI网络模型的“网络”层。第3层网络的主要关注点是在第2层连接之上的主机之间路由数据包。IPv4、IPv6和ICMP是第3层网络协议的示例。
- **VXLAN**代表“虚拟可扩展LAN”。首先VXLAN用于通过在UDP数据报中封装第2层以太网帧来帮助实现大型云部署。VXLAN虚拟化与VLAN类似但提供更大的灵活性和功能VLAN仅限于4096个网络ID。VXLAN是一种封装和覆盖协议可在现有网络上运行。
- **Overlay网络**Overlay网络是建立在现有网络之上的虚拟逻辑网络。Overlay网络通常用于在现有网络之上提供有用的抽象并分离和保护不同的逻辑网络。
- **封装**封装是指在附加层中封装网络数据包以提供其他上下文和信息的过程。在overlay网络中封装被用于从虚拟网络转换到底层地址空间从而能路由到不同的位置数据包可以被解封装并继续到其目的地
- **网状网络**网状网络Mesh network是指每个节点连接到许多其他节点以协作路由、并实现更大连接的网络。网状网络允许通过多个路径进行路由从而提供更可靠的网络。网状网格的缺点是每个附加节点都会增加大量开销。
- **BGP**代表“边界网关协议”用于管理边缘路由器之间数据包的路由方式。BGP通过考虑可用路径路由规则和特定网络策略帮助弄清楚如何将数据包从一个网络发送到另一个网络。BGP有时被用作CNI插件中的路由机制而不是封装的覆盖网络。
了解了技术术语和支持各类插件的各种技术之后下面我们可以开始探索一些最流行的CNI插件了。
# CNI比较
**Flannel**
![kubernetes网络插件对比分析flannel、calico、weave](cni.assets/04c2db500e1b4b5dae3be817bfe6d673.jpeg)
```
链接https://github.com/coreos/flannel
```
由CoreOS开发的项目Flannel可能是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一旨在实现更好的容器间和主机间网络。随着CNI概念的兴起Flannel CNI插件算是早期的入门。
与其他方案相比Flannel相对容易安装和配置。它被打包为单个二进制文件FlannelD许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。Flannel可以使用Kubernetes集群的现有etcd集群来使用API存储其状态信息因此不需要专用的数据存储。
Flannel配置第3层IPv4 Overlay网络。它会创建一个大型内部网络跨越集群中每个节点。在此Overlay网络中每个节点都有一个子网用于在内部分配IP地址。在配置Pod时每个节点上的Docker桥接口都会为每个新容器分配一个地址。同一主机中的Pod可以使用Docker桥接进行通信而不同主机上的pod会使用flanneld将其流量封装在UDP数据包中以便路由到适当的目标。
Flannel有几种不同类型的后端可用于封装和路由。默认和推荐的方法是使用VXLAN因为VXLAN性能更良好并且需要的手动干预更少。
总的来说Flannel是大多数用户的不错选择。从管理角度来看它提供了一个简单的网络模型用户只需要一些基础知识就可以设置适合大多数用例的环境。一般来说在初期使用Flannel是一个稳妥安全的选择直到你开始需要一些它无法提供的东西。
**Calico**
![kubernetes网络插件对比分析flannel、calico、weave](cni.assets/79fa00ed4bcb4d9b94aee1d02b3c5c8c.jpeg)
```
链接https://github.com/projectcalico/cni-plugin
```
Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择但Calico以其性能、灵活性而闻名。Calico的功能更为全面不仅提供主机和pod之间的网络连接还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。
在满足系统要求的新配置的Kubernetes集群上用户可以通过应用单个manifest文件快速部署Calico。如果您对Calico的可选网络策略功能感兴趣可以向集群应用其他manifest来启用这些功能。
尽管部署Calico所需的操作看起来相当简单但它创建的网络环境同时具有简单和复杂的属性。与Flannel不同Calico不使用overlay网络。相反Calico配置第3层网络该网络使用BGP路由协议在主机之间路由数据包。这意味着在主机之间移动时不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包而无需额外在流量层中打包流量。
除了性能优势之外在出现网络问题时用户还可以用更常规的方法进行故障排除。虽然使用VXLAN等技术进行封装也是一个不错的解决方案但该过程处理数据包的方式同场难以追踪。使用Calico标准调试工具可以访问与简单环境中相同的信息从而使更多开发人员和管理员更容易理解行为。
除了网络连接外Calico还以其先进的网络功能而闻名。 网络策略是其最受追捧的功能之一。此外Calico还可以与服务网格Istio集成以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则描述Pod应如何发送和接受流量提高安全性并控制网络环境。
如果对你的环境而言支持网络策略是非常重要的一点而且你对其他性能和功能也有需求那么Calico会是一个理想的选择。此外如果您现在或未来有可能希望得到技术支持那么Calico是提供商业支持的。一般来说当您希望能够长期控制网络而不是仅仅配置一次并忘记它时Calico是一个很好的选择。
**Weave**
![kubernetes网络插件对比分析flannel、calico、weave](cni.assets/67b4097c58df478cb348ad50ea752f12.jpeg)
```
链接https://www.weave.works/oss/net/
```
Weave是由Weaveworks提供的一种Kubernetes CNI网络选项它提供的模式和我们目前为止讨论的所有网络方案都不同。Weave在集群中的每个节点之间创建网状Overlay网络参与者之间可以灵活路由。这一特性再结合其他一些独特的功能在某些可能导致问题的情况下Weave可以智能地路由。
为了创建网络Weave依赖于网络中每台主机上安装的路由组件。然后这些路由器交换拓扑信息以维护可用网络环境的最新视图。当需要将流量发送到位于不同节点上的Pod时Weave路由组件会自动决定是通过“快速数据路径”发送还是回退到“sleeve”分组转发的方法。
快速数据路径依靠内核的本机Open vSwitch数据路径模块将数据包转发到适当的Pod而无需多次移入和移出用户空间。Weave路由器会更新Open vSwitch配置以确保内核层具有有关如何路由传入数据包的准确信息。相反当网络拓扑不适合快速数据路径路由时sleeve模式可用作备份。它是一种较慢的封装模式在快速数据路径缺少必要的路由信息或连接的情况下它可以来路由数据包。当流量通过路由器时它们会了解哪些对等体与哪些MAC地址相关联从而允许它们以更少的跳数、更智能地路由后续流量。当网络更改导致可用路由改变时这一相同的机制可以帮助每个节点进行自行更正。
与Calico一样Weave也为Kubernetes集群提供网络策略功能。设置Weave时网络策略会自动安装和配置因此除了添加网络规则之外用户无需进行其他配置。一个其他网络方案都没有、Weave独有的功能是对整个网络的简单加密。虽然这会增加相当多的网络开销但Weave可以使用NaCl加密来为sleeve流量自动加密所有路由流量而对于快速数据路径流量因为它需要加密内核中的VXLAN流量Weave会使用IPsec ESP来加密快速数据路径流量。
对于那些寻求功能丰富的网络、同时希望不要增加大量复杂性或管理难度的人来说Weave是一个很好的选择。它设置起来相对容易提供了许多内置和自动配置的功能并且可以在其他解决方案可能出现故障的场景下提供智能路由。网状拓扑结构确实会限制可以合理容纳的网络的大小不过对于大多数用户来说这也不是一个大问题。此外Weave也提供收费的技术支持可以为企业用户提供故障排除等等技术服务。
# **结语**
Kubernetes采用的CNI标准让Kubernetes生态系统中的网络解决方案百花齐放。更多样的选择意味着大多数用户将能够找到适合其当前需求和部署环境的CNI插件同时还可以在环境发生变化时也能找到新的解决方案。
不同企业之间的运营要求差异很大因此拥有一系列具有不同复杂程度和功能丰富性的成熟解决方案大大有助于Kubernetes在满足不同用户独特需求的前提下仍然能够提供一致的用户体验。

View File

@ -139,17 +139,18 @@ Kuboard 为 Kubernetes 初学者设计了如下学习路径:
* [Service/Pod 的 DNS](/learning/k8s-intermediate/service/dns.html) <Badge text="正在撰写" type="warn"/>
* [Service 连接应用程序](/learning/k8s-intermediate/service/connecting.html) <Badge text="正在撰写" type="warn"/>
* [Ingress 通过互联网访问您的应用](/learning/k8s-intermediate/service/ingress.html)
* [如何选择网络插件](/learning/k8s-intermediate/service/cni.html)
* 存储
* [数据卷 Volume](/learning/k8s-intermediate/persistent/volume.html)
* [存储卷 PV 和存储卷声明 PVC](/learning/k8s-intermediate/persistent/pv.html)
* [存储类 StorageClass](/learning/k8s-intermediate/persistent/storage-class.html)
* [自建 NFS 服务](/learning/k8s-intermediate/persistent/nfs.html) <Badge text="正在撰写" type="warn"/>
* 配置
* [使用 ConfigMap 配置您的应用程序](/learning/k8s-intermediate/config-map.html)
* [管理容器的计算资源](/learning/k8s-intermediate/computing-resource.html) <Badge text="正在撰写" type="warn"/>
* [将容器调度到指定的节点](/learning/k8s-intermediate/assign-pod-node.html) <Badge text="正在撰写" type="warn"/>
* [污点和容忍 taints and toleration](/learning/k8s-intermediate/taints-and-toleration.html) <Badge text="正在撰写" type="warn"/>
* [Secrets](/learning/k8s-intermediate/secret.html) <Badge text="正在撰写" type="warn"/>
* [使用 ConfigMap 配置您的应用程序](/learning/k8s-intermediate/config/config-map.html)
* [管理容器的计算资源](/learning/k8s-intermediate/config/computing-resource.html)
* [将容器调度到指定的节点](/learning/k8s-intermediate/config/assign-pod-node.html)
* [污点和容忍 taints and toleration](/learning/k8s-intermediate/config/taints-and-toleration.html) <Badge text="正在撰写" type="warn"/>
* [Secrets](/learning/k8s-intermediate/config/secret.html) <Badge text="正在撰写" type="warn"/>
* **Kubernetes 实战**