使用命令调用或运行命令功能访问专用 Azure Kubernetes 服务 (AKS) 群集
在访问专用 AKS 群集时,需要从群集虚拟网络、对等互连网络或通过已配置的专用终结点连接到群集。 这些方法需要配置 VPN、Express Route、在群集虚拟网络中部署 jumpbox,或在另一个虚拟网络中创建专用终结点。
通过 Azure CLI,可以使用 command invoke
访问专用群集,而无需配置 VPN 或快速路由。 使用 command invoke
,可以通过 Azure API 在专用群集上远程调用 kubectl
和 helm
等命令,而无需直接连接到群集。 Microsoft.ContainerService/managedClusters/runcommand/action
和 Microsoft.ContainerService/managedclusters/commandResults/read
操作控制使用 command invoke
的权限。
通过 Azure 门户,可以使用 Run command
功能在专用群集上运行命令。 Run command
功能会使用相同的 command invoke
功能在群集上运行命令。
Run command
创建的 Pod 提供了 kubectl
和 helm
来操作群集。 jq
、xargs
、grep
和 awk
可用于 Bash 支持。
开始之前
在开始之前,请确保拥有以下资源和权限:
- 现有的专用群集。 如果还没有群集,请参阅创建专用 AKS 群集。
- Azure CLI 2.24.0 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 对群集上的
Microsoft.ContainerService/managedClusters/runcommand/action
和Microsoft.ContainerService/managedclusters/commandResults/read
角色的访问权限。
限制
此功能旨在简化群集访问,并非设计用于以编程方式进行访问。 如果使用 Run command
让一个程序调用 Kubernetes,将会有以下缺点:
- 你只会收到 exitCode 和文本输出,而会丢失 API 级别详细信息。
- 一个额外的跃点会引入额外的故障点。
Run command
创建的 Pod 会随 200m CPU
和 500Mi memory
请求以及 500m CPU
和 1Gi memory
限制一起进行硬编码。 在极少数情况下,如果节点全部已满,则无法在 60 秒的 ARM API 限制内安排 Pod。 这意味着,即使 Run command
配置为自动缩放,也会失败。
command invoke
会从群集运行命令,因此以此方式运行的任何命令会受到所配置的网络限制和其他限制的约束。 确保群集中存在足够的节点和资源来调度此命令 pod。
注意
command invoke
的输出大小限制为 512kB。
在 AKS 群集上运行命令
使用 command invoke
运行单个命令
使用
az aks command invoke --command
命令在群集上运行命令。 以下示例命令在 myResourceGroup 的 myPrivateCluster 群集上运行kubectl get pods -n kube-system
命令。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl get pods -n kube-system"
使用 command invoke
运行多个命令
使用
az aks command invoke --command
命令在群集上运行多个命令。 以下示例命令在 myResourceGroup 的 myPrivateCluster 群集上运行三个helm
命令。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
使用 command invoke
运行命令并附加文件或目录
使用带
--file
参数的az aks command invoke --command
命令运行带有附加文件或目录的命令。 以下示例命令在 myResourceGroup 的 myPrivateCluster 群集上运行kubectl apply -f deployment.yaml -n default
。deployment.yaml
文件是从运行az aks command invoke
的开发计算机上当前目录中附加的。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml -n default" \ --file deployment.yaml
使用 command invoke
运行附加了当前目录中所有文件的命令
使用带
--file
参数的az aks command invoke --command
命令运行附加了当前目录中所有文件的命令。 以下示例命令在 myResourceGroup 的 myPrivateCluster 群集上运行kubectl apply -f deployment.yaml configmap.yaml -n default
。deployment.yaml
和configmap.yaml
文件是运行az aks command invoke
的开发计算机上当前目录的一部分。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml configmap.yaml -n default" \ --file .
故障排除
有关 az aks command invoke
的最常见问题及其解决方法的信息,请参阅解决 az aks command invoke
失败。
后续步骤
本文介绍了如何访问专用群集并在该群集上运行命令。 有关 AKS 群集的详细信息,请参阅以下文章: