Развертывание сайта
В этом разделе рассмотрен пример развертывания сайта с помощью Managed Kubernetes.
Перед началом работы
Создайте внешний кластер и группу узлов.
Установите Kubernetes CLI (kubectl).
Скачайте и примените Kubeconfig.
Установите Docker и зарегистрируйтесь (обязательно подтвердите почту после регистрации).
Подготовьте HTML-файл сайта (и все нужные файлы к нему). В этом примере сайт состоит из файлов
index.html
иpic.png
.
Index
<!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> <center> <h1 align="center">Добро пожаловать в Cloud</h1> <img src="pic.png" align="center"> </center> </body> </html>
Сборка образа контейнера
Перед запуском сборки создайте образ для Nginx и Dockerfile:
В корневой директории создайте каталог с именем
Docker
.Переместите файлы сайта (
index.html
иpic.png
) в созданный каталог.Создайте конфигурационный файл с именем
nginx.conf
и сохраните его в каталогеDocker
.Добавьте в файл
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; } }
В каталоге
Docker
создайте файл без расширения с именемDockerfile
.Добавьте в файл следующую спецификацию:
# укажите образ nginx FROM nginx:stable # укажите порт запуска сервиса EXPOSE 8080 # добавьте в образ nginx конфигурацию (файл nginx.conf) COPY nginx.conf /etc/nginx/conf.d/nginx.conf # добавьте в образ артефакты сайта, для каждого артефакта необходимо добавить инструкцию по аналогии 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;"]
Запустите сборку образа и отправьте его в репозитории DockerHub:
Перейдите в директорию
Docker
и запустите сборку образа с помощью команды:docker build -t <your_docker_user_id>/my_html
Где:
your_docker_user_id
— user ID пользователя в системе Docker.Проверьте, что образ появился в списке образов Docker. Для этого перейдите в приложении Docker на вкладку
.Отправьте получившийся образ в репозиторий Docker Hub:
Перейдите в корневую директорию и авторизуйтесь в Docker с помощью команды:
docker login -u "$docker_user_id" -p "$docker_user_password" docker.io
Выполните команду:
docker push <your_docker_user_id>/my_html:latest
Проверьте, что образ перенесен в репозитории Docker Hub. Для этого авторизуйтесь на сайте Docker Hub и перейдите на вкладку Repositories.
Разработка спецификации приложения
В корневой директории создайте YAML-файл с именем
nginx-deployment.yaml
и добавьте в него следующую спецификацию:nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-html spec: selector: matchLabels: run: my_html replicas: 1 template: metadata: labels: run: my_html spec: containers: - name: my-html image: lerikaxp/my_html:latest ports: - containerPort: 8080
Где:
image
— полное наименование образа из Docker.replicas
— количество реплик приложения.
В корневой директории создайте YAML-файл с именем
nginx-service.yaml
и добавьте в него следующую спецификацию:nginx-service.yaml apiVersion: v1 kind: Service metadata: name: html-lb labels: run: my_html spec: selector: run: my_html ports: - port: 8080 targetPort: 8080 type: LoadBalancer
Развертывание приложения
Чтобы развернуть приложение, примените файлы в кластере с помощью команд:
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
Результат выполнения команды будет следующим:
deployment.apps/my-html created
service/html-lb created
Примечание
На развертывание приложения понадобится некоторое время.
Проверить статус выполнения развертывания подов можно командой:
kubectl get pod
Если под с приложением находится в статусе «Running», развертывание прошло успешно.
Для получения адреса для доступа к сайту выполните команду:
kubectl get svc
В ответе будут доступны EXTERNAL-IP и PORT(S) для сервиса html-lb
.
Доступ к сайту можно получить по URL формата EXTERNAL-IP:PORT
(например http://37.230.181.250:8080).