Пример развертывания сайта
С помощью инструкции создадим образ с простым статическим сайтом. Затем загрузим образ в Artifact Registry и развернем сайт в кластере Managed Kubernetes.
Перед началом работы
Установите kubectl и Docker Desktop.
Создайте сервисный аккаунт с ролью «Администратор проекта».
Сгенерируйте ключи доступа для сервисного аккаунта.
Рекомендуем сохранить ключи доступа в системе управления паролями, например Secret Manager. Они пригодятся для подключения к кластеру и аутентификации в 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).
- Перед началом работы
- Подготовьте файлы сайта
- Подготовьте спецификации
- Соберите Docker-образ
- Загрузите образ в Artifact Registry
- Настройте спецификацию приложения
- Разверните приложение