如何在 Azure Kubernetes 服务上模拟可用区中断?

How to simulate Availability Zone Outage on Azure Kubernetes Service?

以下是我的查询:

  1. 如何在 Azure Kubernetes 服务上模拟可用区中断以验证传入流量切换是否已完成到另一个区域?

  2. 有什么方法可以确定哪个区域或哪个节点当前正在接收 Azure Kubernetes 服务上的传入请求?

不清楚您所说的验证传入流量切换是什么意思。没有流量切换,流量会转到当前可以响应请求的pods。您负责将副本分布到集群中的不同可用区。例如,如果您部署了一个具有两个副本的 Pod,一个在区域 1 中,另一个在区域 2 中,流量将流向两个副本,如果区域 1 出现故障,负载均衡器将仅将流量发送到区域 2 中的 Pod直到 1 区的 pod 回来。

  1. 一种简单的测试方法是停止或重新启动一个可用区中的 VM,然后检查您是否遇到停机时间。

  2. 正如我所说,它不是一次一个区域,如果您想要区域弹性,则需要在所有可用区域中部署副本,而这不是由 AKS 自动完成的。一种方法是在您的 Pod 上 configuring podAntiAffinity 以确保副本未部署在同一节点和同一可用区中。在 AKS 中,节点有一个包含区域编号的标签 topology.kubernetes.io/zone,您可以在 podAntiAffinity 规则中使用该标签。以下命令将为您提供具有不同区域的节点列表:

kubectl get nodes -o custom-columns=NAME:'{.metadata.name}',REGION:'{.metadata.labels.topology\.kubernetes\.io/region}',ZONE:'{metadata.labels.topology\.kubernetes\.io/zone}'

NAME                                REGION   ZONE
aks-nodepool1-34917322-vmss000000   eastus   eastus-1
aks-nodepool1-34917322-vmss000001   eastus   eastus-2
aks-nodepool1-34917322-vmss000002   eastus   eastus-3