Пример развертывания сайта
С помощью инструкции создадим образ с простым статическим сайтом. Затем загрузим образ в Artifact Registry и развернем сайт в кластере Managed Kubernetes.
Перед началом работы
Установите kubectl и Docker Desktop.
Создайте сервисный аккаунт с ролью «Администратор проекта».
Сгенерируйте ключи доступа для сервисного аккаунта.
Рекомендуем сохранить ключи доступа в системе управления паролями, например Secret Management. Они пригодятся для подключения к кластеру и аутентификации в Artifact Registry.
Создайте кластер с публичным IP и группу узлов.
Подготовьте файлы сайта
Сайт в примере содержит два файла — index.html и pic.png.
Подготовьте спецификации
Перед началом сборки образа создайте спецификации для Nginx и Dockerfile:
Создайте каталог cloudru-app-example.
Переместите в созданный каталог файлы index.html и pic.png.
В каталоге cloudru-app-example создайте конфигурационный файл с названием nginx.conf.
Добавьте в 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;}}В каталоге cloudru-app-example создайте файл с названием Dockerfile и добавьте спецификацию:
# Nginx imageFROM nginx:stable# Port for start serviceEXPOSE 8080# Nginx config (nginx.conf)COPY nginx.conf /etc/nginx/conf.d/nginx.conf# Site artifactsCOPY index.html /usr/share/nginx/html/index.htmlCOPY pic.png /usr/share/nginx/html/pic.pngSTOPSIGNAL SIGQUITCMD ["nginx", "-g", "daemon off;"]
Соберите Docker-образ
Перейдите в каталог cloudru-app-example и запустите сборку образа с помощью команды:
docker build -t cloudru-app-example .В Docker Desktop перейдите на вкладку Images → Local и проверьте, что образ cloudru-app-example появился в списке.
Загрузите образ в Artifact Registry
В Artifact Registry создайте реестр.
Пройдите аутентификацию в Artifact Registry для работы с Docker-образами. Используйте сервисный аккаунт, полученный перед началом работы.
Выполните команду:
docker tag cloudru-app-example <URI_реестра>.cr.cloud.ru/cloudru-app-example:v1Где:
cloudru-app-example — образ с сайтом.
<registry_name>.cr.cloud.ru — URI реестра Artifact Registry.
Загрузите образ:
docker push <registry_name>.cr.cloud.ru/cloudru-app-example:v1Проверьте, что образ отобразился в списке репозитория.
Настройте спецификацию приложения
Создайте файл cloudru-app-example.yaml и сохраните следующую спецификацию:
apiVersion: apps/v1kind: Deploymentmetadata:name: cloudru-app-examplespec:selector:matchLabels:run: cloudru-app-examplereplicas: 1template:metadata:labels:run: cloudru-app-examplespec:containers:- name: cloudru-app-exampleimage: <registry_name>.cr.cloud.ru/cloudru-app-example:v1ports:- containerPort: 8080Где:
spec.template.spec.containers.image — путь до образа в Artifact Registry.
spec.replicas — количество реплик приложения.
В корневом каталоге создайте cloudru-app-example-lb.yaml и добавьте следующую спецификацию:
apiVersion: v1kind: Servicemetadata:name: cloudru-app-example-lblabels:run: cloudru-app-examplespec:selector:run: cloudru-app-exampleports:- port: 8080targetPort: 8080type: LoadBalancer
Разверните приложение
Чтобы развернуть приложение, выполните команды:
kubectl apply -f cloudru-app-example.yamlkubectl apply -f cloudru-app-example-lb.yaml
Результат будет следующим:
deployment.apps/cloudru-app-example createdservice/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).