- tocdepth
2
Пример развертывания сайта
С помощью инструкции создадим образ с простым статическим сайтом. Затем загрузим образ в Artifact Registry и развернем сайт в кластере Managed Kubernetes.
Перед началом работы
Установите kubectl и Docker Desktop.
Создайте сервисный аккаунт с ролью «Администратор проекта».
Сгенерируйте ключи доступа для сервисного аккаунта.
Рекомендуем сохранить ключи доступа в системе управления паролями, например Secret Manager. Они пригодятся для подключения к кластеру и аутентификации в Artifact Registry.
Создайте кластер с публичным IP и группу узлов.
Подготовьте файлы сайта
Сайт в примере содержит два файла — 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:
Создайте каталог
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 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-образ
Перейдите в каталог
cloudru-app-example
и запустите сборку образа с помощью команды:docker build -t cloudru-app-example .
В Docker Desktop перейдите на вкладку
и проверьте, что образ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/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
— количество реплик приложения.
В корневом каталоге создайте
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).
для Dev & Test