tocdepth

2

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

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

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

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

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

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

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

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

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

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

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

Пример index.html

<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Managed Kubernetes</title>
   </head>
   <body>
      <div>
         <h1 align="center">Добро пожаловать в Cloud.ru</h1>
         <img src="pic.png" align="center">
      </div>
   </body>
</html>

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

Перед началом сборки образа создайте спецификации для 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 free tier
для Dev & Test
Получить