你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
通过 Azure 门户创建使用 Chaos Mesh 故障来终止 AKS Pod 的 Chaos 试验
可以使用混沌试验,通过在受控环境中引发一些故障,来验证应用程序是否可以应对这些故障。 在本文中,你将使用混沌试验和 Azure Chaos Studio 在命名空间上定期引发 Azure Kubernetes 服务 (AKS) Pod 故障。 运行此实验可帮助你在发生偶发性故障时防止服务不可用。
Chaos Studio 使用 Chaos Mesh - 一个免费的开源混沌工程平台,可供 Kubernetes 用于将故障注入 AKS 群集。 Chaos Mesh 故障是要求将 Chaos Mesh 安装在 AKS 群集上的直接服务故障。 同样可以使用这些步骤来设置和运行针对任何 AKS Chaos Mesh 故障的试验。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
- 具有 Linux 节点池的 AKS 群集。 如果你没有 AKS 群集,请参阅使用 Azure CLI、Azure PowerShell 或 Azure 门户的 AKS 快速入门。
限制
- 可以通过在 Chaos Studio 中配置 VNet 注入将 Chaos Mesh 故障与专用群集配合使用。 向专用群集发出的任何命令(包括本文中设置 Chaos Mesh 的步骤)都需要遵循专用群集指南。 建议的方法包括从同一虚拟网络中的 VM 进行连接,或使用 AKS 命令调用功能。
- AKS Chaos Mesh 故障仅在 Linux 节点池上受支持。
- 如果 AKS 群集配置为仅允许授权的 IP 范围,则你需要允许 Chaos Studio 的 IP 范围。 可以通过使用“服务标记发现 API”或可下载的 JSON 文件查询
ChaosStudio
服务标记来查找这些范围。
在 AKS 群集上设置 Chaos Mesh
必须在 AKS 群集上安装 Chaos Mesh,然后才能在 Chaos Studio 中运行 Chaos Mesh 故障。
在 Azure Cloud Shell 窗口中运行以下命令,在此窗口中将活动订阅设置为在其中部署 AKS 群集的订阅。 请将
MyManagedCluster
和MyResourceGroup
分别替换为你的群集和资源组。az aks get-credentials --admin --name MyManagedCluster --resource-group MyResourceGroup
helm repo add chaos-mesh https://charts.chaos-mesh.org helm repo update kubectl create ns chaos-testing helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
通过运行以下命令来验证是否已安装 Chaos Mesh Pod:
kubectl get po -n chaos-testing
你应看到与以下示例类似的输出(一个混沌控制器管理器和一个或多个混沌守护程序):
NAME READY STATUS RESTARTS AGE chaos-controller-manager-69fd5c46c8-xlqpc 1/1 Running 0 2d5h chaos-daemon-jb8xh 1/1 Running 0 2d5h chaos-dashboard-98c4c5f97-tx5ds 1/1 Running 0 2d5h
在 AKS 群集上启用 Chaos Studio
Chaos Studio 无法针对资源注入故障,除非已先将该资源添加到 Chaos Studio。 可通过针对资源创建目标和功能,将资源添加到 Chaos Studio。 AKS 群集只有一种目标类型 (service-direct),但其他资源最多可能有两种目标类型。 一种目标类型用于服务直接故障。 另一种目标类型用于基于代理的故障。 每种类型的 Chaos Mesh 故障都以一项功能表示(例如 PodChaos、NetworkChaos 和 IOChaos)。
打开 Azure 门户。
在搜索栏中搜索“Chaos Studio”。
选择“目标”并转到你的 AKS 群集。
选中你的 AKS 群集旁边的复选框。 选择“启用目标”并从下拉菜单中选择“启用服务直接目标”。
确认列出了所需的资源。 选择“查看 + 启用”,然后选择“启用”。
此时会显示一条通知,指示已成功启用所选资源。
现已成功将 AKS 群集添加到 Chaos Studio。 在“目标”视图中,还可以管理对此资源启用的功能。 选择资源旁边的“管理操作”,以显示已为该资源只用的功能。
创建试验
现在,可以创建试验。 混沌试验定义了要针对目标资源执行的操作。 操作将按顺序组织并运行。 混沌试验还定义了要针对分支执行的操作(它们将并行运行)。
在 Chaos Studio 中选择“试验”选项卡。 在此视图中,可以查看和管理所有混沌试验。 选择“创建”>“新建试验”。
填写要在其中部署混沌试验的“订阅”、“资源组”和“位置” 。 为试验指定一个名称。 选择“下一步: 试验设计器”。
现在,你已位于 Chaos Studio 试验设计器中。 使用试验设计器,可以通过添加步骤、分支和故障来构建试验。 为步骤和分支指定一个友好名称,然后选择“添加操作”>“添加故障”。
从下拉列表中选择“AKS Chaos Mesh Pod Chaos”。 将“持续时间”填写为你希望故障持续的分钟数,并使用以下信息填写 jsonSpec:
规划你的 Chaos Mesh
jsonSpec
:参阅 Chaos Mesh 文档以查看故障类型,例如 PodChaos 类型。
使用 Chaos Mesh 文档来阐明该错误类型的 YAML 配置。
apiVersion: chaos-mesh.org/v1alpha1 kind: PodChaos metadata: name: pod-failure-example namespace: chaos-testing spec: action: pod-failure mode: all duration: '600s' selector: namespaces: - default
移除
spec
之外的任何 YAML(包括规范属性名称),并移除规范详细信息的缩进。duration
参数不是必需的,但如果提供,则会使用它。 在本例中,请将其删除。action: pod-failure mode: all selector: namespaces: - default
使用此类 YAML 到 JSON 转换器将 Chaos Mesh YAML 转换为 JSON 并将其最小化。
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
将最小化的 JSON 粘贴到门户中的 jsonSpec 字段。
选择“下一步: 目标资源”。
选择你的 AKS 群集并选择“下一步”。
验证你的试验是否正确,然后选择“查看 + 创建”>“创建”。
向 AKS 群集授予试验权限
创建混沌试验时,Chaos Studio 会创建系统分配的托管标识,用于针对目标资源执行故障。 若要成功运行试验,必须向此标识提供目标资源的适当权限。
转到你的 AKS 群集并选择“访问控制(IAM)”。
选择“添加”>“添加角色分配”。
搜索 Azure Kubernetes 服务群集管理员角色,然后选择该角色。 选择下一步。
选择“选择成员”,然后搜索试验名称。 选择试验,然后选择“选择”。 如果同一租户中存在多个名称相同的试验,则会通过添加随机字符截断试验名称。
选择“审阅 + 分配”>“审阅 + 分配”。
运行试验
现在,你已准备就绪,可以开始运行试验。 若要查看效果,我们建议打开 AKS 群集概述并在单独的浏览器选项卡中转到“见解”。“活动 Pod 计数”的实时数据显示了运行试验的效果。
在“试验”视图中,选择你的试验。 选择“开始”>“确定”。
当“状态”更改为“正在运行”时,在“历史记录”下选择上次运行的“详细信息”,以查看正在运行的试验的详细信息。
后续步骤
运行 AKS Chaos Mesh service-direct 试验后,接下来可以学习以下知识: