Как поднять NGINX сервер с помощью Pod в Kubernetes и подключить локальную папку с HTML файлами
Что нам понадобится?
- 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 файлы правильно подключены.
Что делать в случае проблем?
- Под не запускается: Проверьте логи пода с помощью команды kubectl logs nginx-pod. Это поможет найти причину проблемы.
- Ошибка монтирования тома: Убедитесь, что путь в hostPath соответствует фактическому пути на вашем хосте.
- Нет доступа к NGINX через браузер: Убедитесь, что порт 30007 открыт и доступен на узле. Также проверьте, правильно ли указан IP-адрес.
Заключение
В этой статье мы подробно разобрали, как развернуть NGINX сервер в Kubernetes с использованием пода, подключить к нему локальную папку с HTML файлами и обеспечить доступ через сервис типа NodePort. Надеюсь, это руководство помогло вам освоить основные шаги по развертыванию приложений в Kubernetes.
Комментарии