FEATURE STATE: Kubernetes v1.23 [beta]
拓扑感知提示 包含客户怎么使用服务端点的建议,从而实现了拓扑感知的路由功能。 这种方法添加了元数据,以启用 EndpointSlice 和/或 Endpoints 对象的调用者, 这样,访问这些网络端点的请求流量就可以在它的发起点附近就近路由。
例如,你可以在一个地域内路由流量,以降低通信成本,或提高网络性能。
“拓扑感知提示”特性处于 Beta 阶段,并且默认情况下未启用。 要试用此特性,你必须启用
TopologyAwareHints
特性门控。
Kubernetes 集群越来越多的部署到多区域环境中。 拓扑感知提示 提供了一种把流量限制在它的发起区域之内的机制。 这个概念一般被称之为 “拓扑感知路由”。 在计算 服务(Service) 的端点时, EndpointSlice 控制器会评估每一个端点的拓扑(地域和区域),填充提示字段,并将其分配到某个区域。 集群组件,例如kube-proxy 就可以使用这些提示信息,并用他们来影响流量的路由(倾向于拓扑上相邻的端点)。
你可以通过把注解 service.kubernetes.io/topology-aware-hints
的值设置为 auto
, 来激活服务的拓扑感知提示功能。 这告诉 EndpointSlice 控制器在它认为安全的时候来设置拓扑提示。 重要的是,这并不能保证总会设置提示(hints)。
此特性启用的功能分为两个组件:EndpointSlice 控制器和 kube-proxy。 本节概述每个组件如何实现此特性。
此特性开启后,EndpointSlice 控制器负责在 EndpointSlice 上设置提示信息。 控制器按比例给每个区域分配一定比例数量的端点。 这个比例来源于此区域中运行节点的 可分配 CPU 核心数。 例如,如果一个区域拥有 2 CPU 核心,而另一个区域只有 1 CPU 核心, 那控制器将给那个有 2 CPU 的区域分配两倍数量的端点。
以下示例展示了提供提示信息后 EndpointSlice 的样子:
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: example-hints
labels:
kubernetes.io/service-name: example-svc
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "10.1.2.3"
conditions:
ready: true
hostname: pod-1
zone: zone-a
hints:
forZones:
- name: "zone-a"
kube-proxy 组件依据 EndpointSlice 控制器设置的提示,过滤由它负责路由的端点。 在大多数场合,这意味着 kube-proxy 可以把流量路由到同一个区域的端点。 有时,控制器从某个不同的区域分配端点,以确保在多个区域之间更平均的分配端点。 这会导致部分流量被路由到其他区域。
Kubernetes 控制平面和每个节点上的 kube-proxy,在使用拓扑感知提示功能前,会应用一些保护措施规则。 如果没有检出,kube-proxy 将无视区域限制,从集群中的任意节点上选择端点。
topology.kubernetes.io/zone
, 或没有上报可分配的 CPU 数据,控制平面将不会设置任何拓扑感知提示, 继而 kube-proxy 也就不能通过区域过滤端点。
externalTrafficPolicy
或 internalTrafficPolicy
设置值为 Local
时, 拓扑感知提示功能不可用。 你可以在一个集群的不同服务中使用这两个特性,但不能在同一个服务中这么做。
Windows节点的安全性本页介绍特定于Windows操作系统的安全注意事项和最佳实践。保护节点上的机密数据在Windows上,来自Secrets的...
垃圾收集垃圾收集是Kubernetes用于清理集群资源的各种机制的统称。垃圾收集允许系统清理如下资源:失败的Pod已完成的Job不再存在...
Kubernetes系统组件指标通过系统组件指标可以更好地了解系统组个内部发生的情况。系统组件指标对于构建仪表板和告警特别有用。Ku...
定制资源资源(Resource)是KubernetesAPI中的一个端点,其中存储的是某个类别的API对象的一个集合。例如内置的pods资源包含一组...
调试Init容器此页显示如何核查与Init容器执行相关的问题。下面的示例命令行将Pod称为pod-name,而Init容器称为init-contai...