From ece24982dd96b2a719a82ab17a8a3f82f1c7a3b9 Mon Sep 17 00:00:00 2001 From: Guangwen Feng Date: Mon, 20 Mar 2023 16:45:07 +0800 Subject: [PATCH] [zh-cn] sync networking/virtual-ips.md Signed-off-by: Guangwen Feng --- .../docs/reference/networking/virtual-ips.md | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/content/zh-cn/docs/reference/networking/virtual-ips.md b/content/zh-cn/docs/reference/networking/virtual-ips.md index 04a3a55656ae8..6a3b47c44fe5e 100644 --- a/content/zh-cn/docs/reference/networking/virtual-ips.md +++ b/content/zh-cn/docs/reference/networking/virtual-ips.md @@ -13,10 +13,12 @@ weight: 50 -Kubernetes 集群中的每个{{< glossary_tooltip term_id="node" text="节点" >}}会运行一个 +Kubernetes {{< glossary_tooltip text="集群" term_id="cluster" >}}中的每个 +{{< glossary_tooltip text="节点" term_id="node" >}}会运行一个 [kube-proxy](/zh-cn/docs/reference/command-line-tools-reference/kube-proxy/) (除非你已经部署了自己的替换组件来替代 `kube-proxy`)。 @@ -77,15 +79,18 @@ to use as-is. 本文中的一些细节会引用这样一个例子: -运行了 3 个 Pod 副本的无状态图像处理后端工作负载。 +运行了 3 个 {{< glossary_tooltip text="Pod" term_id="pod" >}} +副本的无状态图像处理后端工作负载。 这些副本是可互换的;前端不需要关心它们调用了哪个后端副本。 即使组成这一组后端程序的 Pod 实际上可能会发生变化, 前端客户端不应该也没必要知道,而且也不需要跟踪这一组后端的状态。 @@ -107,8 +112,6 @@ Note that the kube-proxy starts up in different modes, which are determined by i - The ConfigMap parameters for the kube-proxy cannot all be validated and verified on startup. For example, if your operating system doesn't allow you to run iptables commands, the standard kernel kube-proxy implementation will not work. - Likewise, if you have an operating system which doesn't support `netsh`, - it will not run in Windows userspace mode. --> 注意,kube-proxy 会根据不同配置以不同的模式启动。 @@ -116,7 +119,6 @@ Note that the kube-proxy starts up in different modes, which are determined by i - kube-proxy 的 ConfigMap 不支持配置的实时重新加载。 - kube-proxy 不能在启动时验证和检查所有的 ConfigMap 参数。 例如,如果你的操作系统不允许你运行 iptables 命令,标准的 kube-proxy 内核实现将无法工作。 - 同样,如果你的操作系统不支持 `netsh`,它也无法在 Windows 用户空间模式下运行。 -在这种模式下,kube-proxy 监视 Kubernetes 控制平面,获知对 Service 和 EndpointSlice 对象的添加和删除操作。 +在这种模式下,kube-proxy 监视 Kubernetes +{{< glossary_tooltip text="控制平面" term_id="control-plane" >}},获知对 Service 和 EndpointSlice +{{< glossary_tooltip text="对象" term_id="object" >}}的添加和删除操作。 对于每个 Service,kube-proxy 会添加 iptables 规则,这些规则捕获流向 Service 的 `clusterIP` 和 `port` 的流量, 并将这些流量重定向到 Service 后端集合中的其中之一。 对于每个端点,它会添加指向一个特定后端 Pod 的 iptables 规则。 @@ -238,7 +244,7 @@ iptables 模式的 kube-proxy 在更新内核中的规则时可能要用较长 [`iptables` 节](/zh-cn/docs/reference/config-api/kube-proxy-config.v1alpha1/#kubeproxy-config-k8s-io-v1alpha1-KubeProxyIPTablesConfiguration)中的选项来调整 kube-proxy 的同步行为: -```none +```yaml ... iptables: minSyncPeriod: 1s @@ -255,11 +261,13 @@ attempts to resynchronize iptables rules with the kernel. If it is every time any Service or Endpoint changes. This works fine in very small clusters, but it results in a lot of redundant work when lots of things change in a small time period. For example, if you have a -Service backed by a Deployment with 100 pods, and you delete the +Service backed by a {{< glossary_tooltip term_id="deployment" text="Deployment" >}} +with 100 pods, and you delete the Deployment, then with `minSyncPeriod: 0s`, kube-proxy would end up removing the Service's Endpoints from the iptables rules one by one, for a total of 100 updates. With a larger `minSyncPeriod`, multiple -Pod deletion events would get aggregated together, so kube-proxy might +Pod deletion events would get aggregated +together, so kube-proxy might instead end up making, say, 5 updates, each removing 20 endpoints, which will be much more efficient in terms of CPU, and result in the full set of changes being synchronized faster. @@ -267,7 +275,8 @@ full set of changes being synchronized faster. `minSyncPeriod` 参数设置尝试同步 iptables 规则与内核之间的最短时长。 如果是 `0s`,那么每次有任一 Service 或 Endpoint 发生变更时,kube-proxy 都会立即同步这些规则。 这种方式在较小的集群中可以工作得很好,但如果在很短的时间内很多东西发生变更时,它会导致大量冗余工作。 -例如,如果你有一个由 Deployment 支持的 Service,共有 100 个 Pod,你删除了这个 Deployment, +例如,如果你有一个由 {{< glossary_tooltip text="Deployment" term_id="deployment" >}} +支持的 Service,共有 100 个 Pod,你删除了这个 Deployment, 且设置了 `minSyncPeriod: 0s`,kube-proxy 最终会从 iptables 规则中逐个删除 Service 的 Endpoint, 总共更新 100 次。使用较大的 `minSyncPeriod` 值时,多个 Pod 删除事件将被聚合在一起, 因此 kube-proxy 最终可能会进行例如 5 次更新,每次移除 20 个端点, @@ -343,7 +352,8 @@ kube-proxy with `--feature-gates=MinimizeIPTablesRestore=true,…`. [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。 为了允许你为 Service 选择端口号,我们必须确保没有任何两个 Service 会发生冲突。 -Kubernetes 通过从为 API 服务器配置的 `service-cluster-ip-range` -CIDR 范围内为每个 Service 分配自己的 IP 地址来实现这一点。 +Kubernetes 通过从为 {{< glossary_tooltip text="API 服务器" term_id="kube-apiserver" >}} +配置的 `service-cluster-ip-range` CIDR 范围内为每个 Service 分配自己的 IP 地址来实现这一点。 这种对处于终止过程中的端点的转发行为使得 `NodePort` 和 `LoadBalancer` Service 能有条不紊地腾空设置了 `externalTrafficPolicy: Local` 时的连接。