Как поднять NGINX сервер с помощью Pod в Kubernetes и подключить локальную папку с HTML файлами

На список статей
Blog image

Защитите свои сайты с My-Sites-Guard.com!
Сервис обеспечивает надежную защиту ваших веб-ресурсов: мониторинг доступности сайта, контроль валидности сертификатов, а также возможность собирать и анализировать логи работы сервера. My-Sites-Guard.com — всё для сохранности вашего сайта и спокойствия в работе!

Что нам понадобится?

  • Kubernetes кластер (можно использовать Minikube или другой локальный кластер для тестирования).
  • Установленный kubectl для управления кластером.
  • Подготовленная папка на хосте с HTML файлами.


Шаг 1: Подготовьте HTML файлы

Создайте папку на вашем хосте, где будут лежать HTML файлы для NGINX. Например, создадим папку /home/user/html, а внутри неё файл index.html:

mkdir -p /home/user/html
echo "<h1>Привет, Kubernetes!</h1>" > /home/user/html/index.html

Этот файл будет отображаться, когда мы настроим NGINX.


Шаг 2: Создайте PersistentVolume и PersistentVolumeClaim

Чтобы подключить локальную папку к поду, необходимо создать PersistentVolume (PV) и PersistentVolumeClaim (PVC). Это позволит Kubernetes использовать папку на хосте в качестве хранилища.

Создайте файл nginx-pv.yaml для описания PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: nginx-pv
spec:
 capacity:
   storage: 1Gi
 accessModes:
   - ReadWriteOnce
 hostPath:
   path: "/home/user/html"
  • capacity — размер тома, который мы выделяем (в данном случае 1 GiB).
  • accessModes — определяет, как поды могут обращаться к хранилищу. В данном примере используется ReadWriteOnce, что означает, что к томам можно одновременно подключиться только с одного пода.
  • hostPath — путь к папке на хосте, который будет проброшен в под.

Теперь создадим файл nginx-pvc.yaml для описания PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: nginx-pvc
spec:
 accessModes:
   - ReadWriteOnce
 resources:
   requests:
     storage: 1Gi

PVC будет запрашивать доступ к ранее созданному PV.

Примените эти YAML-файлы для создания PV и PVC:

kubectl apply -f nginx-pv.yaml
kubectl apply -f nginx-pvc.yaml


Шаг 3: Создайте Pod с NGINX

Теперь создадим Pod, который будет использовать NGINX и подключаться к ранее созданному PVC. Создайте файл nginx-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
 name: nginx-pod
spec:
 containers:
 - name: nginx
   image: nginx:latest
   ports:
   - containerPort: 80
   volumeMounts:
   - mountPath: /usr/share/nginx/html
     name: nginx-html
 volumes:
 - name: nginx-html
   persistentVolumeClaim:
     claimName: nginx-pvc

Разберем этот файл подробнее:

  • containers — описание контейнера, в данном случае используется образ NGINX.
  • volumeMounts — монтирует том в контейнер по указанному пути (/usr/share/nginx/html). Это стандартная папка, где NGINX ищет файлы для отображения.
  • volumes — подключает PVC к поду.

Примените этот файл для создания пода:

kubectl apply -f nginx-pod.yaml

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

kubectl get pods

Вы должны увидеть под с именем nginx-pod, который находится в состоянии Running.


Шаг 4: Откройте доступ к NGINX через NodePort

Чтобы получить доступ к NGINX снаружи кластера, необходимо создать сервис типа NodePort. Создайте файл nginx-service.yaml:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: NodePort
 selector:
   app: web-server
 ports:
 - port: 80
   targetPort: 80
   nodePort: 30007

Разберем параметры:

  • type: NodePort — сервис будет доступен через определенный порт на узле.
  • port и targetPort — указывают на порт, на котором работает NGINX.
  • nodePort — порт на узле, по которому можно обращаться к NGINX. В данном примере это 30007.

Примените файл для создания сервиса:

kubectl apply -f nginx-service.yaml

Теперь вы можете получить доступ к NGINX, открыв в браузере адрес http://<IP-адрес_узла>:30007, где <IP-адрес_узла> — это IP-адрес вашего Kubernetes узла.


Шаг 5: Проверка работы

Зайдите по адресу http://<IP-адрес_узла>:30007, и вы должны увидеть сообщение «Привет, Kubernetes!». Это означает, что ваш NGINX сервер успешно работает, и HTML файлы правильно подключены.


Что делать в случае проблем?

  1. Под не запускается: Проверьте логи пода с помощью команды kubectl logs nginx-pod. Это поможет найти причину проблемы.
  2. Ошибка монтирования тома: Убедитесь, что путь в hostPath соответствует фактическому пути на вашем хосте.
  3. Нет доступа к NGINX через браузер: Убедитесь, что порт 30007 открыт и доступен на узле. Также проверьте, правильно ли указан IP-адрес.


Заключение

В этой статье мы подробно разобрали, как развернуть NGINX сервер в Kubernetes с использованием пода, подключить к нему локальную папку с HTML файлами и обеспечить доступ через сервис типа NodePort. Надеюсь, это руководство помогло вам освоить основные шаги по развертыванию приложений в Kubernetes.

Комментарии

Пока нет комментариев

Добавить комментарий