Создание кластеров Kubernetes с помощью Azure CLI

Область применения: Azure Stack HCI, версия 23H2

В этой статье описывается создание кластеров Kubernetes в Azure Stack HCI с помощью Azure CLI. Рабочий процесс выглядит следующим образом:

  1. Создайте кластер Kubernetes в Azure Stack HCI 23H2 с помощью Azure CLI. По умолчанию кластер подключен к Azure Arc.
  2. При создании кластера вы предоставляете группу Microsoft Entra, содержащую список Microsoft Entra пользователей с доступом администратора кластера Kubernetes.
  3. Получите доступ к кластеру с помощью kubectl и Microsoft Entra ID.
  4. Запустите пример многоконтейнерного приложения с веб-интерфейсом и экземпляром Redis в кластере.

Подготовка к работе

  • Прежде чем начать, убедитесь, что у вас есть следующие сведения от локального администратора инфраструктуры:
    • Идентификатор подписки Azure — идентификатор подписки Azure, в которой Azure Stack HCI используется для развертывания и регистрации.
    • Идентификатор пользовательского расположения — идентификатор azure Resource Manager пользовательского расположения. Настраиваемое расположение настраивается во время развертывания кластера Azure Stack HCI. Администратор инфраструктуры должен предоставить вам идентификатор Resource Manager пользовательского расположения. Этот параметр необходим для создания кластеров Kubernetes. Вы также можете получить идентификатор Resource Manager с помощью az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv, если администратор инфраструктуры предоставляет пользовательское имя расположения и имя группы ресурсов.
    • Идентификатор сети. Azure Resource Manager идентификатор логической сети Azure Stack HCI, созданной после выполнения этих действий. Администратор должен предоставить идентификатор логической сети. Этот параметр необходим для создания кластеров Kubernetes. Вы также можете получить идентификатор Resource Manager Azure с помощью, az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv если вы знаете группу ресурсов, в которой была создана логическая сеть.
  • Действия, описанные в этой статье, можно выполнить на локальном компьютере разработки, чтобы создать кластер Kubernetes в удаленном развертывании Azure Stack HCI. Убедитесь, что на компьютере разработки установлена последняя версия Az CLI . Вы также можете обновить версию Az CLI с помощью az upgrade.
  • Чтобы подключиться к кластеру Kubernetes из любого места, создайте группу Microsoft Entra и добавьте в нее участников. Все члены группы Microsoft Entra имеют доступ администратора кластера к кластеру. Обязательно добавьте себя в качестве участника в группу Microsoft Entra. Если вы не добавите себя, вы не сможете получить доступ к кластеру Kubernetes с помощью kubectl. Дополнительные сведения о создании групп Microsoft Entra и добавлении пользователей см. в статье Управление группами Microsoft Entra и членством в группах.
  • Скачайте и установите kubectl на компьютере разработки. Программа командной строки Kubernetes kubectl позволяет выполнять команды в кластерах Kubernetes. Kubectl можно использовать для развертывания приложений, проверки ресурсов кластера и управления ими, а также просмотра журналов.

Установка расширения Azure CLI

Выполните следующую команду, чтобы установить необходимые расширения Azure CLI:

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

Создание кластера Kubernetes

Используйте команду , az aksarc create чтобы создать кластер Kubernetes в AKS Arc. Перед выполнением этой команды убедитесь, что вы войли в Azure. Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки с помощью команды az account set .

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.

Подключение к кластеру Kubernetes

Теперь вы можете подключиться к кластеру Kubernetes, выполнив команду с компьютера разработки az connectedk8s proxy . Перед выполнением этой команды убедитесь, что вы войли в Azure. Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки с помощью команды az account set .

Эта команда скачивает kubeconfig кластера Kubernetes на компьютер разработки и открывает прокси-канал подключения к локальному кластеру Kubernetes. Канал открыт до тех пор, пока выполняется команда . Пусть эта команда выполняется до тех пор, пока вы хотите получить доступ к кластеру. Если истекло время ожидания, закройте окно CLI, откройте новое окно, а затем снова выполните команду.

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

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Ожидаемые выходные данные:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

Сохраните этот сеанс и подключитесь к кластеру Kubernetes из другого терминала или командной строки. Убедитесь, что вы можете подключиться к кластеру Kubernetes, выполнив команду kubectl get. Эта команда возвращает список узлов кластера:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

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

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

Развертывание приложения

Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров.

Манифест можно использовать для создания всех объектов, необходимых для запуска приложения Azure Для голосования. Этот манифест содержит два развертывания Kubernetes:

  • пример приложения Azure для голосования на языке Python;
  • экземпляр Redis.

Также создаются две службы Kubernetes :

  • внутренняя служба для экземпляра Redis;
  • внешняя служба для доступа к приложению Azure для голосования из Интернета.

Создайте файл с именем azure-vote.yaml и скопируйте его в следующий манифест:

apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-back 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-back 
      template: 
        metadata: 
          labels: 
            app: azure-vote-back 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-back 
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 
            env: 
            - name: ALLOW_EMPTY_PASSWORD 
              value: "yes" 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 6379 
              name: redis 
    ---
    apiVersion: v1
    kind: Service 
    metadata: 
      name: azure-vote-back 
    spec: 
      ports: 
      - port: 6379 
      selector: 
        app: azure-vote-back 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-front 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-front 
      template: 
        metadata: 
          labels: 
            app: azure-vote-front 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-front 
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 80 
            env: 
            - name: REDIS 
              value: "azure-vote-back" 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: azure-vote-front 
    spec: 
      type: LoadBalancer 
      ports: 
      - port: 80 
      selector: 
        app: azure-vote-front

Разверните приложение с помощью команды kubectl apply и укажите имя YAML:

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

В следующем примере выходных данных показаны успешно созданные развертывания и службы:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Тестирование приложения

При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут.

Ход выполнения можно отслеживать с помощью команды kubectl get service с аргументом --watch.

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

Выходные данные EXTERNAL-IP для службы azure-vote-front изначально отображаются как ожидающие.

NAME             TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s

Когда внешний IP-адрес изменится с ожидающего на фактический общедоступный IP-адрес, нажмите клавиши CTRL+C, чтобы остановить процесс kubectl watch. В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.

azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m

Чтобы увидеть приложение для голосования Azure в действии, откройте в веб-браузере внешний IP-адрес вашей службы.

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

az aksarc delete Выполните команду , чтобы очистить созданный кластер:

az aksarc delete --resource-group $aksclustername --name $resource_group

Дальнейшие действия