Развертывание кластера Kubernetes с подсистемой AKS в Azure Stack Hub
Кластер Kubernetes можно развернуть в Azure Stack Hub на клиентской виртуальной машине с подсистемой AKS. В этой статье мы рассмотрим написание спецификации кластера, развертывание кластера с помощью файла apimodel.json и проверку кластера путем развертывания MySQL с помощью Helm.
Определение спецификации кластера
Спецификацию кластера можно оформить в виде файла с документом в формате JSON, который называется моделью API. Подсистема AKS использует спецификацию кластера в модели API для создания кластера.
Примеры модели API для номера версии ядра ОС и AKS для последних выпусков см. в подсистеме AKS и соответствующем сопоставлении изображений.
- Найдите номер версии ядра AKS, например,
v.0.63.0
в таблице. - В таблице примеров модели API выберите и откройте ссылку для операционной системы.
- Выберите 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 для кластера.
Начните с использования файла модели API Azure Stack Hub для Linux или Windows. На виртуальной машине с установленным обработчиком AKS выполните следующую команду:
curl -o kubernetes-azurestack.json <URL for the API Model>
Примечание.
Если на нем нет подключения к Интернету, вы можете скачать файл и вручную скопировать его на отключенный от сети компьютер, где будете изменять его. Вы можете скопировать файл на компьютер Linux с помощью таких средств, как PuTTY или WinSCP.
Чтобы открыть модель API в редакторе, можно использовать nano:
nano ./kubernetes-azurestack.json
Примечание.
Если nano не установлен в вашей системе, установите его на Ubuntu с помощью команды
sudo apt-get install nano
.В файле kubernetes-azurestack.json найдите orchestratorRelease и orchestratorVersion. Выберите одну из поддерживаемых версий Kubernetes; Таблицу версий можно найти в заметках о выпуске. Для
orchestratorRelease
укажите x.xx, а для orchestratorVersion — x.xx.x. Список актуальных версий см. в разделе о поддерживаемых версиях обработчика AKS.Найдите
customCloudProfile
и укажите URL-адрес для портала клиента. Например,https://portal.local.azurestack.external
.Если вы используете AD FS, добавьте
"identitySystem":"adfs"
. Например,"customCloudProfile": { "portalURL": "https://portal.local.azurestack.external", "identitySystem": "adfs" },
Примечание.
Если для системы удостоверений используется идентификатор Microsoft Entra, вам не нужно добавить поле identitySystem .
В
masterProfile
заполните следующие поля:Поле Description dnsPrefix Введите уникальную строку, которая будет определять имя узла для виртуальных машин. Например, можно создать имя на основе имени группы ресурсов. count Введите число главных серверов для развертывания. Минимальное значение для развертывания высокого уровня доступности — 3, а для развертываний без высокого уровня доступности — 1. vmSize Введите размер, поддерживаемый Azure Stack Hub, например Standard_D2_v2
.distro Введите aks-ubuntu-18.04
илиaks-ubuntu-20.04
.В
agentPoolProfiles
обновите следующее:Поле Description count Введите число агентов для развертывания. Для каждой подписки можно использовать не более 50 узлов. При развертывании нескольких кластеров на одну подписку убедитесь, что общее число агентов не превышает 50. Обязательно используйте элементы конфигурации, указанные в JSON-файле примера модели API. vmSize Введите размер, поддерживаемый Azure Stack Hub, например Standard_D2_v2
.distro aks-ubuntu-20.04
Введитеaks-ubuntu-18.04
илиWindows
.
ИспользуетсяWindows
для агентов, которые будут работать в Windows. Например, см . kubernetes-windows.jsonВ
linuxProfile
обновите следующее:Поле Description adminUsername Имя пользователя для администратора виртуальной машины. ssh Введите открытый ключ, который будет использоваться для аутентификации SSH-соединений с виртуальными машинами. Введите ssh-rsa
, а затем укажите ключ. Инструкции по созданию открытого ключа см. в статье Создание ключа SSH для Linux.При развертывании в настраиваемой виртуальной сети можно найти инструкции по поиску и добавлению необходимых ключей и значений в соответствующие массивы в модели API в развертывании кластера Kubernetes в настраиваемую виртуальную сеть.
Примечание.
Подсистема AKS для Azure Stack Hub не позволяет предоставлять собственные сертификаты для создания кластера.
Если вы используете Windows, обновите
windowsProfile
значенияadminUsername:
иadminPassword
:"windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
Дополнительные сведения о модели API
- Полный справочник по всем параметрам, доступным в модели API, см. в описании определений кластера.
- Основные сведения о параметрах, имеющих прямое отношение к Azure Stack Hub, вы найдете в этой статье.
Добавление сертификата при использовании ASDK
Если вы развертываете кластер в пакете средств разработки Azure Stack (ASDK) и используете Linux, необходимо добавить корневой сертификат в хранилище доверенных сертификатов клиентской виртуальной машины под управлением ядра AKS.
- Найдите корневой сертификат на виртуальной машине в этом каталоге:
/var/lib/waagent/Certificates.pem.
- Скопируйте файл сертификата:
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-адресов.
- Предоставить сведения о квоте, связанной с вашей подпиской, чтобы вы были уверены в наличии достаточного места для размещения запланированного количества виртуальных машин.
Переходите к развертыванию кластера:
Проверьте доступные параметры для флагов CLI обработчика AKS в Azure Stack Hub.
Параметр Пример Description azure-env AzureStackCloud Используйте AzureStackCloud
, чтобы сообщить обработчику AKS, что целевой платформой является Azure Stack Hub.identity-system adfs Необязательно. Укажите решение по управлению удостоверениями, если используются службы федерации Active Directory (AD FS). расположение Локальная среда Название региона для 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-engine-azurestack deploy
команда для развертывания кластера подсистемы AKS.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
Если выполнение по любой причине завершится ошибкой после создания выходного каталога, устраните проблему и выполните команду повторно. Если вы повторно запускаете развертывание и использовали тот же выходной каталог раньше, обработчик AKS вернет ошибку, заявив, что каталог уже существует. Существующий каталог можно перезаписать, указав флаг
--force-overwrite
.Сохраните конфигурацию кластера для обработчика AKS в безопасном зашифрованном расположении.
Найдите файл apimodel.json. Сохраните его в надежном месте. Этот файл будет использоваться как источник входных данных в других операциях с обработчиком AKS.
Созданный файл apimodel.json содержит субъект-службу, секрет и открытый ключ SSH, используемый в модели входного API. Файл также содержит все остальные метаданные, необходимые обработчику AKS для выполнения всех других операций. Если вы потеряете файл, подсистема AKS не сможет настроить кластер.
Секреты не шифруются. Храните этот файл в надежном зашифрованном расположении.
Проверка кластера
Проверьте кластер, подключившись к kubectl
нему, вернитесь к данным, а затем запустите состояние узлов.
kubeconfig
Получите файл для подключения к плоскости управления.- Если вы уже
kubectl
установили, проверьтеkubeconfig
файл для только что созданного кластера в этом пути к каталогу/kubeconfig/kubeconfig.json
. Вы можете добавить/kubeconfig.json
его в.kube
каталог и переименовать его в "конфигурацию", чтобы получить доступ к новому кластеру.
Если вы еще не установилиkubectl
, перейдите в раздел "Средства установки", чтобы установить средство командной строки Kubernetes. В противном случае следуйте приведенным ниже инструкциям, чтобы получить доступ к кластеру с одного из узлов плоскости управления.
- Если вы уже
Получите общедоступный IP-адрес одного из узлов уровня управления с помощью портала Azure Stack Hub.
С компьютера с доступом к экземпляру Azure Stack Hub подключитесь через SSH к новому узлу уровня управления с помощью клиента, например PuTTY или MobaXterm.
Для имени пользователя SSH используйте azureuser и файл закрытого ключа пары ключей, предоставленный для развертывания кластера.
Убедитесь, что выполняются конечные точки кластера:
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
Затем просмотрите сведения о состоянии узлов:
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 можно проверить следующее:
- Правильно ли указаны учетные данные субъекта-службы?
- Имеет ли субъект-служба роль "Участник" для подписки Azure Stack Hub?
- Есть ли в плане Azure Stack Hub достаточно большой объем квоты?
- Не выполняется ли в текущий момент обновление этого экземпляра Azure Stack Hub?
Дополнительные сведения см . в статье об устранении неполадок в репозитории Azure/aks-engine-azurestack GitHub.
Смена секрета принципа службы
После развертывания кластера Kubernetes с подсистемой AKS субъект-служба используется для управления взаимодействием с Azure Resource Manager в экземпляре Azure Stack Hub. В какой-то момент срок действия секрета для этого субъекта-службы может истекает. Если срок действия секрета истекает, вы можете обновить учетные данные следующим образом:
- Обновление каждого узла с помощью нового секрета субъекта-службы.
- Или обновите учетные данные модели API и выполните обновление.
Обновление каждого узла вручную
- Получите новый секрет для субъекта-службы от оператора облака. Инструкции по Azure Stack Hub см. в статье "Использование удостоверения приложения для доступа к ресурсам Azure Stack Hub".
- Используйте новые учетные данные, предоставленные оператором облака, для обновления /etc/kubernetes/azure.json на каждом узле. После обновления перезапустите оба
kubele
иkube-controller-manager
.
Обновление кластера с обновлением aks-engine
Кроме того, можно заменить учетные данные в apimodel.json и выполнить обновление с помощью обновленного файла .json на ту же или более новую версию Kubernetes. Инструкции по обновлению модели см. в статье Об обновлении кластера Kubernetes в Azure Stack Hub.