Kubernetes и Private Cloud
Где найти в панели управления: Kubernetes: Infrastructure › Cloud provider › CloudStack › Kubernetes (CKS) (
/infra/cloudstack?tab=k8s), затем Services › Kubernetes (Overview, Clusters, Versions, Policy). Private Cloud: Services › Private Cloud (Overview/vpc, VPC/vpc/list, Plans & pricing/vpc/plans). Включите оба модуля в разделе System › Admin › License & updates.
Назначение
- Kubernetes. Клиенты создают управляемые кластеры Kubernetes в CloudStack с помощью CloudStack Kubernetes Service (CKS). Control plane предоставляется бесплатно; клиенты оплачивают worker-ноды. NexCMP создает отдельную сеть и публичный IP для каждого кластера, изолируя кластеры клиентов друг от друга.
- Private Cloud. Клиенты получают изолированную сеть (CloudStack VPC) с маршрутизатором, подсетями (tiers), правилами брандмауэра (network ACL) и виртуальными машинами внутри нее. Услуга тарифицируется по плану пропускной способности с выделенной безлимитной скоростью (например, 50, 100, 500 Mbps, 1 и 3 Gbps). По умолчанию каждому клиенту доступен один VPC.
Оба сервиса построены на базе CloudStack и используют его API через одно подключение.
Требования
Kubernetes
| Параметр | Требование |
|---|---|
| CloudStack | 4.23 (протестировано). CKS должен быть включен (cloud.kubernetes.service.enabled = true). |
| Учетная запись | Учетная запись Domain Admin в выделенном домене, чтобы NexCMP мог создавать проект CloudStack для каждого клиента и лимиты ресурсов внутри него. См. CloudStack. |
endpoint.url | Глобальная настройка CloudStack должна указывать на ваш management API, доступный из виртуальных машин кластера. NexCMP показывает значение и результат проверки эндпоинта. |
| Версии | Как минимум одна поддерживаемая версия Kubernetes с ISO бинарных файлов в состоянии Enabled. Версии с истекшим сроком поддержки нельзя выставлять на продажу. |
| Предложение для control plane | Бесплатное сервисное предложение с точно 2 vCPU, 2048 MB RAM и CPU cap (limitcpuuse = true), видимое для учетной записи. Все остальное сервер отклоняет с cp_offering_invalid. |
| Сеть | Включенное изолированное сетевое предложение с поддержкой CKS. |
| IP-адреса | Свободные публичные IPv4-адреса в диапазоне для продажи; каждый кластер использует один. |
| Емкость | Каждый кластер расходует от 2 до 4 GB RAM на control plane и небольшую ВМ маршрутизатора. Следите за вкладками емкости. |
Private Cloud
| Параметр | Требование |
|---|---|
| CloudStack | 4.23 (протестировано) с включенным VPC. |
| Предложение VPC | Одно предложение VPC. Предложение dual-stack также выделяет каждому уровню подсеть IPv6 /64. |
| Сетевые предложения для уровней | Одно сетевое предложение на каждый тариф пропускной способности, созданное для VPC, со значением network rate (Mbps), равным тарифу, плюс одно заблокированное предложение на 1 Mbps, применяемое при блокировке VPC за неуплату. |
| Учетная запись | Выделенная учетная запись (рекомендуется Domain Admin). Сети VPC остаются в учетной записи, а не в проектах. |
| IP-адреса | Свободные публичные IPv4-адреса (каждый VPC использует один для source NAT). |
| Адресное пространство | Каждый VPC получает подсеть /16 из 10.128.0.0/9. Не используйте этот диапазон в собственных сетях. |
| Зависимости | CloudStack подключен; модуль Private Cloud. |
Подготовка инфраструктуры
Kubernetes: включение CKS и добавление версий
Включите службу и укажите эндпоинт, затем перезапустите management-сервер:
bashcmk update configuration name=cloud.kubernetes.service.enabled value=true cmk update configuration name=endpoint.url value=https://cloudstack.example.com/client/api sudo systemctl restart cloudstack-managementКонтроллер кластера обращается к
endpoint.url, поэтому адрес должен быть доступен из виртуальных машин кластера.Соберите ISO с бинарными файлами Kubernetes для продаваемой версии с помощью скрипта
create-kubernetes-binaries-iso.shиз исходного кода CloudStack, разместите его на веб-сервере и зарегистрируйте:bashcmk add kubernetessupportedversion name="Kubernetes 1.35.0" semanticversion=1.35.0 \ url=https://files.example.com/setup-v1.35.0-calico-amd64.iso zoneid=<zone-id> \ mincpunumber=2 minmemory=2048 cmk list kubernetessupportedversions filter=name,semanticversion,state,isostateДождитесь, пока статус ISO перейдет в Ready, а версия — в Enabled.
Создайте предложение для control plane, ограниченное доменом NexCMP:
bashcmk create serviceoffering name=K8S-CP-2-2 displaytext="Kubernetes control plane" \ cpunumber=2 cpuspeed=1000 memory=2048 limitcpuuse=true offerha=false domainid=<domain-id>Убедитесь, что сетевое предложение CKS включено:
bashcmk list networkofferings state=Enabled forvpc=false filter=id,name
Private Cloud: создание предложений
В интерфейсе CloudStack (Service Offerings › Network Offerings › Add network offering) или с помощью cmk:
Просмотрите список имеющихся предложений:
bashcmk list vpcofferings filter=id,name,state cmk list networkofferings forvpc=true filter=id,name,networkrate,stateИспользуйте включенное предложение VPC (dual-stack, если требуется IPv6). Если нужно создать новое, клонируйте стандартное предложение VPC в CloudStack и включите его.
Для каждого продаваемого тарифа пропускной способности создайте сетевое предложение для VPC (клонируйте стандартное «isolated network offering for VPC networks») и укажите в Network rate (Mb/s) скорость тарифа:
50,100,500,1000,3000. Включите каждое предложение.Создайте еще одно предложение со значением network rate 1 (
VPC-LOCKED-1M) для заблокированных VPC: клиенты по-прежнему смогут подключаться к своим серверам по SSH, но скорость будет ограничена.Запишите UUID каждого offering: они понадобятся NexCMP в следующем разделе.
Предустановленные ID offering отсутствуют в вашем облаке
Форма Private Cloud предварительно заполнена UUID offering из другой инсталляции CloudStack. Замените каждый из них на собственный, иначе первый же заказ VPC завершится ошибкой.
Подключение в NexCMP
Kubernetes
Откройте Infrastructure › Cloud provider › CloudStack и выберите вкладку Kubernetes (CKS). В карточке справа CKS status on CloudStack (read-only) отображаются
kubernetesserviceenabled,endpoint.urlс Endpoint check, network offering для CKS, параметрыcloud.kubernetes.*и список ISO и версий. Нажмите Recheck после внесения исправлений.В Sales config выберите Control plane Offering (появится предупреждение, если параметры отличаются от ровно 2 vCPU / 2048 MB / CPU cap), укажите Max workers per cluster (от 1 до 9: CKS поддерживает до 10 узлов, включая управляющий), включите Enable CKS for this backend и нажмите Save. Переключатель остается неактивным, пока не выбран offering.

Откройте Services › Kubernetes › Versions и нажмите Sync from CloudStack. Включите Available for new clusters для продаваемых версий, установите версию по умолчанию и при необходимости дату End of life (EOL).
Откройте Services › Kubernetes › Policy. В Worker plans добавьте тарифы с Plan code (латинские буквы A-Z, цифры 0-9, дефис, до 16 символов). Укажите NVMe per worker (GB), Min and max workers и лимиты кластера (активные кластеры на аккаунт, операций создания за 24 часа, глобальный лимит, параллельные операции CKS). Затем включите Sell Kubernetes (CKS). В продаже должен оставаться как минимум один тариф.

Private Cloud
Откройте Services › Private Cloud (Overview). В карточке политики замените VPC offering и Locked offering tier на собственные UUID. Проверьте лимиты (VPC на аккаунт, уровней tier, ВМ и правил ACL на VPC, необходимый для создания баланс в часах стоимости тарифа, смен тарифа за 24 часа, параллельных операций, где 0 — экстренная остановка) и DNS-серверы. Нажмите Save (потребуется указать причину).

Откройте Services › Private Cloud › Plans & pricing. Для каждого тарифа нажмите Edit и укажите VND price per month, On sale и UUID CloudStack tier offering, пропускная способность которого соответствует скорости тарифа в Mbps. В строке отображаются себестоимость и прибыль при полной нагрузке, что позволяет увидеть тарифы ниже вашей себестоимости.

