Создание кластеров в Huawei Cloud Stack
Этот документ содержит подробные инструкции по созданию кластеров Kubernetes на платформе Huawei Cloud Stack с использованием Cluster API.
Содержание
Предварительные требования1. Установка необходимых плагинов2. Подготовка входных данных для HCS InfrastructureОбзор создания кластераНастройка control planeНастройка аутентификации HCSНастройка Machine Configuration PoolНастройка шаблона машинНастройка KubeadmControlPlaneНастройка HCSClusterНастройка ClusterПроверка кластераИспользование kubectlОжидаемый результатДобавление worker-узловОбновление кластеровПредварительные требования
Перед созданием кластеров убедитесь, что выполнены все следующие предварительные требования:
1. Установка необходимых плагинов
Установите следующие плагины в кластере global :
- Alauda Container Platform Kubeadm Provider
- Alauda Container Platform HCS Infrastructure Provider
Подробные инструкции по установке см. в Руководстве по установке.
2. Подготовка входных данных для HCS Infrastructure
Подготовьте все входные данные, специфичные для HCS, прежде чем писать какой-либо YAML в этом документе:
- Значения Secret для учетных данных HCS
- Распознаваемые provider значения для вычислительных ресурсов, такие как
imageName,flavorNameиavailabilityZone - Инвентаризацию сети кластера, включая подсети и свободные диапазоны IP-адресов, используемые кластером
- Планирование адреса ELB для control plane, включая
vipAddress,vipSubnetNameи фиксированные IP L4 и L7 - Планирование пула статических IP для control plane и worker-узлов
Полный контрольный список, исходные данные и ограничения см. в разделе Инфраструктурные ресурсы для Huawei Cloud Stack.
Обзор создания кластера
На высоком уровне вы создадите следующие ресурсы Cluster API в кластере global для подготовки инфраструктуры и загрузки рабочего Kubernetes-кластера.
Прежде чем писать какой-либо YAML на этой странице, завершите контрольный список подготовки в разделе Инфраструктурные ресурсы для Huawei Cloud Stack. Этот контрольный список охватывает значения, которые ожидает provider, где их получить и какие значения необходимо спланировать до заполнения манифестов.
Важное требование к namespace
Чтобы обеспечить корректную интеграцию с как с бизнес-кластерами, все ресурсы должны быть развернуты в namespace cpaas-system. Развертывание ресурсов в других namespace может привести к проблемам интеграции.
Процесс создания кластера выполняется в следующем порядке:
- Настройка аутентификации HCS (Secret)
- Создание пула конфигурации машин (HCSMachineConfigPool)
- Настройка шаблона машин (HCSMachineTemplate)
- Настройка KubeadmControlPlane
- Настройка HCSCluster
- Создание Cluster
Настройка control plane
Control plane управляет состоянием кластера, планированием и Kubernetes API. В этом разделе показано, как настроить высокодоступный control plane.
Рекомендации по параметрам конфигурации
При настройке ресурсов будьте осторожны при изменении параметров:
- Заменяйте только значения, заключенные в
<>, на значения, соответствующие вашей среде - Сохраняйте все остальные параметры, поскольку они представляют собой оптимальные или обязательные настройки
- Изменение параметров, не являющихся заполнителями, может привести к нестабильности кластера или проблемам интеграции
Настройка аутентификации HCS
Информация аутентификации HCS хранится в ресурсе Secret.
Вы можете повторно использовать существующий Secret с учетными данными HCS. Его имя не обязательно должно совпадать с именем кластера, но HCSCluster.spec.identityRef.name должен ссылаться на этот Secret.
Настройка Machine Configuration Pool
HCSMachineConfigPool определяет предварительно настроенные имена хостов и статические IP-адреса для VM.
Требование к размеру пула
Пул конфигурации должен содержать как минимум столько записей, сколько узлов control plane вы планируете развернуть.
Используйте один селектор подсети для каждой записи networks[]. Для новых манифестов задайте либо subnetName, либо subnetId, но не оба одновременно. В существующих манифестах можно сохранить устаревшее поле subenetName; если при обновлении такого манифеста вы также добавляете subnetName, его значение должно в точности совпадать с subenetName. Не задавайте конфликтующие значения в subenetName, subnetName и subnetId.
Если вы используете subnetName в пуле конфигурации машин, включите то же имя подсети в HCSCluster.spec.network.subnets.
Для первоначального процесса создания кластера достаточно указать существующую подсеть по имени, поскольку controller разрешает метаданные подсети до того, как кластер станет Ready. Если позже вы добавляете еще одну подсеть в уже существующий Ready HCSCluster, не добавляйте только name. Измените запись родительского HCSCluster.spec.network.subnets, указав полный объект подсети, чтобы последующие операции с machine или ELB могли повторно использовать разрешенные метаданные подсети.
*Для новых манифестов задайте либо subnetName, либо subnetId. В существующих манифестах можно продолжать использовать subenetName, а subnetName можно добавить только в том случае, если оба поля используют одно и то же значение. Не задавайте конфликтующие значения селектора подсети.
Примечание: В схеме CRD поля subnetName, subenetName и subnetId указаны как необязательные, и схема не выражает допустимые комбинации этих полей. При написании манифестов следуйте приведенным выше правилам уровня provider.
Примечание: Чтобы подключить несколько NIC к одному узлу, добавьте несколько записей networks[]. Provider использует эти записи только для подключения NIC и назначения селекторов подсети и статических IP. Он не поддерживает объявление ролей для отдельных NIC, шлюзов по умолчанию, статических маршрутов или настроек DNS для отдельных NIC.
Настройка шаблона машин
HCSMachineTemplate определяет спецификации VM для узлов control plane.
Требования к хранилищу
Для узлов control plane рекомендуются следующие точки монтирования дисков данных:
/var/lib/etcd— данные etcd (10GB+)/var/lib/kubelet— данные kubelet (100GB+)/var/lib/containerd— данные container runtime (100GB+)/var/cpaas— данные и журналы платформы (40GB+)
*Обязательно, если указано dataVolumes.
Примечание: Не задавайте в манифестах HCSMachineTemplate поля runtime identity, такие как providerID или serverId. Provider присваивает эти значения при создании экземпляров HCS.
Примечание: Администраторы арендатора не могут получить значения flavorName и availabilityZone, распознаваемые provider, из UI HCS. Получите точные значения у администратора HCS перед применением манифеста.
Настройка KubeadmControlPlane
KubeadmControlPlane определяет конфигурацию control plane Kubernetes.
HCS controller также внедряет файлы при разрешении данных cloud-init. Для машин control plane он записывает /etc/kubernetes/pki/kubelet.crt, /etc/kubernetes/pki/kubelet.key и /etc/kubernetes/encryption-provider.conf. Для первой машины control plane controller генерирует конфигурацию encryption provider. После инициализации control plane он пытается повторно использовать существующую конфигурацию encryption provider для kube-apiserver. Если вы включаете bootstrap-файл в /etc/kubernetes/encryption-provider.conf, рассматривайте его как заполнитель, поскольку приоритет имеет файл, сгенерированный или синхронизированный controller.
Примечание: Настраивайте apiServer.extraArgs и apiServer.extraVolumes совместно. Если том не смонтирован, kube-apiserver не сможет прочитать файлы, записанные в /etc/kubernetes.
Примечание: Пример rolloutStrategy.rollingUpdate.maxSurge: 0 выше предназначен для высокодоступных control plane со статическими IP. Сохраняйте эту настройку для фиксированных по размеру пулов control plane как минимум с тремя replica, чтобы замены выполнялись в порядке scale-down, а затем scale-up. Если вы создаете кластер HCS с одним control plane (spec.replicas: 1), не копируйте блок rolloutStrategy в манифест создания. Валидация KubeadmControlPlane отклоняет такую конфигурацию rollout в стиле scale-in для одной replica.
Примечание: HCS также поддерживает создание кластера с одним control plane путем задания spec.replicas: 1 и подготовки одной записи конфигурации control plane в указанном HCSMachineConfigPool. Рассматривайте это как топологию только для создания и оставьте rollout strategy не заданной в манифесте создания. Процесс обновления в этой документации не поддерживает кластеры HCS с одним control plane.
Используйте Матрицу поддержки ОС только для тех версий компонентов, которые в ней явно перечислены, например тегов образов coredns и etcd для поддерживаемых образов MicroOS. Это не является полным источником всех значений манифеста HCS. Перед применением этого YAML также используйте утвержденную базовую версию выпуска для таких значений, как imageRepository, репозиторий образов DNS, версия Kube-OVN, join CIDR Kube-OVN, Pod CIDR и Service CIDR.
Настройка HCSCluster
Ресурс HCSCluster определяет конфигурацию инфраструктуры HCS.
Provider HCS создает Elastic Load Balance (ELB) на платформе HCS для Kubernetes API server. Для этого ELB должен быть включен режим Hybrid Load Balancing, чтобы узлы кластера также могли обращаться к API server через адрес ELB.
Для описанного рабочего процесса HCS укажите vipAddress, elbVirsubnetL4Ips и elbVirsubnetL7Ips. Каждый элемент elbVirsubnetL4Ips[].ips и elbVirsubnetL7Ips[].ips должен содержать два IP-адреса.
Если вы задаете vipDomainName, настройте HCS Cloud DNS Private Zones так, чтобы домен разрешался в vipAddress.
Перечислите каждую подсеть кластера в spec.network.subnets до того, как будете ссылаться на нее где-либо еще. Значения vipSubnetName, elbVirsubnetL4Ips[].subnetName, elbVirsubnetL7Ips[].subnetName и значения subnetName, используемые в HCSMachineConfigPool, должны присутствовать в spec.network.subnets.
Для первоначального процесса создания кластера controller может разрешить существующие метаданные подсети из name. Для существующего Ready-кластера добавьте полный объект подсети вместо одного только name. Включите id, а также neutronSubnetId для любой подсети, которую будет использовать ELB control plane. Сохраните в инвентаризации подсетей также cidr, gatewayIp, primaryDNS и secondaryDNS.
Не отключайте Hybrid Load Balancing на созданном provider ELB после создания кластера. Кластер зависит от этого режима ELB, чтобы узлы могли обращаться к API server через адрес ELB.
Не включайте spec.controlPlaneEndpoint в манифест создания. В процессе создания HCS controller вычисляет и заполняет это поле из spec.controlPlaneLoadBalancer после создания HCSCluster. Не задавайте controlPlaneEndpoint вручную и не добавляйте пустой объект controlPlaneEndpoint. Если controlPlaneEndpoint явно присутствует в манифесте, он должен содержать и host, и port.
Настройка Cluster
Ресурс Cluster в Cluster API объявляет кластер и ссылается на control plane и инфраструктурные ресурсы.
Проверка кластера
После развертывания всех ресурсов кластера проверьте, что кластер успешно создан.
Использование kubectl
Ожидаемый результат
Успешно созданный кластер должен отображать:
- Статус кластера: Running или Provisioned
- Все машины control plane: Running
- Узлы Kubernetes: Ready
- Статус модуля кластера: Completed
Добавление worker-узлов
Инструкции по добавлению worker-узлов в кластер см. в разделе Управление узлами.
Обновление кластеров
Инструкции по обновлению компонентов кластера см. в разделе Обновление кластеров.