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


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

Применяется для: AKS на Azure Local

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

  1. Create a Kubernetes cluster in Azure Local using Azure CLI. Кластер подключен к Azure Arc по умолчанию.
  2. При создании кластера вы предоставляете группу Microsoft Entra, содержащую список пользователей Microsoft Entra с доступом администратора кластера Kubernetes.
  3. Доступ к кластеру с помощью kubectl и идентификатора Microsoft Entra.
  4. Запустите пример многоконтейнерного приложения с веб-интерфейсом и экземпляром Redis в кластере.

Перед началом работы

  • Прежде чем начать, убедитесь, что у вас есть следующие сведения от локального администратора инфраструктуры:
    • Идентификатор подписки Azure — идентификатор подписки Azure, в которой используется Azure Local для развертывания и регистрации.
    • Custom Location ID - Azure Resource Manager ID of the custom location. Настраиваемое расположение настраивается во время развертывания локального кластера Azure. Your infrastructure admin should give you the Resource Manager ID of the custom location. Этот параметр необходим для создания кластеров Kubernetes. You can also get the Resource Manager ID using az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv, if the infrastructure admin provides a custom location name and resource group name.
    • Идентификатор сети — идентификатор Azure Resource Manager локальной логической сети Azure, созданной на следующих этапах. Администратор должен предоставить вам идентификатор логической сети. Этот параметр необходим для создания кластеров Kubernetes. Вы также можете получить идентификатор Azure Resource Manager, используя, az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv если вы знаете группу ресурсов, в которой была создана логическая сеть.
  • Действия, описанные в этой статье, можно выполнить на локальном компьютере разработки, чтобы создать кластер Kubernetes в удаленном развертывании Azure Local. Убедитесь, что на компьютере разработки установлена последняя версия 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

Use the az aksarc create command to create a Kubernetes cluster in AKS Arc. Make sure you sign in to Azure before you run this command. Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки с помощью команды az account set . With the az aksarc create command, we recommend that you use the --validate flag, which validates the input parameters that you intend to use. После проверки входных параметров можно выполнить az aksarc create команду без флага --validate , чтобы создать кластер Kubernetes.

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys 

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

Соображения

Обратите внимание на следующие рекомендации при создании кластера.

  • Ключи SSH важны для устранения неполадок и сбора журналов. Не забудьте сохранить файл закрытого ключа для дальнейшего использования. Сведения о доступе к узлам см. в статье "Подключение к рабочим узлам Windows или Linux с помощью SSH".
  • Вы можете использовать предварительно существующий ключ SSH или настроить ключи SSH для кластера AKS во время создания кластера. Если на локальном компьютере нет предварительно существующего ключа SSH, --generate-ssh-keys этот параметр требуется. Вы также можете ограничить доступ по протоколу SSH, следуя документации. Подробные инструкции см. в статье "Создание и хранение ключей SSH с помощью Azure CLI" или на портале Azure.
  • Если вы не включите --generate-ssh-keys во время создания кластера и ключ SSH не существует, вы получите сообщение об ошибке. Если на локальном компьютере уже есть ключ SSH, кластер AKS повторно использует его. В этом случае это не имеет значения, указывайте --generate-ssh-keys ли вы или нет.
  • По умолчанию ключ SSH хранится в ~/.ssh/id_rsa.pub. Во время создания кластера можно указать альтернативное расположение с помощью --ssh-key-value параметра.

Внимание

Чтобы использовать Azure RBAC или идентификацию рабочей нагрузки для кластера AKS, необходимо передать нужные параметры во время создания кластера с помощью Azure CLI. В настоящее время обновление существующего кластера AKS для включения идентификации рабочих нагрузок и/или Azure RBAC не поддерживается. Чтобы получить дополнительные сведения, см. статьи «Использование Azure RBAC для авторизации Kubernetes» или «Развертывание и настройка удостоверения Workload Identity для вашего кластера».

Подключение к кластеру 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, выполнив команду get kubectl. Эта команда возвращает список узлов кластера:

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 Vote. This manifest includes two Kubernetes deployments:

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

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

  • An internal service for the Redis instance.
  • внешняя служба для доступа к приложению 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: <path to image>/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: <path to image>/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

Разверните подсистему балансировки нагрузки MetalLB, чтобы он смог назначить внешний IP-адрес для внешнего интерфейса приложения. Эти инструкции можно выполнить для развертывания расширения MetalLB на портале Azure или с помощью ИНТЕРФЕЙСА командной строки.

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

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

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

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

The EXTERNAL-IP output for the azure-vote-front service initially shows as pending.

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

Once the EXTERNAL-IP address changes from pending to an actual public IP address, use CTRL-C to stop the kubectl watch process. В следующем примере выходных данных показан общедоступный 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 --name $aksclustername --resource-group $resource_group

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