С помощью этого руководства вы развернете мультикластерное окружение на базе Managed Kubernetes при помощи платформы Karmada. Вы научитесь создавать и конфигурировать кластеры Kubernetes, управлять доступом и интегрировать несколько кластеров через централизованную платформу. В результате вы получите рабочую мультикластерную инфраструктуру для одновременного и унифицированного управления приложениями в разных кластерах Kubernetes.
Вы будете использовать следующие сервисы:
Managed Kubernetes — сервис управления кластерами Kubernetes на вычислительных ресурсах облака.
Виртуальные машины — сервис, в рамках которого предоставляется виртуальная машина для подключения и администрирования кластеров Kubernetes.
Karmada — Kubernetes-совместимая платформа для централизованного управления и оркестрации приложений в мультикластерной инфраструктуре.
Шаги:
Перед началом работы
Если вы уже зарегистрированы, войдите под своей учетной записью.
1. Сгенерируйте ключи доступа для интеграции
Получите ключи для программного доступа к ресурсам облака Cloud.ru, которые понадобятся для интеграции с Managed Kubernetes.
Сгенерируйте ключи доступа (Key ID и Key Secret) для вашего аккаунта по инструкции.
Сохраните значения Key ID и Key Secret в безопасном месте.
2. Разверните ресурсы в облаке
На этом шаге вы подготовите подсети, NAT-шлюз и виртуальную машину, которая будет использоваться для управления кластерами.
Создайте три отдельные подсети в одной зоне доступности (например, AZ2) для размещения кластеров Managed Kubernetes.
Создайте NAT-шлюз (SNAT) в этой же зоне.
Создайте виртуальную машину с подсетью и публичным IP.
3. Подготовьте окружение виртуальной машины
На этом шаге вы настроите окружение для последующей работы с кластерами Kubernetes.
Подключитесь к виртуальной машине по SSH, используя соответствующий клиент.
Установите на виртуальной машине необходимые инструменты для работы с Managed Kubernetes:
Установите Git и клонируйте репозиторий Karmada:
Установите Git (команда приведена для ОС на базе Ubuntu/Debian):
sudo apt update && sudo apt install -y gitКлонируйте официальный репозиторий Karmada:
git clone https://github.com/karmada-io/karmada.git
Установите Go версии 1.24.6:
ПримечаниеПроверьте версию Go в файле go.mod репозитория karmada.
Загрузите и установите Go:
curl -fsSLo go1.24.6.linux-amd64.tar.gz https://go.dev/dl/go1.24.6.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.24.6.linux-amd64.tar.gzecho 'export GOROOT=/usr/local/go' >> ~/.bashrcecho 'export GOPATH=$HOME/go' >> ~/.bashrcecho 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrcsource ~/.bashrcПроверьте корректность установки:
go version
Установите Docker:
curl -fsSL https://get.docker.com -o get-docker.shsudo sh ./get-docker.shsudo groupadd dockersudo usermod -aG docker $USERnewgrp docker
4. Создайте и настройте кластеры Managed Kubernetes
На этом шаге вы создадите основной кластер для control plane Karmada и два кластера-участника.
Создайте три кластера в сервисе Managed Kubernetes: основной (control plane) и два кластера-участника. Для каждого выберите ранее созданные подсети и разместите их в одной VPC.
Основной кластер:
Имя: mk8s-karmada-control-plane
Число мастер-узлов: 1
Ресурсы мастер-узла: 2 vCPU, 4 ГБ RAM
Публичный IP: включен
Подсеть сервисов: 10.101.0.0/16
Подсеть подов: 10.102.0.0/16
Конфигурация группы узлов: 2 vCPU, гарантированная доля vCPU — 30%, 4 ГБ RAM
Количество узлов: 3
Кластер-участник 1:
Имя: mk8s-evo1
Число мастер-узлов: 1
Ресурсы мастер-узла: 2 vCPU, 4 ГБ RAM
Публичный IP: включен
Подсеть сервисов: 10.111.0.0/16
Подсеть подов: 10.112.0.0/16
Конфигурация группы узлов: 2 vCPU, гарантированная доля vCPU — 30%, 4 ГБ RAM
Количество узлов: 3
Кластер-участник 2:
Имя: mk8s-evo2
Число мастер-узлов: 1
Ресурсы мастер-узла: 2 vCPU, 4 ГБ RAM
Публичный IP: включен
Подсеть сервисов: 10.121.0.0/16
Подсеть подов: 10.122.0.0/16
Конфигурация группы узлов: 2 vCPU, гарантированная доля vCPU — 30%, 4 ГБ RAM
Количество узлов: 3
Дождитесь окончания создания кластеров. Убедитесь, что в личном кабинете статус всех кластеров — «Запущено».
5. Настройте подключение к кластерам Kubernetes
На этом шаге вы обеспечите конфигурирование доступа к каждому кластеру с управляющей виртуальной машины.
Скачайте файлы kubeconfig для всех кластеров в личном кабинете.
Создайте директорию .kube, которая будет использоваться по умолчанию для основного кластера:
mkdir -p $HOME/.kubeСоздайте директорию для конфигураций кластеров-участников:
mkdir -p $HOME/join-clustersСохраните файлы kubeconfig по следующим путям:
mk8s-karmada-control-plane: $HOME/.kube/config (по умолчанию)
mk8s-evo1: $HOME/join-clusters/evo1
mk8s-evo2: $HOME/join-clusters/evo2
Задайте значения <KEY_ID> и <KEY_SECRET> для параметров CLOUDRU_KEY_ID и CLOUDRU_SECRET_ID с помощью команды:
sed -i \-e '/name: CLOUDRU_KEY_ID/ {n; s/value: ""/value: "<KEY_ID>"/}' \-e '/name: CLOUDRU_SECRET_ID/ {n; s/value: ""/value: "<KEY_SECRET>"/}' \$HOME/.kube/config \$HOME/join-clusters/evo1 \$HOME/join-clusters/evo2Где:
<KEY_ID> — сгенерированный ранее Key ID.
<KEY_SECRET> — сгенерированный ранее Key Secret.
Проверьте доступ к кластерам Kubernetes:
kubectl cluster-infokubectl --kubeconfig=$HOME/join-clusters/evo1 cluster-infokubectl --kubeconfig=$HOME/join-clusters/evo2 cluster-infoУбедитесь, что каждая команда возвращает информацию о кластере без ошибок аутентификации.
6. Настройте внешний балансировщик нагрузки для Karmada
На этом шаге вы создадите внешний балансировщик, чтобы организовать доступ к API-серверу Karmada через сервис Load Balancer.
Мы будем устанавливать Karmada на кластер mk8s-karmada-control-plane с помощью скрипта установки из репозитория Karmada. При установке необходимо указать каким образом мы будем обращаться к API-серверу Karmada:
через HostNetwork — отправка обращений на порт tcp/5443 непосредственно узла, на котором будет запущен под karmada-apiserver;
через LoadBalancer — отправка обращений к API-серверу через балансировщик нагрузки. Балансировщик нагрузки слушает порт tcp/5443 и переадресует наши запросы поду karmada-apiserver.
В этом сценарии мы будем обращаться к API-серверу через LoadBalancer.
Важно учесть, что скрипт установки сначала генерирует все необходимые сертификаты, а затем создает все необходимые ресурсы, в том числе сервис LoadBalancer. Скрипт создает сертификаты для серверных компонентов с опцией SAN. Поскольку скрипт в начале не может знать IP-адрес балансировщика нагрузки, т.к. он еще не создан, то он не добавляет этот IP-адрес как альтернативное имя субъекта. Из-за этого вы не сможете подключиться к API-серверу через балансировщик нагрузки. Чтобы выйти из ситуации, вы можете перевыпустить сертификаты после установки, но этот путь довольно ресурсозатратный.
Также вы можете, узнав IP-адрес балансировщика, переустановить Karmada. В этом случае вы не застрахованы, что IP-адрес балансировщика будет другим. Мы предлагаем создать заранее namespace karmada-system и сервис типа LoadBalancer. Когда вы создадите балансировщик нагрузки в кластере Kubernetes, платформа автоматически создаст балансировщик нагрузки в сервисе Evolution Load Balancer с параметрами сервиса Kubernetes.
Создайте папку karmada-manifests:
mkdir $HOME/karmada-manifestsСоздайте там файл karmada.yaml и скопируйте следующий манифест:
apiVersion: v1kind: Namespacemetadata:labels:kubernetes.io/metadata.name: karmada-systemname: karmada-system---apiVersion: v1kind: Servicemetadata:name: karmada-apiserverlabels:app: karmada-apiserverannotations:loadbalancer.mk8s.cloud.ru/type: "external"loadbalancer.mk8s.cloud.ru/health-check-timeout-seconds: "5"loadbalancer.mk8s.cloud.ru/health-check-interval-seconds: "5"loadbalancer.mk8s.cloud.ru/health-check-unhealthy-threshold-count: "4"loadbalancer.mk8s.cloud.ru/health-check-healthy-threshold-count: "4"namespace: karmada-systemspec:type: LoadBalancerselector:app: karmada-apiserverports:- name: karmada-apiserver-kubectlport: 5443protocol: TCPtargetPort: 5443Примените манифест к основному кластеру Kubernetes:
kubectl apply -f $HOME/karmada-manifests/karmada.yamlУбедитесь, что сервис создан:
kubectl -n karmada-system get svc karmada-apiserverПроверьте, что сервис отображается, статус внешнего IP — <pending>. Это означает, что Evolution Load Balancer создает ресурс и назначает публичный IP. Подождите около 8-10 минут, пока балансировщик нагрузки получит внешний IP-адрес и закончит настройку.
7. Установите Karmada и интегрируйте кластеры-участники
На этом шаге вы установите Karmada на основной кластер, учитывая внешний IP-адрес балансировщика, и подключите оба кластера-участника.
После назначения публичного IP для балансировщика получите этот IP-адрес:
kubectl -n karmada-system get svc karmada-apiserver -o jsonpath="{range .status.loadBalancer.ingress[*]}{.ip}{'\n'}{end}"Скопируйте полученный IP и вставьте его в установочный скрипт deploy-karmada.sh для корректной генерации сертификатов:
sed -i "1iKARMADA_APISERVER_IP=\"<IP_BALANCER>\"" $HOME/karmada/hack/deploy-karmada.shsed -i 's#karmada_apiserver_alt_names=("karmada-apiserver.karmada-system.svc.cluster.local" "karmada-apiserver.karmada-system.svc" "localhost" "127.0.0.1" $(util::get_apiserver_ip_from_kubeconfig "${HOST_CLUSTER_NAME}"))#karmada_apiserver_alt_names=("karmada-apiserver.karmada-system.svc.cluster.local" "karmada-apiserver.karmada-system.svc" "localhost" "127.0.0.1" "${KARMADA_APISERVER_IP}" $(util::get_apiserver_ip_from_kubeconfig "${HOST_CLUSTER_NAME}"))#' $HOME/karmada/hack/deploy-karmada.shsed -i 's/HOST_CLUSTER_NAME=${HOST_CLUSTER_NAME:-"karmada-host"}/HOST_CLUSTER_NAME=${HOST_CLUSTER_NAME:-"karmada-apiserver"}/' $HOME/karmada/hack/deploy-karmada.shГде:
<IP_BALANCER> — публичный IP-адрес балансировщика нагрузки.
Установите переменную окружения, чтобы скрипт используя сервис Load Balancer:
export LOAD_BALANCER=trueЗапустите установку Karmada на кластер mk8s-karmada-control-plane:
$HOME/karmada/hack/remote-up-karmada.sh $HOME/.kube/config <K8S_KARMADA_CONTEXT_NAME>Где:
<K8S_KARMADA_CONTEXT_NAME> — имя контекста кластера из файла конфигурации.
Проверьте, что все компоненты Karmada развернуты корректно:
kubectl get pods -n karmada-systemkubectl get services -n karmada-systemУстановите инструмент CLI karmadactl:
Скачайте и установите утилиту:
curl -s https://raw.githubusercontent.com/karmada-io/karmada/master/hack/install-cli.sh | sudo bashПроверьте, что karmadactl успешно установлена:
karmadactl version
Подключите оба кластера-участника к Karmada:
Для кластера mk8s-evo1 выполните комманду:
karmadactl join evo1 --karmada-context karmada-apiserver --cluster-kubeconfig $HOME/join-clusters/evo1Для кластера mk8s-evo2 выполните комманду:
karmadactl join evo2 --karmada-context karmada-apiserver --cluster-kubeconfig $HOME/join-clusters/evo2
Проверьте, что оба кластера успешно добавлены и отображаются со статусом «Ready»:
karmadactl --karmada-context karmada-apiserver get clustersВ консоли должны отобразиться оба кластера: evo1 и evo2, статус — «Ready».
Результат
Вы развернули мультикластерную инфраструктуру Evolution Managed Kubernetes, подготовили внешний балансировщик нагрузки и добавили кластеры-участники control plane Karmada. Теперь вы можете централизованно управлять приложениями в распределенной среде Kubernetes, расширять масштабируемость и надежность ваших сервисов.
- Перед началом работы
- 1. Сгенерируйте ключи доступа для интеграции
- 2. Разверните ресурсы в облаке
- 3. Подготовьте окружение виртуальной машины
- 4. Создайте и настройте кластеры Managed Kubernetes
- 5. Настройте подключение к кластерам Kubernetes
- 6. Настройте внешний балансировщик нагрузки для Karmada
- 7. Установите Karmada и интегрируйте кластеры-участники
- Результат