Поделиться через


Доступ к частному кластеру Службы Azure Kubernetes (AKS), используя функцию invoke command или run command.

При доступе к частному кластеру AKS необходимо подключиться к кластеру из виртуальной сети кластера, одноранговой сети или настроенной частной конечной точки. Для этих подходов нужно настроить VPN или Express Route, развернуть Jumpbox в виртуальной сети кластера или создать частную конечную точку в другой виртуальной сети.

С помощью Azure CLI можно использовать command invoke для доступа к частным кластерам без необходимости настройки VPN или Express Route. command invoke позволяет удаленно вызывать команды, такие как kubectl и helmв частном кластере, через API Azure без прямого подключения к кластеру. Microsoft.ContainerService/managedClusters/runcommand/action и Microsoft.ContainerService/managedclusters/commandResults/read действия управляют разрешениями для использования command invoke.

С помощью портал Azure можно использовать функцию Run command для выполнения команд в частном кластере. Эта Run command функция использует те же command invoke функции для выполнения команд в кластере.

Подсказка

Для выполнения kubectl команд на портале Azure можно использовать Microsoft Copilot в Azure. Дополнительные сведения см. в статье "Работа с кластерами AKS эффективно с помощью Microsoft Copilot в Azure".

Модуль pod, созданный с помощью Run command, предоставляет kubectl и helm для управления вашим кластером. jq, , xargsgrepи awk доступны для поддержки Bash.

Прежде чем начать

Перед началом работы убедитесь, что у вас есть следующие ресурсы и разрешения:

  • Существующий частный кластер. Если у вас нет этого кластера, см. статью "Создание частного кластера AKS".
  • Azure CLI версии 2.24.0 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Доступ к ролям Microsoft.ContainerService/managedClusters/runcommand/action и Microsoft.ContainerService/managedclusters/commandResults/read в кластере.

Ограничения

Эта функция предназначена для упрощения доступа к кластеру и не предназначена для программного доступа. Вы должны использовать прямой доступ к API через Бастион, VPN или Express Route для программных вызовов к кластеру.

Если у вас есть программа вызова Kubernetes с помощью Run command, применяются следующие недостатки:

  • Вы получаете только код выхода и выходные данные текста, а сведения об уровне API теряются.
  • Один дополнительный прыжок вводит дополнительные точки сбоя.

Модуль, созданный с помощью Run command, имеет запросы 200m CPU и 500Mi memory, а также ограничения 500m CPU и 1Gi memory. В случаях, когда ваш узел полностью заполнен или перенасыщен, модуль pod может не быть запланирован в течение времени ожидания API ARM, составляющего 60 секунд. Это означает, что вызов завершится ошибкой Run command .

command invoke выполняет команды из кластера, поэтому все команды, выполняемые таким образом, применяются к настроенным сетевым ограничениям и любым другим настроенным ограничениям. Убедитесь, что в кластере достаточно узлов и ресурсов, чтобы запланировать этот модуль командной строки.

Примечание.

Выходные данные command invoke ограничены размером в 512 кБ.

Выполнение команд в кластере AKS

Ниже приведены примеры использования az aks command invoke для выполнения команд в частном кластере AKS. В этих примерах предполагается, что у вас есть существующая группа ресурсов и кластер AKS.

Использование command invoke для выполнения одной команды

Вы можете выполнить команду az aks command invoke --command в своем кластере. Следующая команда выполняет kubectl get pods -n kube-system команду в кластере myPrivateCluster в myResourceGroup.

Сначала задайте переменные среды для группы ресурсов и имени кластера, которые будут использоваться в последующих командах.

export AKS_RESOURCE_GROUP="myResourceGroup"
export AKS_CLUSTER_NAME="myPrivateCluster"

Приведенные выше переменные среды позволяют выполнять команды AKS в следующих разделах без необходимости переписать их имена.

Чтобы выполнить одну команду kubectl в кластере AKS:

az aks command invoke \
  --resource-group $AKS_RESOURCE_GROUP \
  --name $AKS_CLUSTER_NAME \
  --command "kubectl get pods -n kube-system"

Использование command invoke для выполнения нескольких команд

Можно также выполнить несколько команд. В следующем примере последовательно выполняются три helm команды на кластере.

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 для выполнения команд с вложенным файлом

При использовании параметра --file с файлом az aks command invoke, файл должен существовать и быть доступен в текущем рабочем каталоге. Ниже мы создадим минимальный файл развертывания для демонстрации.

Чтобы выполнить команду с присоединенным файлом, сначала создайте файл манифеста Kubernetes с именем deployment.yaml. В следующем примере создается небольшое развертывание nginx, которое затем применяется с помощью command invoke.

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 \
  --resource-group $AKS_RESOURCE_GROUP \
  --name $AKS_CLUSTER_NAME \
  --command "kubectl apply -f deployment.yaml -n default" \
  --file deployment.yaml

Используйте command invoke для выполнения команд со всеми файлами в текущем каталоге

Используйте только небольшие, необходимые файлы, чтобы избежать превышения ограничений размера системы. Ниже создаются два минимальных файла YAML перед присоединением.

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 \
  --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

Отключить Run command

Вы можете отключить функцию Run command, установив .properties.apiServerAccessProfile.disableRunCommand для нее значение true.

Устранение неполадок

Сведения о наиболее распространенных проблемах az aks command invoke и их устраненииaz aks command invoke"Устранение сбоев".

Следующие шаги

Из этой статьи вы узнали, как получить доступ к частному кластеру и выполнить команды в этом кластере. Дополнительные сведения о кластерах AKS см. в следующих статьях: