你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在访问专用 AKS 群集时,需要从群集虚拟网络、对等互连网络或通过已配置的专用终结点连接到群集。 这些方法需要配置 VPN、Express Route、在群集虚拟网络中部署 jumpbox,或在另一个虚拟网络中创建专用终结点。
通过 Azure CLI,可以使用 command invoke
访问专用群集,而无需配置 VPN 或 Express Route。
使用 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
角色的访问权限。
限制
此功能旨在简化群集访问,并非设计用于以编程方式进行访问。 应通过 Bastion、VPN 或 Express Route 利用直接 API 访问,以编程方式调用群集。
如果使用 Run command
让一个程序调用 Kubernetes,将会有以下缺点:
- 你只会收到 exitCode 和文本输出,而会丢失 API 级别详细信息。
- 一个额外的跃点会引入额外的故障点。
由Run command
创建的 Pod 具有200m CPU
和500Mi memory
请求,并且有500m CPU
和1Gi memory
限制。 如果所有节点已满或超额分配,Pod 可能无法在 ARM API 超时 60 秒内进行调度。 这意味着 Run command
调用会失败。
command invoke
从群集运行命令,因此以这种方式运行的任何命令都受配置的网络限制和任何其他已配置的限制的约束。 确保群集中存在足够的节点和资源来调度此命令 pod。
注意
command invoke
的输出大小限制为 512kB。
在 AKS 群集上运行命令
使用 command invoke
运行单个命令
使用
az aks command invoke --command
命令在群集上运行命令。 以下示例命令在kubectl get pods -n kube-system
的 myPrivateCluster 群集上运行 命令。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl get pods -n kube-system"
使用 command invoke
运行多个命令
使用
az aks command invoke --command
命令在群集上运行多个命令。 以下示例命令在helm
的 myPrivateCluster 群集上运行三个 命令。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
运行命令并附加文件或目录
使用带
az aks command invoke --command
参数的--file
命令运行带有附加文件或目录的命令。 以下示例命令在kubectl apply -f deployment.yaml -n default
的 myPrivateCluster 群集上运行 。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
运行附加了当前目录中所有文件的命令
使用带
az aks command invoke --command
参数的--file
命令运行附加了当前目录中所有文件的命令。 以下示例命令在kubectl apply -f deployment.yaml configmap.yaml -n default
的 myPrivateCluster 群集上运行 。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 .
禁用 Run command
可以通过将.properties.apiServerAccessProfile.disableRunCommand
设置为true
来禁用Run command
功能。
疑难解答
有关 az aks command invoke
的最常见问题及其解决方法的信息,请参阅解决 az aks command invoke
失败。
后续步骤
本文介绍了如何访问专用群集并在该群集上运行命令。 有关 AKS 群集的详细信息,请参阅以下文章: