Использование Artifact Registry при развертывании приложений в Managed Kubernetes
Вы можете хранить Docker-образы в реестре Artifact Registry и использовать их при развертывании приложений в кластере Managed Kubernetes.
В этом руководстве загрузка образа в реестр и управление кластером Managed Kubernetes осуществляется с помощью виртуальной машины. В качестве примера используется образ nginx из официального репозитория Docker Hub.
Перед началом работы
Создайте реестр Artifact Registry с именем
k8s-registry.Создайте NAT-шлюз для подсети, в которой будет развернут кластер Managed Kubernetes.
- C именем
sa-k8sи рольюregistry.puller— для работы группы узлов Managed Kubernetes. - С именем
sa-vmи ролямиeditorиregistry.pusher— для инициализации MWS CLI на виртуальной машине, загрузки образа и работы с утилитойkubectl.
Создайте кластер Managed Kubernetes и группу узлов для него. При создании группы используйте сервисный аккаунт
sa-k8s.Создайте виртуальную машину с внешним IP-адресом в той же сети, где развернут кластер Managed Kubernetes. При создании ВМ привяжите к ней сервисный аккаунт
sa-vm.
1. Подготовьте виртуальную машину
Подключитесь к ВМ по SSH.
Инициализируйте профиль MWS CLI:
bashmws init --vm-saУстановите утилиту командной строки
kubectl.Получите kubeconfig:
bashmws mk8s get-kubeconfig --name <имя кластера>Убедитесь, что кластер доступен:
bashkubectl cluster-infoЕсли конфигурация настроена правильно, вы получите такой ответ:
bashKubernetes control plane is running at https://<IP-адрес кластера> KubeDNS is running at https://<IP-адрес кластера>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Примечание
Все последующие шаги руководства выполняйте на виртуальной машине.
2. Загрузите образ в Artifact Registry
Скачайте образ
nginxиз репозитория Docker Hub:bashdocker pull nginx:latestУстановите тег на образ. Тег нужен для идентификации версии образа в репозитории:
bashdocker tag nginx:latest registry.mwsapis.ru/<имя проекта>/k8s-registry/nginx:latestЗагрузите образ в репозиторий MWS Artifact Registry:
bashdocker push registry.mwsapis.ru/<имя проекта>/k8s-registry/nginx:latest
3. Разверните приложение
Создайте файл
nginx-deployment.yaml, содержащий манифест для развертывания приложения. В качестве источника образа укажите путь к образу в Artifact Registry:yamlapiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.mwsapis.ru/<имя проекта>/k8s-registry/nginx:latest ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIPПримените манифест:
bashkubectl apply -f nginx-deployment.yamlУбедитесь, что под приложения запущен и работает:
bashkubectl get pods -l app=nginxОжидаемый результат:
bashNAME READY STATUS RESTARTS AGE nginx-deployment-dc7b9b9d6-ddd7v 1/1 Running 0 28m
4. Проверьте работу приложения
Создайте переадресацию порта для сервиса NGINX на виртуальной машине:
bashkubectl port-forward service/nginx-service 8080:80Откройте новую сессию подключения к ВМ, после чего получите содержимое приветственной страницы NGINX:
bashcurl http://localhost:8080Ожидаемый результат
bash<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
Удалите ресурсы
В руководстве были созданы ресурсы, которые могут тарифицироваться. Если вы не планируете использовать их, удалите: