С помощью этого руководства вы развернете приложение nginx в кластерах-участниках платформы Karmada с помощью политики распространения ресурсов. В результате вы получите опыт централизованного управления несколькими кластерами Kubernetes, настройки политик распределения ресурсов и проверки корректности работы приложения во всех выбранных кластерах. Доступ к nginx будет предоставляться только внутри кластера для целей демонстрации. Настройка сетевой связанности между кластерами-участниками в рамках этого сценария не выполняется.
Вы будете использовать следующие сервисы:
Managed Kubernetes — сервис управления кластерами Kubernetes на вычислительных ресурсах облака.
Виртуальные машины — сервис, в рамках которого предоставляется виртуальная машина для управления и подключения к кластерам Kubernetes.
Karmada — Kubernetes-совместимая платформа для централизованного управления и оркестрации приложений в мультикластерной инфраструктуре.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Разверните платформу Karmada по инструкции. Убедитесь, что k8s-кластеры evo1 и evo2 подключены как кластеры-участники в control-plane Karmada и доступны для дальнейшей работы.
1. Создайте манифест для развертывания nginx
Создайте Kubernetes-манифесты для развертывания nginx и сервиса типа ClusterIP. Эти манифесты будут основой для дальнейшего управления их распространением через Karmada.
Создайте директорию nginx-manifests в домашней директории пользователя:
mkdir $HOME/nginx-manifestsСоздайте файл nginx-deployment.yaml со следующим содержимым:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentnamespace: defaultlabels:app: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80resources:requests:memory: "64Mi"cpu: "100m"limits:memory: "128Mi"cpu: "200m"---apiVersion: v1kind: Servicemetadata:name: nginx-servicenamespace: defaultlabels:app: nginxspec:type: ClusterIPselector:app: nginxports:- name: httpport: 80targetPort: 80protocol: TCPЭтот манифест создает в Kubernetes два ресурса:
Deployment с одной репликой контейнера nginx и ограничениями по ресурсам на pod.
Service типа ClusterIP для доступа к приложению nginx внутри кластера Kubernetes.
Проверьте содержимое созданного файла:
cat $HOME/nginx-manifests/nginx-deployment.yamlКоманда должна вывести YAML-манифесты Deployment и Service, которые были записаны на предыдущем шаге.
2. Настройте политику распространения ресурсов Karmada
На этом этапе опишите политику распространения ресурсов (PropagationPolicy) для управления автоматическим размещением развертываемых ресурсов nginx в кластерах-участниках Karmada.
В директории манифестов создайте файл nginx-propagation-policy.yaml со следующим содержимым:
apiVersion: policy.karmada.io/v1alpha1kind: PropagationPolicymetadata:name: nginx-propagation-policynamespace: defaultspec:resourceSelectors:- apiVersion: apps/v1kind: Deploymentname: nginx-deployment- apiVersion: v1kind: Servicename: nginx-serviceplacement:clusterAffinity:clusterNames:- evo1- evo2replicaScheduling:replicaSchedulingType: DuplicatedПараметры политики распространения определяют:
resourceSelectors — какие ресурсы (Deployment и Service nginx) распространять из control-plane Karmada;
clusterAffinity — список кластеров (evo1 и evo2), в которые отправлять ресурсы;
replicaSchedulingType: Duplicated — дублировать ресурсы во все указанные кластеры (дополнительно смотрите возможные режимы в документации Karmada: Duplicated или Weighted).
Проверьте содержимое файла политики:
cat $HOME/nginx-manifests/nginx-propagation-policy.yaml
3. Примените манифесты через control-plane Karmada
Теперь создайте ресурсы Deployment и Service в control-plane Karmada и включите их распространение в кластеры-участники с помощью PropagationPolicy.
Убедитесь, что вы подключены к control-plane Karmada:
karmadactl --karmada-context karmada-apiserver get clustersКоманда должна вывести список кластеров-участников Karmada (ожидаются evo1 и evo2).
Примените манифест развертывания nginx:
karmadactl --karmada-context karmada-apiserver apply -f $HOME/nginx-manifests/nginx-deployment.yamlНа этом этапе ресурсы Deployment и Service будут созданы в control-plane, но еще не распространены в кластеры-участники.
Примените политику распространения PropagationPolicy:
karmadactl --karmada-context karmada-apiserver apply -f $HOME/nginx-manifests/nginx-propagation-policy.yamlПосле выполнения команды начнется процесс распространения ресурсов nginx в указанные кластеры-участники согласно правилам размещения.
4. Проверьте развертывание и статус ресурсов
Проверьте, что Karmada корректно распространила ресурсы nginx на все целевые кластеры, а сервисы и поды работают должным образом.
Проверьте список развертываний:
karmadactl --karmada-context karmada-apiserver get deploymentsПроверьте статус подов nginx во всех кластерах-участниках:
karmadactl --karmada-context karmada-apiserver get pods --operation-scope membersЭта команда выведет все поды во всех кластерах-участниках и позволит увидеть, как распределена нагрузка.
Проверьте наличие и статусы сервисов nginx:
karmadactl --karmada-context karmada-apiserver get services --operation-scope membersВ результатах должны отображаться сервисы nginx во всех кластерах-участниках.
Проверьте политику распространения ресурсов:
karmadactl --karmada-context karmada-apiserver get propagationpolicy nginx-propagation-policy -o yamlЭта команда отобразит конфигурацию вашей политики распространения и текущий статус доставки ресурсов в кластеры.
5. Проверьте работу nginx в кластерах-участниках
Теперь проверьте, что приложение nginx корректно функционирует в каждом из кластеров evo1 и evo2, и сервис доступен на уровне кластера.
Проверьте работу nginx в кластере evo1, выполнив команду:
kubectl --kubeconfig $HOME/join-clusters/evo1 run curl --rm -i --restart=Never --image=curlimages/curl -- curl http://nginx-serviceВ ответе должна отобразиться страница приветствия nginx по умолчанию, что свидетельствует о корректном функционировании сервиса.
Проверьте работу nginx в кластере evo2 аналогичной командой:
kubectl --kubeconfig $HOME/join-clusters/evo2 run curl --rm -i --restart=Never --image=curlimages/curl -- curl http://nginx-service
Результат
Вы развернули приложение nginx с помощью централизованной платформы Karmada, создали политику автоматического распределения ресурсов и проверили работу развернутого сервиса в каждом из целевых кластеров.
- Перед началом работы
- 1. Создайте манифест для развертывания nginx
- 2. Настройте политику распространения ресурсов Karmada
- 3. Примените манифесты через control-plane Karmada
- 4. Проверьте развертывание и статус ресурсов
- 5. Проверьте работу nginx в кластерах-участниках
- Результат