访问专用 Azure Kubernetes 服务(AKS)群集时,需要从群集虚拟网络(VNet)、对等网络或配置的专用终结点连接到群集。 这些方法需要额外的配置,例如设置 VPN 或 Express Route。
通过 Azure CLI,可以使用 command invoke 访问专用群集,而无需配置 VPN 或快速路由。 使用 command invoke,可以通过 Azure API 在专用群集上远程调用 kubectl 和 helm 等命令,而无需直接连接到群集。 RBAC操作 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 支持。
先决条件
系统和权限要求
| 要求类型 | 规格 | 如何验证 |
|---|---|---|
| Azure CLI 版本 | 2.24.0 或更高版本 | 可以使用 az --version 命令检查你的版本。 |
| 专用 AKS 群集 | 必须已存在 | 如果没有现有的专用群集,请按照 创建专用 AKS 群集中的步骤作。 |
| RBAC操作 |
Microsoft.ContainerService/managedClusters/runcommand/action 和 Microsoft.ContainerService/managedClusters/commandResults/read |
使用 Azure 门户访问控制(IAM)页或 az role assignment list Azure CLI 命令进行检查。 |
Pod 资源规格的运行命令
| 资源类型 | 价值 | 影响 |
|---|---|---|
| CPU 请求 | 200m | 为“命令 Pod”预留的最少 CPU 量 |
| 内存请求 | 500Mi | 为命令 Pod 保留的最小内存 |
| CPU 限制 | 500m | 命令 Pod 可用的最大 CPU |
| 内存限制 | 1Gi | 命令 Pod 可用的最大内存 |
| Azure 资源管理器(ARM)API超时 | 60 秒 | Pod 调度的最大时间 |
| 输出大小限制 | 512kB | 最大命令输出大小 |
限制和注意事项
设计范围
- 不适用于编程访问:将 Bastion、VPN 或 ExpressRoute 用于自动 API 调用。
- Pod 计划依赖项:需要足够的群集资源(请参阅 资源规范)。
- 输出限制: 仅 exitCode 和 文本 ,无 API 级别详细信息。
- 网络约束适用:受群集网络和安全限制的约束。
潜在故障点
- 如果节点受资源约束,Pod 调度失败。
- 如果 ARM API 无法快速调度 Pod,则会超时(60 秒)。
- 如果响应超过 512kB 限制,则输出截断。
使用 Azure CLI 在专用 AKS 群集中应用 command invoke
为资源组和群集名称设置环境变量,以便在后续命令中使用。
export AKS_RESOURCE_GROUP="<resource-group-name>" export AKS_CLUSTER_NAME="<cluster-name>"这些环境变量允许你运行 AKS 命令,而无需重写其名称。
使用 command invoke 运行单个命令
使用
az aks command invoke命令和--command参数在群集上运行单个命令,以指定要运行的命令。 以下示例获取kube-system命名空间中的 Pod。az aks command invoke \ --resource-group $AKS_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --command "kubectl get pods -n kube-system"
使用 command invoke 运行多个命令
使用
az aks command invoke命令和--command参数在群集上运行多个命令,以指定要运行的命令。 以下示例添加 Bitnami Helm 图表存储库、更新存储库并安装nginx图表。az aks command invoke \ --resource-group $AKS_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
使用 command invoke 运行附带文件的命令
如果要使用附加文件运行命令,则必须在当前工作目录中存在并可访问该文件。 在以下示例中,我们将创建一个用于演示的最小部署文件。
创建名为
deployment.yaml.. 的 Kubernetes 清单文件。 以下示例文件用于部署nginxPod。cat <<EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-demo spec: replicas: 1 selector: matchLabels: app: nginx-demo template: metadata: labels: app: nginx-demo spec: containers: - name: nginx image: nginx:1.21.6 ports: - containerPort: 80 EOF使用
az aks command invoke命令,并通过--file参数将部署文件应用到群集,以附加文件。 以下示例将deployment.yaml文件应用于default命名空间。az aks command invoke \ --resource-group $AKS_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --command "kubectl apply -f deployment.yaml -n default" \ --file deployment.yaml
使用command invoke运行对当前目录中所有文件的命令
注意
仅使用较小的必要文件以避免超过系统大小限制。
在以下示例中,我们将创建两个最少的部署文件进行演示。
创建两个名为
deployment.yaml和 . 的configmap.yamlKubernetes 清单文件。 以下示例部署文件部署 Podnginx并创建包含欢迎消息的 ConfigMap。cat <<EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-demo spec: replicas: 1 selector: matchLabels: app: nginx-demo template: metadata: labels: app: nginx-demo spec: containers: - name: nginx image: nginx:1.21.6 ports: - containerPort: 80 EOF cat <<EOF > configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: nginx-config data: welcome-message: "Hello from configmap" EOF使用
az aks command invoke带有参数的命令--file将部署文件应用到群集,以附加文件。 以下示例将deployment.yaml文件和configmap.yaml文件应用于default命名空间。az aks command invoke \ --resource-group $AKS_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --command "kubectl apply -f deployment.yaml -f configmap.yaml -n default" \ --file deployment.yaml \ --file configmap.yaml
在 Azure 门户中的专用 AKS 群集上使用 Run command
可以使用以下 kubectl 命令与 Run command 特性结合使用:
kubectl get nodeskubectl get deploymentskubectl get podskubectl describe nodeskubectl describe pod <pod-name>kubectl describe deployment <deployment-name>kubectl apply -f <file-name>
使用 Run command 运行单个命令
- 在 Azure 门户中,导航到专用群集。
- 在服务菜单中的 Kubernetes 资源下,选择“ 运行”命令。
- 输入想要运行的命令,然后选择“运行”。
使用 Run command 运行带附加文件的命令
在 Azure 门户中,导航到专用群集。
在服务菜单中的 Kubernetes 资源下,选择“ 运行”命令。
选择“附加文件”“浏览文件”>。
选择要附加的文件或文件,然后选择 “附加”。
输入想要运行的命令,然后选择“运行”。
禁用 Run command
可以通过将Run command来禁用.properties.apiServerAccessProfile.disableRunCommand功能。
排查 command invoke 问题
有关 az aks command invoke 的最常见问题及其解决方法的信息,请参阅解决 az aks command invoke 失败。
相关内容
本文介绍了如何访问专用群集并在该群集上运行命令。 有关 AKS 群集的详细信息,请参阅以下文章: