• Русский
  • Инфраструктурные ресурсы для Huawei Cloud Stack

    Обзор

    Перед тем как писать YAML для кластера Huawei Cloud Stack (HCS), сначала подготовьте все необходимые входные данные HCS. На этой странице перечислены значения, источники и ограничения, которые должны быть готовы до заполнения любого манифеста Secret, HCSMachineConfigPool, HCSMachineTemplate, KubeadmControlPlane или HCSCluster.

    Используйте эту страницу как контрольный список подготовки. После завершения перейдите к Создание кластеров в Huawei Cloud Stack и Управление узлами в Huawei Cloud Stack для выполнения workflow манифестов.

    INFO

    Требование к namespace

    Все инфраструктурные ресурсы HCS должны быть развернуты в namespace cpaas-system, чтобы обеспечить корректную интеграцию с платформой в качестве business-кластеров.

    Перед написанием YAML

    Подготовьте следующие входные данные перед созданием или редактированием любых манифестов кластера:

    Входные данныеИспользуется вИсточникТребуется до YAMLПримечания
    Имя кластераCluster, KubeadmControlPlane, HCSCluster, шаблоны, пулыВаш план именования кластераДаИспользуйте одно и то же имя кластера последовательно во всех связанных ресурсах
    Версия Kubernetes и базовая версия компонентовCluster, KubeadmControlPlaneОдобренная базовая версия релиза; OS Support Matrix только для перечисленных в ней версий компонентовДаПодготовьте проверенную версию Kubernetes, image repository, DNS image repository и tag, tag образа etcd, версию Kube-OVN, Pod CIDR, Service CIDR и Kube-OVN join CIDR
    accessKey и secretKeySecret с учетными данными HCSHCS My Settings > Access KeysДаЗакодируйте эти значения в base64 перед применением Secret
    projectIDSecret с учетными данными HCSHCS My Settings > Resource SpacesДаИспользуйте Resource Space ID, а не отображаемое имя
    externalGlobalDomainSecret с учетными данными HCSДомен доступа к платформе HCSДаИспользуйте домен платформы HCS, который должен вызывать provider
    schemaSecret с учетными данными HCSАдминистратор HCSНетНеобязательная схема API для endpoint HCS IAM. Если не указано, provider использует https
    regionSecret с учетными данными HCSАдминистратор HCSДаАдминистраторы tenant не могут получить это значение из UI HCS
    imageNameHCSMachineTemplateИнвентарь образов HCSДаИспользуйте проверенное имя образа HCS для выбранного образа Alauda OS
    flavorNameHCSMachineTemplateАдминистратор HCSДаИспользуйте значение HCS API, распознаваемое provider и сопоставленное с Flavor.Name, а не отображаемое имя в UI tenant
    availabilityZoneHCSMachineTemplateАдминистратор HCSДаИспользуйте значение HCS API, распознаваемое provider и сопоставленное с ZoneName, а не отображаемое имя в UI tenant
    Корневой диск, временный data volume и layout постоянных дисковHCSMachineTemplate, HCSMachineConfigPoolПлан хранения кластераДаСпланируйте размеры дисков и точки монтирования до написания шаблона и пула. Размещайте диски, которые можно воссоздать вместе с VM, в HCSMachineTemplate.spec.template.spec.dataVolumes[]. Размещайте диски, которые должны пережить замену VM, например /var/cpaas, в HCSMachineConfigPool.spec.configs[].persistentDisks[]
    Имя VPC и имя security groupHCSClusterИнвентарь сети HCSДаУбедитесь, что указанная VPC и security group уже существуют и доступны для использования
    Инвентарь subnet кластераHCSCluster, HCSMachineConfigPool, ELB control planeИнвентарь сети HCSДаПодготовьте имя subnet, ID subnet, метаданные subnet, связанные с ELB, CIDR, gateway, значения DNS и планируемый диапазон свободных IP для каждого subnet, который будет использовать кластер
    Hostname control plane и worker, а также статические IPHCSMachineConfigPoolПланирование subnet HCSДа для workflow со статическими IPПодготовьте как минимум одну запись на каждую планируемую replica
    vipAddress и vipSubnetNameHCSCluster.spec.controlPlaneLoadBalancerПлан адресов ELB HCSДаvipAddress должен принадлежать vipSubnetName
    elbVirsubnetL4Ips и elbVirsubnetL7IpsHCSCluster.spec.controlPlaneLoadBalancerПлан адресов ELB HCSДаКаждая запись L4 или L7 должна содержать ровно два IP-адреса
    vipDomainNameHCSCluster.spec.controlPlaneLoadBalancerHCS Cloud DNS Private ZonesРекомендуетсяНастройте домен так, чтобы он уже разрешался в vipAddress
    Политика размещения HA control planeHCSCluster.spec.controlPlaneHAПлан политики планирования HCSНетТребуется только при включении server groups control plane, управляемых provider. Выберите anti-affinity или soft-anti-affinity
    controlPlaneEndpointCluster.status / производный endpoint кластераУправляется controllerНетНе подготавливайте и не указывайте это поле в манифестах создания; controller заполнит его после готовности ELB

    Входные данные для Secret с учетными данными

    Создавайте Secret с учетными данными HCS только после того, как собраны все необходимые значения.

    Ключ SecretЗначениеГде получить
    accessKeyID access key HCSHCS My Settings > Access Keys
    secretKeysecret access key HCSHCS My Settings > Access Keys
    projectIDResource Space IDHCS My Settings > Resource Spaces
    externalGlobalDomainДомен доступа к платформе HCSДомен платформы HCS, предоставленный для доступа к API
    regionЗначение API региона HCS, используемое providerАдминистратор HCS
    schemaНеобязательная схема API для endpoint HCS IAM. Если не указано, provider использует httpsАдминистратор HCS

    Существующие Secret с учетными данными, созданные без schema, продолжают работать без изменений. Указывайте schema только если ваш endpoint HCS IAM использует http вместо значения по умолчанию https.

    Примечание: Администраторы tenant не могут получить region из UI HCS. Получите точное значение, распознаваемое provider, у администратора HCS перед кодированием Secret.

    Значения для Compute

    Подготовьте образ VM, flavor, availability zone, layout временного data volume и layout постоянных дисков перед написанием HCSMachineTemplate и HCSMachineConfigPool.

    Входные данныеРекомендации
    imageNameИспользуйте проверенное имя образа HCS для образа Alauda OS, который вы хотите развернуть
    flavorNameИспользуйте значение HCS API, распознаваемое provider и сопоставленное с Flavor.Name. Не используйте отображаемое имя в UI tenant
    availabilityZoneИспользуйте значение HCS API, распознаваемое provider и сопоставленное с ZoneName. Не используйте отображаемое имя в UI tenant
    Корневые и временные data volumeЗаранее спланируйте системные диски и временные data disk. Шаблоны control plane обычно используют временные data volume для /var/lib/etcd, /var/lib/kubelet и /var/lib/containerd. Шаблоны worker обычно используют временные data volume для /var/lib/kubelet и /var/lib/containerd.
    Постоянные диски, управляемые пуломЗаранее спланируйте диски, которые должны пережить замену VM. Используйте эту модель для /var/cpaas и другого node-local состояния, которое необходимо сохранять при rolling replacement.

    Примечание: Администраторы tenant не могут получить значения flavorName и availabilityZone, распознаваемые provider, из UI HCS. Получите точные значения API у администратора HCS перед написанием манифеста.

    Базовая версия и версия компонентов

    Используйте OS Support Matrix только для тех версий компонентов, которые в ней явно перечислены, таких как Kubernetes, coredns, etcd и pause для поддерживаемых образов Alauda OS.

    OS Support Matrix не является полным источником всех значений манифеста HCS. Перед написанием YAML также получите одобренную базовую версию релиза для таких значений, как container image repository, DNS image repository, версия Kube-OVN, Kube-OVN join CIDR, Pod CIDR и Service CIDR. Если ваш релиз еще не публикует полный источник базовой версии, используйте значения, проверенные для вашей среды platform owner или release owner.

    Инвентарь сети

    Подготовьте полный сетевой инвентарь кластера перед созданием ресурсов HCSCluster или HCSMachineConfigPool.

    Ваш план сети должен включать:

    • Целевое имя VPC
    • Целевое имя security group
    • Имя каждого subnet, который будет использовать кластер
    • ID subnet и метаданные subnet, связанные с ELB, для каждого subnet
    • CIDR каждого subnet
    • Значения gateway и DNS для каждого subnet
    • Планируемые диапазоны свободных IP для узлов control plane, worker, VIP ELB и IP виртуальных subnet ELB L4/L7

    Если один кластер использует несколько subnet, эти subnet должны принадлежать одной и той же VPC и должны позволять узлам кластера взаимодействовать друг с другом.

    Важно: HCSCluster.spec.network.subnets — это инвентарь subnet кластера. Каждый subnetName, на который ссылаются HCSMachineConfigPool, vipSubnetName, elbVirsubnetL4Ips[].subnetName и elbVirsubnetL7Ips[].subnetName, уже должен существовать в этом списке.

    Для первоначального потока создания кластера controller может разрешить существующие subnet по имени до того, как кластер станет Ready. Для существующего Ready-кластера не добавляйте только имя subnet. Добавьте полный объект subnet, включая как минимум name, id и, если subnet используется ELB control plane, neutronSubnetId. Также сохраняйте cidr, gatewayIp, primaryDNS и secondaryDNS в инвентаре, чтобы список subnet кластера оставался полным.

    Ограничения Multi-NIC

    Несколько NIC объявляются в HCSMachineConfigPool.spec.configs[].networks[]. Каждый элемент networks[] выбирает только subnet и статический IP для одного NIC.

    Текущий provider не позволяет задавать:

    • Роль или назначение каждого NIC, например management-, service- или storage-трафик
    • Default gateway для конкретного NIC
    • Static routes или route metrics
    • Настройки DNS для каждого NIC

    Рассматривайте текущую возможность multi-NIC как подключение NIC плюс выбор subnet и статического IP.

    План адресов ELB для control plane

    Provider HCS автоматически создает Elastic Load Balance (ELB) для control plane. Спланируйте входные данные ELB до написания HCSCluster.

    В этой документации используется workflow ELB со статическим адресом. Подготовьте все адреса, связанные с ELB, до написания HCSCluster:

    • vipSubnetName
    • vipAddress
    • elbVirsubnetL4Ips с ровно двумя IP L4
    • elbVirsubnetL7Ips с ровно двумя IP L7
    • Необязательный vipDomainName

    Если вы задаете vipDomainName, настройте HCS Cloud DNS Private Zones так, чтобы домен уже разрешался в vipAddress.

    Операционные ограничения

    • Provider создает ELB и включает Hybrid Load Balancing, чтобы узлы кластера могли обращаться к API server через адрес ELB.
    • Не отключайте Hybrid Load Balancing на ELB HCS после создания кластера.
    • Не указывайте spec.controlPlaneEndpoint в манифесте создания. Controller заполнит это поле после готовности ELB.

    План размещения HA control plane

    Для control plane с несколькими replica вы можете настроить provider HCS так, чтобы он создавал и поддерживал server group, принадлежащую provider, для размещения ECS control plane. Включите это через HCSCluster.spec.controlPlaneHA при написании манифеста кластера.

    Спланируйте политику размещения до включения функции:

    ПолитикаПоведениеОперационное влияние
    anti-affinityЖесткая anti-affinity. HCS должен размещать экземпляры ECS control plane на разных хостах.Используйте, когда требуется строгое разделение по хостам. Создание ECS может завершиться с ошибкой, если HCS не найдет достаточно ресурсов, удовлетворяющих правилу.
    soft-anti-affinityAnti-affinity наилучшим образом. HCS пытается размещать экземпляры ECS control plane на разных хостах.Используйте, когда предпочтительно распределенное размещение, но вы не хотите, чтобы правило блокировало создание ECS. Итоговое размещение все равно может оказаться на одном хосте.

    Эта функция действует на уровне кластера и применяется только к машинам control plane. Она не настраивает пулы worker-узлов. Provider создает server group, привязывает к этой группе запросы на создание ECS control plane, записывает server group в HCSCluster.status.controlPlaneHA и сообщает о прогрессе через condition ControlPlaneHAReady.

    Для существующего кластера включение HCSCluster.spec.controlPlaneHA создает и записывает server group, принадлежащую provider, но не добавляет обратно уже запущенные экземпляры ECS control plane в эту группу. Размещение в server group применяется, когда ECS control plane создается с os:scheduler_hints.group. Чтобы привести существующий кластер к целевому состоянию, включите controlPlaneHA, дождитесь HCSCluster.status.controlPlaneHA.id, а затем запустите rolling replacement control plane, чтобы заменяющие экземпляры ECS создавались с server group. Пока текущие участники ECS control plane не будут заменены и обнаружены в группе, ControlPlaneHAReady может оставаться False с причиной ControlPlaneHAPending.

    Пример манифеста и команды проверки см. в Настройка HCSCluster и Проверка HA control plane.

    План пула статических IP

    На этой странице основное внимание уделяется workflow с запланированными статическими IP.

    Подготовьте следующее перед созданием ресурсов HCSMachineConfigPool:

    • Hostname control plane и статические IP
    • Hostname worker и статические IP, если worker создаются
    • Достаточное количество записей для покрытия начального количества replica
    • Любые постоянные диски, управляемые пулом, которые должны быть привязаны к каждому фиксированному hostname

    Для control plane со статическими IP и как минимум тремя replica рекомендуемый путь обновления использует KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0. Этот подход с масштабированием вниз, а затем вверх обычно не требует дополнительных IP control plane. Если вы планируете топологию только для создания с одним control plane (replicas: 1), не копируйте эту настройку rollout в манифест создания. Для пулов, использующих постоянные диски, сохраняйте maxSurge: 0, поскольку каждый диск привязан к одному фиксированному hostname и слоту.

    Постоянные диски, управляемые пулом

    Объявляйте диски HCS, которые должны пережить удаление и повторное создание VM, в HCSMachineConfigPool.spec.configs[].persistentDisks[].

    Используйте эту модель для /var/cpaas, данных мониторинга, логов или другого node-local состояния, которое необходимо сохранять во время rolling replacement. Оставляйте HCSMachineTemplate.spec.template.spec.dataVolumes[] для временных дисков, которые могут быть пересозданы с каждым новым ECS.

    hcs-machine-config-pool-with-persistent-disk.yaml
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: HCSMachineConfigPool
    metadata:
      name: <cluster-name>-cp-pool
      namespace: cpaas-system
      labels:
        cluster.x-k8s.io/cluster-name: <cluster-name>
    spec:
      configs:
        - hostname: <node-hostname>
          networks:
            - subnetName: <subnet-name>
              ipAddress: <node-ip>
          persistentDisks:
            - slot: 0
              size: 100
              type: SSD
              mountPath: /var/cpaas
              format: xfs
              mountOptions:
                - defaults
                - noatime

    Описание полей постоянного диска:

    ПолеОписание
    slotПозиция диска внутри одной конфигурации машины. Слоты должны быть уникальными и идти без пропусков от 0 для одного и того же hostname.
    sizeРазмер диска EVS в GB. Для вновь создаваемых data disk EVS используйте от 10 до 32768 GB. Существующие claimed диски должны соответствовать текущему размеру.
    typeИмя типа диска EVS, доступного в целевой availability zone.
    mountPathПуть монтирования внутри guest OS. Используйте /var/cpaas для platform state, который должен пережить замену VM. Размер этого диска должен учитывать данные platform monitoring, логов и plug-in.
    formatФайловая система, используемая при инициализации нового диска. Если не указано, provider использует xfs. Существующие файловые системы не переформатируются при повторном подключении.
    mountOptionsПараметры монтирования, применяемые, когда replacement VM монтирует диск. Если не указано, provider использует defaults,noatime.

    Правила обновления:

    • Не указывайте один и тот же mountPath одновременно в HCSMachineConfigPool.spec.configs[].persistentDisks[] и HCSMachineTemplate.spec.template.spec.dataVolumes[].
    • Вы можете добавлять новые записи persistentDisks[] в существующую конфигурацию машины. Provider создает или claim-ит диск EVS, но не выполняет hot-mount диска в работающий ECS. Запустите rolling replacement с maxSurge: 0, прежде чем ожидать, что новый диск будет отформатирован и смонтирован внутри guest OS.
    • Не удаляйте и не изменяйте slot, size, type, format или mountPath после того, как provider принял запись постоянного диска. Эти поля определяют идентичность диска и contract claim.
    • Вы можете обновить mountOptions. Изменение вступает в силу, когда узел заменяется, и replacement VM применяет свои подключения дисков.
    • Для пулов, использующих постоянные диски, сохраняйте KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0 и MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0.

    Сопоставление значений с YAML

    Используйте следующее сопоставление после завершения контрольного списка подготовки:

    Подготовленный входПоля YAML
    accessKey, secretKey, projectID, externalGlobalDomain, region, optional schemaSecret.data.*
    imageName, flavorName, availabilityZone, root volume и layout временного data volumeHCSMachineTemplate.spec.template.spec.*
    Hostname control plane и worker, статические IP и постоянные диски, управляемые пуломHCSMachineConfigPool.spec.configs[]
    Имя VPC, инвентарь subnet, имя security groupHCSCluster.spec.network.*
    vipAddress, vipSubnetName, vipDomainName, elbVirsubnetL4Ips, elbVirsubnetL7IpsHCSCluster.spec.controlPlaneLoadBalancer.*
    Политика размещения HA control planeHCSCluster.spec.controlPlaneHA.*
    Версия Kubernetes и базовая версия компонентовKubeadmControlPlane.spec.version, Cluster.spec.clusterNetwork.*, annotations кластера и связанные настройки bootstrap

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

    После завершения контрольного списка подготовки: