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

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

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

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

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

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

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

  5. Создайте публичный репозиторий Docker Hub.

  6. Подготовьте необходимые файлы сайта. В этом примере сайт состоит из 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>
          <center>
             <h1 align="center">Добро пожаловать в Cloud.ru</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. Добавьте в 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;"]
    

Сборка образа контейнера

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

    docker build -t <your_docker_user_id>/my_html .
    

    Где:

    your_docker_user_id — идентификатор пользователя в системе Docker.

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

Отправка образа в репозиторий

  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 и перейдите на вкладку Repositories.

  4. Проверьте, что образ перенесен в репозиторий.

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

  1. В корневом каталоге создайте 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
    

    Где:

    • spec.template.spec.containers.image — полное наименование образа из Docker.

    • spec.replicas — количество реплик приложения.

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

Примечание

Развертывание приложения займет 2–3 минуты.

Проверьте статус выполнения развертывания подов:

kubectl get pod

Если под с приложением находится в статусе «Running», развертывание прошло успешно.

Чтобы получить адрес для доступа к сайту, выполните команду:

kubectl get svc

В ответе будут доступны EXTERNAL-IP и PORT(S) для сервиса html-lb. Доступ к сайту можно получить по URL формата EXTERNAL-IP:PORT (например, http://37.230.181.250:8080).

Запустили Evolution free tier
для Dev & Test
Получить