Развертывание сайта

В этом разделе рассмотрен пример развертывания сайта с помощью Managed Kubernetes.

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

  1. Создайте внешний кластер и группу узлов.

  2. Установите Kubernetes CLI (kubectl).

  3. Скачайте и примените Kubeconfig.

  4. Установите Docker и зарегистрируйтесь (обязательно подтвердите почту после регистрации).

  5. Подготовьте 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:

  1. В корневой директории создайте каталог с именем Docker.

  2. Переместите файлы сайта (index.html и pic.png) в созданный каталог.

  3. Создайте конфигурационный файл с именем nginx.conf и сохраните его в каталоге Docker.

  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. В каталоге Docker создайте файл без расширения с именем Dockerfile.

  6. Добавьте в файл следующую спецификацию:

    # укажите образ 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:

  1. Перейдите в директорию Docker и запустите сборку образа с помощью команды:

    docker build -t <your_docker_user_id>/my_html
    

    Где:

    your_docker_user_id — user ID пользователя в системе Docker.

  2. Проверьте, что образ появился в списке образов Docker. Для этого перейдите в приложении Docker на вкладку Images → Local.

  3. Отправьте получившийся образ в репозиторий Docker Hub:

    1. Перейдите в корневую директорию и авторизуйтесь в Docker с помощью команды:

      docker login -u "$docker_user_id" -p "$docker_user_password" docker.io
      
    2. Выполните команду:

      docker push <your_docker_user_id>/my_html:latest
      
    3. Проверьте, что образ перенесен в репозитории Docker Hub. Для этого авторизуйтесь на сайте Docker Hub и перейдите на вкладку Repositories.

Разработка спецификации приложения

  1. В корневой директории создайте 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 — количество реплик приложения.

  2. В корневой директории создайте 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).