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


Краткое руководство. Развертывание узла контейнеров Azure Linux для кластера AKS с помощью шаблона ARM

Начало работы с узлом контейнеров Linux Azure с помощью шаблона Azure Resource Manager (ARM) для развертывания кластера узла контейнеров Linux Azure. После установки необходимых компонентов вы создадите пару ключей SSH, просмотрите шаблон, разверните шаблон и проверьте его, а затем развернете приложение.

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Необходимые компоненты

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Краткое руководство. Azure Cloud Shell — Bash.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Если у вас еще нет kubectl, установите его с помощью az aks install-cli Azure CLI или следуйте инструкциям вышестоящего руководства.

  • Чтобы создать кластер AKS с использованием шаблона Resource Manager, укажите открытый ключ SSH. Если вам требуется этот ресурс, выполните инструкции из следующего раздела. В противном случае перейдите к разделу Изучение шаблона.

  • Удостоверение, используемое для создания кластера, имеет соответствующие минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в разделе "Параметры доступа и удостоверения" для Служба Azure Kubernetes (AKS).

  • Для развертывания файла Bicep или шаблона ARM необходим доступ с правом записи для развертываемых ресурсов и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины требуются разрешения Microsoft.Compute/virtualMachines/write и Microsoft.Resources/deployments/*. Список ролей и разрешений см. в статье Встроенные роли Azure.

Создание пары ключей SSH

Подключение к узлам AKS выполняется с парой ключей SSH (открытого и закрытого), которые создаются с помощью команды ssh-keygen. По умолчанию эти файлы хранятся в каталоге ~/.ssh. При выполнении ssh-keygen команды выполняется перезапись любой пары ключей SSH с тем же именем, что и в указанном расположении.

  1. Перейдите по адресу https://shell.azure.com, чтобы открыть Cloud Shell в браузере.

  2. Выполните команду ssh-keygen. Следующий пример создает пару 4096-разрядных ключей SSH с шифрованием RSA:

    ssh-keygen -t rsa -b 4096
    

Дополнительные сведения о создании ключей SSH см. в статье Detailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure (Подробные инструкции. Создание ключей SSH для проверки подлинности на виртуальной машине Linux в Azure и управление этими ключами).

Изучение шаблона

В следующем развертывании используется шаблон ARM из шаблонов быстрого запуска Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "azurelinuxakscluster",
      "metadata": {
        "description": "The name of the Managed Cluster resource."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the Managed Cluster resource."
      }
    },
    "dnsPrefix": {
      "type": "string",
      "metadata": {
        "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
      }
    },
    "osDiskSizeGB": {
      "type": "int",
      "defaultValue": 0,
      "minValue": 0,
      "maxValue": 1023,
      "metadata": {
        "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
      }
    },
    "agentCount": {
      "type": "int",
      "defaultValue": 3,
      "minValue": 1,
      "maxValue": 50,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "Standard_DS2_v2",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "linuxAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "User name for the Linux Virtual Machines."
      }
    },
    "sshRSAPublicKey": {
      "type": "string",
      "metadata": {
        "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
      }
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "osSKU": {
      "type": "string",
      "defaultValue": "AzureLinux",
      "allowedValues": [
        "AzureLinux",
        "Ubuntu"
      ],
      "metadata": {
        "description": "The Linux SKU to use."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2021-03-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "mode": "System",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "[parameters('osType')]",
            "osSKU": "[parameters('osSKU')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      },
      "identity": {
          "type": "SystemAssigned"
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(parameters('clusterName')).fqdn]"
    }
  }
}

Чтобы добавить Azure Linux в существующий шаблон ARM, необходимо добавить "osSKU": "AzureLinux" и "mode": "System" agentPoolProfiles установить apiVersion в 2021-03-01 или более поздней версии ("apiVersion": "2021-03-01").

Развертывание шаблона

  1. Нажмите следующую кнопку, чтобы войти на портал Azure и открыть шаблон.

    Кнопка для развертывания шаблона Resource Manager в Azure.

  2. Введите или выберите следующие значения.

    В этом кратком руководстве оставьте значения по умолчанию для параметров OS Disk Size GB (Размер диска операционной системы в ГБ), Число агентов, Размер виртуальной машины агента, Тип ОС и Версия Kubernetes. Укажите собственные значения для следующих параметров шаблона:

    • Подписка— выберите подписку Azure.
    • Группа ресурсов: выберите "Создать". Введите уникальное имя группы ресурсов, например testAzureLinuxResourceGroup, а затем нажмите кнопку "ОК".
    • Расположение: выберите расположение, например восточную часть США.
    • Имя кластера: введите уникальное имя кластера AKS, например testAzureLinuxCluster.
    • Префикс DNS: введите уникальный префикс DNS для кластера, например myAzureLinuxCluster.
    • Имя пользователя администратора Linux: введите имя пользователя для подключения с помощью SSH, например azureUser.
    • Открытый ключ SSH RSA: скопируйте и вставьте общедоступную часть пары ключей SSH (по умолчанию содержимое ~/.ssh/id_rsa.pub).

    Снимок экрана: шаблон Resource Manager для создания кластера Службы Azure Kubernetes на портале

  3. Выберите Review + Create (Просмотреть и создать).

Создание кластера узла контейнеров Linux в Azure занимает несколько минут. Дождитесь успешного развертывания кластера, прежде чем перейти к следующему шагу.

Проверка развертывания

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

Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes.

  1. Установите kubectl локально с помощью az aks install-cli команды:

    az aks install-cli
    
  2. Настройте kubectl подключение к кластеру az aks get-credentials Kubernetes с помощью команды. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

    az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
    
  3. Проверьте подключение к кластеру kubectl get с помощью команды. Эта команда возвращает список узлов кластера.

    kubectl get nodes
    

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

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-41324942-0   Ready    agent   6m44s   v1.12.6
    aks-agentpool-41324942-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-41324942-2   Ready    agent   6m45s   v1.12.6
    

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

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

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

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

Кроме того, создаются две Службы Kubernetes:

  • внутренняя служба для экземпляра Redis;
  • внешняя служба для доступа к приложению Azure для голосования из Интернета.
  1. Создайте файл с именем azure-vote.yaml.

    • Если вы используете Azure Cloud Shell, этот файл можно создать с помощью code, vi или nano, как при работе в виртуальной или физической системе:
  2. Скопируйте в него следующее определение 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
    

    Сведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".

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

    kubectl apply -f azure-vote.yaml
    

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

    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

Параметр EXTERNAL-IP для службы azure-vote-front в выходных данных изначально будут иметь значение pending (Ожидается).

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

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

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

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

Снимок экрана: переход к примеру приложения Azure для голосования

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

Если вы не собираетесь продолжать работу со следующими руководствами, чтобы избежать расходов Azure, удалите ненужные ресурсы. az group delete Используйте команду, чтобы удалить группу ресурсов и все связанные ресурсы.

az group delete --name testAzureLinuxCluster --yes --no-wait

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

В этом кратком руководстве вы развернули кластер узла контейнеров Azure Linux. Чтобы узнать больше о узле контейнеров Linux Для Azure и ознакомиться с полным примером развертывания кластера и управления, перейдите к руководству по узлу контейнеров Azure Linux.