Пример развертывания сайта

С помощью инструкции создадим образ с простым статическим сайтом. Затем загрузим образ в Artifact Registry и развернем сайт в кластере Managed Kubernetes.

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

  1. Установите kubectl и Docker Desktop.

  2. Создайте сервисный аккаунт с ролью «Администратор проекта».

  3. Сгенерируйте ключи доступа для сервисного аккаунта.

    Рекомендуем сохранить ключи доступа в системе управления паролями, например Secret Manager. Они пригодятся для подключения к кластеру и аутентификации в Artifact Registry.

  4. Создайте кластер с публичным IP и группу узлов.

  5. Подключитесь к кластеру.

Подготовьте файлы сайта

Сайт в примере содержит два файла — index.html и pic.png.

Подготовьте спецификации

Перед началом сборки образа создайте спецификации для Nginx и Dockerfile:

  1. Создайте каталог cloudru-app-example.

  2. Переместите в созданный каталог файлы index.html и pic.png.

  3. В каталоге cloudru-app-example создайте конфигурационный файл с названием nginx.conf.

  4. Добавьте в nginx.conf спецификацию:

    server {
    listen 8080 default_server ;
    listen [ :: ] :8080 default_server ;
    root /usr/share/nginx/html ;
    index index.html ;
    location / {
    try_files $uri $uri / = 404 ;
    }
    }
  5. В каталоге cloudru-app-example создайте файл с названием Dockerfile и добавьте спецификацию:

    # Nginx image
    FROM nginx:stable
    # Port for start service
    EXPOSE 8080
    # Nginx config (nginx.conf)
    COPY nginx.conf /etc/nginx/conf.d/nginx.conf
    # Site artifacts
    COPY index.html /usr/share/nginx/html/index.html
    COPY pic.png /usr/share/nginx/html/pic.png
    STOPSIGNAL SIGQUIT
    CMD [ "nginx" , "-g" , "daemon off;" ]

Соберите Docker-образ

  1. Перейдите в каталог cloudru-app-example и запустите сборку образа с помощью команды:

    docker build -t cloudru-app-example .
  2. В Docker Desktop перейдите на вкладку Images → Local и проверьте, что образ cloudru-app-example появился в списке.

Загрузите образ в Artifact Registry

  1. В Artifact Registry создайте реестр.

  2. Пройдите аутентификацию в Artifact Registry для работы с Docker-образами. Используйте сервисный аккаунт, полученный перед началом работы.

  3. Выполните команду:

    docker tag cloudru-app-example <URI_реестра>.cr.cloud.ru/cloudru-app-example:v1

    Где:

    • cloudru-app-example — образ с сайтом.

    • <registry_name>.cr.cloud.ru — URI реестра Artifact Registry.

  4. Загрузите образ:

    docker push <registry_name>.cr.cloud.ru/cloudru-app-example:v1
  5. Проверьте, что образ отобразился в списке репозитория.

Настройте спецификацию приложения

  1. Создайте файл cloudru-app-example.yaml и сохраните следующую спецификацию:

    apiVersion : apps/v1
    kind : Deployment
    metadata :
    name : cloudru-app-example
    spec :
    selector :
    matchLabels :
    run : cloudru-app-example
    replicas : 1
    template :
    metadata :
    labels :
    run : cloudru-app-example
    spec :
    containers :
    - name : cloudru-app-example
    image : <registry_name>.cr.cloud.ru/cloudru-app-example:v1
    ports :
    - containerPort : 8080

    Где:

    • spec.template.spec.containers.image — путь до образа в Artifact Registry.

    • spec.replicas — количество реплик приложения.

  2. В корневом каталоге создайте cloudru-app-example-lb.yaml и добавьте следующую спецификацию:

    apiVersion : v1
    kind : Service
    metadata :
    name : cloudru-app-example-lb
    labels :
    run : cloudru-app-example
    spec :
    selector :
    run : cloudru-app-example
    ports :
    - port : 8080
    targetPort : 8080
    type : LoadBalancer

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

Чтобы развернуть приложение, выполните команды:

kubectl apply -f cloudru-app-example.yaml
kubectl apply -f cloudru-app-example-lb.yaml

Результат будет следующим:

deployment.apps/cloudru-app-example created
service/cloudru-app-example-lb created
Примечание

Развертывание приложения займет 2–3 минуты.

Проверьте статус выполнения развертывания подов:

kubectl get pod

Если под с приложением находится в статусе «Running», развертывание прошло успешно.

Чтобы получить адрес для доступа к сайту, выполните команду:

kubectl get svc

В ответе будут доступны EXTERNAL-IP и PORT(S) для сервиса cloudru-app-example-lb.

Доступ к сайту можно получить по URL формата EXTERNAL-IP:PORT (например, http://203.0.113.12:8080).

Evolution