nav-img
Облако VMware

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

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

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

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

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

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

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

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

  6. Подготовьте необходимые файлы сайта. В этом примере сайт состоит из index.html и pic.png.

Создание образа

Перед запуском сборки создайте образ для 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).