你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用命令调用或运行命令功能访问专用 Azure Kubernetes 服务 (AKS) 群集

在访问专用 AKS 群集时,需要从群集虚拟网络、对等互连网络或通过已配置的专用终结点连接到群集。 这些方法需要配置 VPN、Express Route、在群集虚拟网络中部署 jumpbox,或在另一个虚拟网络中创建专用终结点

通过 Azure CLI,可以使用 command invoke 访问专用群集,而无需配置 VPN 或 Express Route。 使用 command invoke,可以通过 Azure API 在专用群集上远程调用 kubectlhelm 等命令,而无需直接连接到群集。 Microsoft.ContainerService/managedClusters/runcommand/actionMicrosoft.ContainerService/managedclusters/commandResults/read 操作控制使用 command invoke 的权限。

通过 Azure 门户,可以使用 Run command 功能在专用群集上运行命令。 Run command 功能使用相同的 command invoke 功能在群集上运行命令。

Run command 创建的 Pod 提供了 kubectlhelm 来操作群集。 jqxargsgrepawk 可用于 Bash 支持。

开始之前

在开始之前,请确保拥有以下资源和权限:

  • 现有的专用群集。 如果你没有群集,请参阅创建专用 AKS 群集
  • Azure CLI 2.24.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 对群集上的 Microsoft.ContainerService/managedClusters/runcommand/actionMicrosoft.ContainerService/managedclusters/commandResults/read 角色的访问权限。

限制

此功能旨在简化群集访问,并非设计用于以编程方式进行访问。 应通过 Bastion、VPN 或 Express Route 利用直接 API 访问,以编程方式调用群集。

如果使用 Run command 让一个程序调用 Kubernetes,将会有以下缺点:

  • 你只会收到 exitCode 和文本输出,而会丢失 API 级别详细信息。
  • 一个额外的跃点会引入额外的故障点。

Run command创建的 Pod 具有200m CPU500Mi memory请求,并且有500m CPU1Gi 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-systemmyPrivateCluster 群集上运行 命令。

    az aks command invoke \
      --resource-group myResourceGroup \
      --name myPrivateCluster \
      --command "kubectl get pods -n kube-system"
    

使用 command invoke 运行多个命令

  • 使用 az aks command invoke --command 命令在群集上运行多个命令。 以下示例命令在 helmmyPrivateCluster 群集上运行三个 命令。

    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 defaultmyPrivateCluster 群集上运行 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 defaultmyPrivateCluster 群集上运行 deployment.yamlconfigmap.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 群集的详细信息,请参阅以下文章: