Skip to content

Использование Artifact Registry при развертывании приложений в Managed Kubernetes

Вы можете хранить Docker-образы в реестре Artifact Registry и использовать их при развертывании приложений в кластере Managed Kubernetes.

В этом руководстве загрузка образа в реестр и управление кластером Managed Kubernetes осуществляется с помощью виртуальной машины. В качестве примера используется образ nginx из официального репозитория Docker Hub.

Перед началом работы

  1. Создайте реестр Artifact Registry с именем k8s-registry.

  2. Создайте NAT-шлюз для подсети, в которой будет развернут кластер Managed Kubernetes.

  3. Создайте сервисные аккаунты:

    • C именем sa-k8s и ролью registry.puller — для работы группы узлов Managed Kubernetes.
    • С именем sa-vm и ролями editor и registry.pusher — для инициализации MWS CLI на виртуальной машине, загрузки образа и работы с утилитой kubectl.
  4. Создайте кластер Managed Kubernetes и группу узлов для него. При создании группы используйте сервисный аккаунт sa-k8s.

  5. Создайте виртуальную машину с внешним IP-адресом в той же сети, где развернут кластер Managed Kubernetes. При создании ВМ привяжите к ней сервисный аккаунт sa-vm.

1. Подготовьте виртуальную машину

  1. Инициализируйте профиль MWS CLI:

    bash
    mws init --vm-sa
  2. Установите утилиту командной строки kubectl.

  3. Получите kubeconfig:

    bash
    mws mk8s get-kubeconfig --name <имя кластера>
  4. Убедитесь, что кластер доступен:

    bash
    kubectl cluster-info

    Если конфигурация настроена правильно, вы получите такой ответ:

    bash
    Kubernetes 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

  1. Скачайте образ nginx из репозитория Docker Hub:

    bash
    docker pull nginx:latest
  2. Установите тег на образ. Тег нужен для идентификации версии образа в репозитории:

    bash
    docker tag nginx:latest registry.mwsapis.ru/<имя проекта>/k8s-registry/nginx:latest
  3. Загрузите образ в репозиторий MWS Artifact Registry:

    bash
    docker push registry.mwsapis.ru/<имя проекта>/k8s-registry/nginx:latest

3. Разверните приложение

  1. Создайте файл nginx-deployment.yaml, содержащий манифест для развертывания приложения. В качестве источника образа укажите путь к образу в Artifact Registry:

    yaml
    apiVersion: 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
  2. Примените манифест:

    bash
    kubectl apply -f nginx-deployment.yaml
  3. Убедитесь, что под приложения запущен и работает:

    bash
    kubectl get pods -l app=nginx

    Ожидаемый результат:

    bash
    NAME                               READY   STATUS    RESTARTS   AGE
    nginx-deployment-dc7b9b9d6-ddd7v   1/1     Running   0          28m

4. Проверьте работу приложения

  1. Создайте переадресацию порта для сервиса NGINX на виртуальной машине:

    bash
    kubectl port-forward service/nginx-service 8080:80
  2. Откройте новую сессию подключения к ВМ, после чего получите содержимое приветственной страницы NGINX:

    bash
    curl 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>

Удалите ресурсы

В руководстве были созданы ресурсы, которые могут тарифицироваться. Если вы не планируете использовать их, удалите: