【每日一个云原生小技巧 #61】拓扑感知路由

拓扑感知路由(Topology Aware Routing)是Kubernetes中的一个特性,它通过在集群中保持网络流量原始区域的优先级来优化路由行为。这个特性在Kubernetes 1.23版本中被标记为beta状态,并且在1.27版本之前被称为拓扑感知提示(Topology Aware Hints)。

使用场景和优势

拓扑感知路由主要用于多区域部署的Kubernetes集群。它有助于保持流量在原始区域内部,这可以减少成本或提高网络性能。特别是在以下情况下效果最佳:

  1. 流量均匀分布:如果大部分流量来自单一区域,这可能会导致该区域的端点过载。
  2. 每个区域有3个或更多端点:在三区域集群中,这意味着至少有9个端点。

配置方法

拓扑感知路由的配置包括以下几个步骤:

  1. 启用拓扑感知提示:这需要在服务上设置service.kubernetes.io/topology-aware-hints注解为auto,这指示EndpointSlice控制器在安全时设置拓扑提示。
  2. 定义拓扑键:在Kubernetes资源(如Pod或Service)中定义拓扑键,如topology.kubernetes.io/zonetopology.kubernetes.io/region,以便Kubernetes理解集群的结构。
  3. 实现节点亲和性和反亲和性:这些设置控制Pod相对于其他节点的调度和放置,对于优化应用性能和弹性至关重要。

示例代码

以下是一些配置拓扑感知路由的示例:

Pod配置示例

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: "topology.kubernetes.io/zone"
            operator: In
            values:
            - us-east-1a

服务定义示例

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  topologyKeys:
    - "topology.kubernetes.io/zone"

监控和优化

监控和优化拓扑感知路由对于维护Kubernetes部署的效率和可靠性至关重要。可以使用如Prometheus和Grafana等Kubernetes监控工具来跟踪拓扑感知部署的性能,并根据监控结果调整拓扑键或亲和性/反亲和性规则。