Включите Sell Private Cloud. Для предварительного тестирования добавьте ID тестовых аккаунтов в Beta accounts: эти аккаунты смогут использовать сервис при выключенном переключателе продаж.
Проверка
- Kubernetes: карточка статуса отображает
kubernetesserviceenabled: true, успешный endpoint check и включенную версию. Создайте тестовый кластер с одним worker-узлом от лица клиента; он должен перейти в статус running, аkubectl get nodesдолжен показать готовность. Затем удалите его: сеть и IP вернутся в пул. - Private Cloud: создайте VPC с минимальным тарифом от лица тестового клиента. VPC отображает статус active, уровень tier получает подсеть, ВМ на уровне tier имеет доступ в интернет через роутер VPC, а Change plan на более крупный тариф вступает в силу примерно за 20 секунд без разрыва соединений.
Ограничения и примечания
- Kubernetes: worker-узлы тарифицируются как ВМ по ценам тарифа и учитываются как ВМ в лимитах на ВМ. Кластер может содержать не более 9 worker-узлов из-за ограничения CKS в 10 узлов.
- Kubernetes: control plane, роутер и публичный IP кластера бесплатны для клиента; их себестоимость покрываете вы.
- Private Cloud: все тарифы — unmetered. Цены в форме указаны во вьетнамских донгах в месяц; в столбце себестоимости используется ориентировочная цена, поэтому используйте собственные расчеты.
- Заблокированный VPC ограничен скоростью 1 Mbps, не тарифицируется и не удаляется автоматически.
- Private Cloud использует один роутер на VPC, а не резервированную пару. В случае сбоя его хоста CloudStack восстанавливает его за несколько минут.
Устранение неполадок
| Симптом | Причина | Решение |
|---|---|---|
cp_offering_invalid / "Этот Offering не соответствует 2 vCPU / 2048 MB / limitcpuuse" | Offering для control-plane имеет другие параметры или не имеет ограничения CPU | Создайте offering, как описано в шаге 3, и выберите его снова. |
| Переключатель Enable CKS неактивен | Не выбран offering для control-plane | Сначала выберите один из них. |
kubernetesserviceenabled: false | CKS отключен в CloudStack | Включите его и перезапустите management server. |
| Ошибка проверки endpoint | endpoint.url недоступен из виртуальных машин кластера | Укажите доступный URL, перезапустите management server и нажмите Recheck. |
| "EOL: невозможно включить для продажи" | Срок поддержки версии истек | Зарегистрируйте более новую версию. |
| "Нет версий: нажмите Sync from CloudStack" | Не зарегистрировано ни одной версии Kubernetes | Зарегистрируйте версию и выполните синхронизацию. |
| "CKS backend отключен: клиенты не могут создавать кластеры, даже если включен флаг продажи" | Переключатель продаж включен, но бэкенд CKS отключен | Включите CKS на вкладке CloudStack. |
| "Как минимум 1 план должен быть в продаже" | Удален последний план worker | Оставьте хотя бы один план или отключите продажу Kubernetes. |
| Создание кластера зависло | Недостаточно ресурсов или отсутствует ISO | Проверьте вкладки емкости и статус ISO для этой версии. |
| Сбой создания нового VPC на первом шаге | Недопустимый ID для VPC offering или tier offering | Замените каждый UUID offering на значение из вашей инсталляции CloudStack. |
| "cs_offering_id должен быть UUID" | ID offering не является UUID | Вставьте id из cmk list networkofferings. |
| Ошибка при смене плана | Новый tier offering не существует или указан неверный network rate | Проверьте UUID для offering и его network rate. |