Перейти к содержимому

Использование 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. Инициализируйте профиль 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
Примечание

Все последующие шаги руководства выполняйте на виртуальной машине.

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

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