Развертывание кластера Kubernetes с помощью обработчика AKS в Azure Stack Hub

Вы можете развернуть кластер Kubernetes в Azure Stack Hub с клиентской виртуальной машины, на котором выполняется обработчик AKS. В этой статье мы рассмотрим написание спецификации кластера, развертывание кластера с помощью файла apimodel.json и проверку кластера путем развертывания MySQL с помощью Helm.

Определение спецификации кластера

Спецификацию кластера можно оформить в виде файла с документом в формате JSON, который называется моделью API. Обработчик AKS использует спецификацию кластера в модели API для создания кластера.

Примеры модели API для операционной системы и номера версии обработчика AKS для последних выпусков см. в разделе Обработчик AKS и соответствующее сопоставление изображений.

  1. Найдите номер версии обработчика AKS, например , v.0.63.0в таблице.
  2. В таблице Примеры модели API выберите и откройте ссылку для операционной системы.
  3. Выберите Raw (Необработанный формат). URL-адрес можно использовать в следующих инструкциях.

URL-адрес модели API может выглядеть следующим образом:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

Для каждого из следующих примеров замените <URL for the API Model> URL-адресом.

Обновление модели API

В этом разделе рассматривается создание модели API для кластера.

  1. Начните с использования файла модели API Azure Stack Hub для Linux или Windows. На виртуальной машине с установленным обработчиком AKS выполните следующую команду:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Примечание

    Если на нем нет подключения к Интернету, вы можете скачать файл и вручную скопировать его на отключенный от сети компьютер, где будете изменять его. Вы можете скопировать файл на компьютер Linux с помощью таких средств, как PuTTY или WinSCP.

  2. Чтобы открыть модель API в редакторе, можно использовать nano:

    nano ./kubernetes-azurestack.json
    

    Примечание

    Если nano не установлен в вашей системе, установите его на Ubuntu с помощью команды sudo apt-get install nano.

  3. В файле kubernetes-azurestack.json найдите orchestratorRelease и orchestratorVersion. Выберите одну из поддерживаемых версий Kubernetes; Таблицу версий можно найти в заметках о выпуске. Для orchestratorRelease укажите x.xx, а для orchestratorVersion — x.xx.x. Список актуальных версий см. в разделе о поддерживаемых версиях обработчика AKS.

  4. Найдите customCloudProfile и укажите URL-адрес для портала клиента. Например, https://portal.local.azurestack.external.

  5. Если вы используете AD FS, добавьте "identitySystem":"adfs". Например,

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Примечание

    Если вы используете идентификатор Microsoft Entra для системы удостоверений, не нужно добавлять поле identitySystem.

  6. В masterProfile заполните следующие поля:

    Поле Описание
    dnsPrefix Введите уникальную строку, которая будет определять имя узла для виртуальных машин. Например, можно создать имя на основе имени группы ресурсов.
    count Введите число главных серверов для развертывания. Минимальное значение для развертывания высокого уровня доступности — 3, а для развертываний без высокого уровня доступности — 1.
    vmSize Введите размер, поддерживаемый Azure Stack Hub, например Standard_D2_v2.
    distro Введите aks-ubuntu-18.04 или aks-ubuntu-20.04.
  7. В agentPoolProfiles обновите следующее:

    Поле Описание
    count Введите число агентов для развертывания. Для каждой подписки можно использовать не более 50 узлов. При развертывании нескольких кластеров на одну подписку убедитесь, что общее число агентов не превышает 50. Обязательно используйте элементы конфигурации, указанные в JSON-файле примера модели API.
    vmSize Введите размер, поддерживаемый Azure Stack Hub, например Standard_D2_v2.
    distro Введите aks-ubuntu-18.04или Windowsaks-ubuntu-20.04 .
    Используется Windows для агентов, которые будут работать в Windows. Например, см. kubernetes-windows.json.
  8. В linuxProfile обновите следующее:

    Поле Описание
    adminUsername Имя пользователя для администратора виртуальной машины.
    ssh Введите открытый ключ, который будет использоваться для аутентификации SSH-соединений с виртуальными машинами. Введите ssh-rsa, а затем укажите ключ. Инструкции по созданию открытого ключа см. в статье Создание ключа SSH для Linux.

    При развертывании в настраиваемой виртуальной сети инструкции по поиску и добавлению необходимых ключей и значений в соответствующие массивы см. в статье Развертывание кластера Kubernetes в настраиваемой виртуальной сети.

    Примечание

    Обработчик AKS для Azure Stack Hub не позволяет предоставлять собственные сертификаты для создания кластера.

  9. Если вы используете Windows, обновите windowsProfile значения adminUsername: и adminPassword:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Дополнительные сведения о модели API

  • Полный справочник по всем параметрам, доступным в модели API, см. в описании определений кластера.
  • Основные сведения о параметрах, имеющих прямое отношение к Azure Stack Hub, вы найдете в этой статье.

Добавление сертификата при использовании ASDK

Если вы развертываете кластер в пакете средств разработки Azure Stack (ASDK) и используете Linux, необходимо добавить корневой сертификат в хранилище доверенных сертификатов клиентской виртуальной машины, на которой выполняется обработчик AKS.

  1. Найдите корневой сертификат на виртуальной машине в этом каталоге: /var/lib/waagent/Certificates.pem.
  2. Скопируйте файл сертификата:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Развертывание кластера Kubernetes

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

Попросите оператора Azure Stack Hub:

  • Проверить работоспособность системы, например с помощью Test-AzureStack и средства мониторинга оборудования вашего поставщика вычислительной техники.
  • Убедиться в наличии надлежащего объема ресурсов в системе, в том числе памяти, хранилища и общедоступных IP-адресов.
  • Предоставить сведения о квоте, связанной с вашей подпиской, чтобы вы были уверены в наличии достаточного места для размещения запланированного количества виртуальных машин.

Переходите к развертыванию кластера:

  1. Проверьте доступные параметры для флагов CLI обработчика AKS в Azure Stack Hub.

    Параметр Пример Описание
    azure-env AzureStackCloud Используйте AzureStackCloud, чтобы сообщить обработчику AKS, что целевой платформой является Azure Stack Hub.
    identity-system adfs Необязательный параметр. Укажите решение по управлению удостоверениями, если используются службы федерации Active Directory (AD FS).
    location local Название региона для Azure Stack Hub. Для ASDK параметр региона нужно настроить как local.
    resource-group kube-rg Введите имя новой группы ресурсов или выберите существующую. Имя ресурса должно содержать буквенно-цифровые символы. Оно вводится в нижнем регистре.
    api-model ./kubernetes-azurestack.json Путь к файлу конфигурации кластера или модели API.
    output-directory kube-rg Введите имя каталога, в котором будет содержаться выходной файл apimodel.json и другие созданные файлы.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите GUID субъекта-службы. Идентификатор клиента определяется как идентификатор приложения, когда администратор Azure Stack Hub создает субъект-службу.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите секрет субъекта-службы. Секрет клиента настраивается при создании службы.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Введите идентификатор подписки. Необходимо предоставить подписку для клиента. Развертывание в административной подписке не поддерживается. Дополнительные сведения см. в разделе Подписка на предложение.

    Вот пример:

    Примечание

    Для AKSe версии 0.75.3 и выше для развертывания кластера обработчика AKS используется aks-engine-azurestack deployкоманда .

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Если выполнение по любой причине завершится ошибкой после создания выходного каталога, устраните проблему и выполните команду повторно. Если вы повторно запускаете развертывание и раньше использовали тот же выходной каталог, обработчик AKS вернет ошибку, сообщающую, что каталог уже существует. Существующий каталог можно перезаписать, указав флаг --force-overwrite.

  3. Сохраните конфигурацию кластера для обработчика AKS в безопасном зашифрованном расположении.

    Найдите файл apimodel.json. Сохраните его в надежном месте. Этот файл будет использоваться как источник входных данных в других операциях с обработчиком AKS.

    Созданный файл apimodel.json содержит субъект-службу, секрет и открытый ключ SSH, используемые во входной модели API. Файл также содержит все остальные метаданные, необходимые обработчику AKS для выполнения всех остальных операций. Если вы потеряете файл, обработчик AKS не сможет настроить кластер.

    Секреты не шифруются. Храните этот файл в надежном зашифрованном расположении.

Проверка кластера

Проверьте кластер, подключившись к kubectl, получив сведения, а затем получите состояния узлов.

  1. kubeconfig Получите файл для подключения к уровню управления.

    • Если вы уже установилиkubectl, проверка kubeconfig файл для только что созданного кластера в этом пути к каталогу /kubeconfig/kubeconfig.json. Вы можете добавить в /kubeconfig.json.kube каталог для доступа к новому кластеру.
      Если вы еще не установили kubectl, посетите раздел Установка средств , чтобы установить программу командной строки Kubernetes. В противном случае следуйте приведенным ниже инструкциям, чтобы получить доступ к кластеру с одного из узлов уровня управления.
  2. Получите общедоступный IP-адрес одного из узлов уровня управления с помощью портала Azure Stack Hub.

  3. С компьютера с доступом к экземпляру Azure Stack Hub подключитесь по протоколу SSH к новому узлу уровня управления с помощью клиента, например PuTTY или MobaXterm.

  4. В качестве имени пользователя SSH используйте azureuser и файл закрытого ключа пары ключей, предоставленной для развертывания кластера.

  5. Убедитесь, что конечные точки кластера запущены:

    kubectl cluster-info
    

    Результат должен выглядеть следующим образом.

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. Затем просмотрите сведения о состоянии узлов:

    kubectl get nodes
    

    Результат выполнения должен быть аналогичен следующему:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

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

При возникновении ошибок при развертывании кластера Kubernetes с помощью обработчика AKS можно проверка:

  1. Правильно ли указаны учетные данные субъекта-службы?
  2. Имеет ли субъект-служба роль "Участник" для подписки Azure Stack Hub?
  3. Есть ли в плане Azure Stack Hub достаточно большой объем квоты?
  4. Не выполняется ли в текущий момент обновление этого экземпляра Azure Stack Hub?

Дополнительные сведения см. в статье Устранение неполадок в репозитории GitHub Azure/aks-engine-azurestack .

Смена секрета субъекта-службы

После развертывания кластера Kubernetes с обработчиком AKS субъект-служба (SPN) используется для управления взаимодействием с Resource Manager Azure в экземпляре Azure Stack Hub. В какой-то момент срок действия секрета для этого субъекта-службы может истечь. Если срок действия секрета истекает, можно обновить учетные данные, выполнив следующие действия:

  • Обновление каждого узла с помощью нового секрета субъекта-службы.
  • Или обновите учетные данные модели API и выполните обновление.

Обновление каждого узла вручную

  1. Получите новый секрет для субъекта-службы от оператора облака. Инструкции по Azure Stack Hub см. в статье Использование удостоверения приложения для доступа к ресурсам Azure Stack Hub.
  2. Используйте новые учетные данные, предоставленные оператором облака, для обновления /etc/kubernetes/azure.json на каждом узле. После обновления перезапустите и kubelekube-controller-manager.

Обновление кластера с помощью aks-engine update

Кроме того, можно заменить учетные данные в файле apimodel.json и выполнить обновление с помощью обновленного JSON-файла до той же или более новой версии Kubernetes. Инструкции по обновлению модели см. в статье Обновление кластера Kubernetes в Azure Stack Hub.

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