
ПКАПиИ_лабораторная_5
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
__________________________________________________________________
Кафедра «Сетевых информационных технологий и сервисов (СИТиС)»
Дисциплина «Программно-конфигурируемая архитектура приложений и инфраструктуры»
Отчёт по лабораторной работе №5 на тему:
«Создание и настройка кластера Kubernetes с распределенной системой из трех взаимосвязанных компонентов»
Выполнили: студенты гр. БСТ2104
Проверили:
Москва, 2025 г.
Цель работы:
Освоить навыки развертывания и управления кластером Kubernetes, а также научиться настраивать взаимодействие между несколькими компонентами в распределенной системе.
Задание:
Ваша задача — создать кластер Kubernetes, состоящий из трех взаимосвязанных компонентов. Компоненты могут быть любыми на ваш выбор, например:
Nginx (веб-сервер), PostgreSQL (база данных) и Adminer (веб-интерфейс для управления БД).
Redis (кэш-сервер), Node.js (веб-приложение) и Prometheus (система мониторинга).
MySQL (база данных), PHP (веб-приложение) и phpMyAdmin (управление БД).
Или любые другие комбинации, которые вы считаете интересными и полезными.
Требования:
Кластер Kubernetes:
Разверните локальный кластер с использованием инструмента kind.
Убедитесь, что все компоненты работают в рамках одного кластера.
Три взаимосвязанных компонента:
Выберите три программы, которые могут взаимодействовать между собой (например, веб-сервер, база данных и интерфейс управления).
Настройте их так, чтобы они могли обмениваться данными или работать совместно.
Документация:
Опишите, какие компоненты вы выбрали и как они связаны между собой.
Укажите, какие проблемы вы решили в процессе настройки.
Проверка работоспособности:
Убедитесь, что все компоненты работают корректно и взаимодействуют друг с другом.
Предоставьте инструкцию по доступу к каждому компоненту (например, URL для веб-интерфейса или команды для проверки подключения к базе данных).
Содержание
Ход выполнения работы 5
Вывод 17
Ход выполнения работы
Создание кластера Kubernetes
Запускаем кластер с одним master-узлом и одним worker-узлом:
Рисунок 1 – Создание кластера и проверка работоспособности
Создание YAML-манифестов и развертывание компонентов
Создадим секрет, содержащий пароль для PostgreSQL, в файле postgres-secret.yaml.
Рисунок 2 – Создание postgres-secret.yaml
Рисунок 3 – Запуск postgres-secret.yaml
Создайте PersistentVolumeClaim для хранения данных PostgreSQL Создадим PVC в файле postgres-pvc.yaml.
Рисунок 4 – Создание postgres-secret.yaml
Рисунок 5 – Запуск postgres-secret.yaml
PostgreSQL Создадим манифест postgres-deployment.yaml для развертывания PostgreSQL.
Рисунок 6 – Создание postgres-deployment.yaml
Рисунок 7 – Запуск postgres-deployment.yaml
Сервис для PostgreSQL Создадим postgres-service.yaml.
Рисунок 8 – Создание postgres-service.yaml
Рисунок 9 – Запуск postgres-service.yaml
Nginx Создадим nginx-deployment.yaml
Рисунок 10 – nginx-deployment.yaml
Рисунок 11 – Запуск nginx-deployment.yaml
Cервис для Nginx Создадим nginx-service.yaml
Рисунок 12 – Создание nginx-service.yaml
Рисунок 13 – Запуск nginx-service.yaml
Adminer Создадим adminer-deployment.yaml
Рисунок 14 – Создание adminer-deployment.yaml
Рисунок 15 – Запуск adminer-deployment.yaml
Cервис для Adminer Создадим adminer-service.yaml
Рисунок 16 – Создание adminer-service.yaml
Рисунок 17 – Запуск adminer-service.yaml
Проверка работоспособности
Рисунок 18 – Проверка развернутых подов и сервисов
Доступ к веб-интерфейсам Nginx и Adminer
Для открытия Nginx через консоль xdg-open http://localhost:30080
Р
исунок
19 – Запуск nginx
Для открытия Adminer через консоль xdg-open http://localhost:30090
Когда откроется страница входа в Adminer, введите:
System: PostgreSQL
Server: postgres-service
Username: user
Password: password
Database: mydb
Рисунок 20 – Вход в Anminer
Рисунок 21 – Запущенный Adminer
Подключение к PostgreSQL из терминала
Рисунок 22 – Проверка работоспособности Postgres
Описание развернутых компонентов и их взаимодействие
Выбранные компоненты:
Nginx – веб-сервер, используемый для обработки HTTP-запросов.
PostgreSQL – реляционная база данных, хранящая данные.
Adminer – веб-интерфейс для управления базой данных PostgreSQL.
Как они связаны между собой
Adminer подключается к PostgreSQL для управления базой данных.
Nginx доступен через NodePort и может быть использован для обработки HTTP-запросов.
Все компоненты развернуты в Kubernetes-кластере, где они взаимодействуют через сервисы (Service), используя ClusterIP и NodePort.
Решенные проблемы при настройке
Проблема 1: Не удавалось скачать образы контейнеров
Ошибка: Could not resolve host: kind.sigs.k8s.io при установке kind Решение: Обновили DNS, перезапустили systemd-resolved:
sudo systemctl restart systemd-resolved
Также вручную устанавливали docker и подтягивали образы.
Проблема 2: Ошибка ImagePullBackOff при развертывании подов
Ошибка: Failed to pull image "postgres:15" Решение: Проверили интернет-соединение, вручную скачали образы:
docker pull postgres:15
docker pull nginx:latest
docker pull adminer:latest
Затем пересоздали поды:
kubectl delete pod --all
kubectl apply -f postgres-deployment.yaml
kubectl apply -f nginx-deployment.yaml
kubectl apply -f adminer-deployment.yaml
Проблема 3: postgres не создавался из-за отсутствующего PVC
Ошибка: persistentvolumeclaim "postgres-pvc" not found Решение: Создали PersistentVolume и PersistentVolumeClaim для PostgreSQL, затем пересоздали postgres:
kubectl apply -f postgres-pv.yaml
kubectl apply -f postgres-pvc.yaml
kubectl delete pod --all
kubectl apply -f postgres-deployment.yaml
Проблема 4: NodePort не пробрасывал порты наружу
Ошибка: curl: (7) Failed to connect to localhost port 30080 after 0 ms: Connection refused Решение: Разрешили порты в iptables:
sudo iptables -A INPUT -p tcp --dport 30080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 30090 -j ACCEPT
sudo systemctl restart networking
Также проверили проброс вручную через:
kubectl port-forward svc/nginx-service 30080:80
Инструкция по доступу к компонентам
Доступ к Nginx
Открыть
xdg-open http://localhost:30080
Или проверить через curl:
curl -I http://localhost:30080
Ожидаемый ответ:
HTTP/1.1 200 OK
Доступ к Adminer
xdg-open http://localhost:30090
Если NodePort не работает, можно использовать port-forward:
kubectl port-forward svc/adminer-service 30090:8080
Вход в Adminer
На странице входа введите:
System: PostgreSQL
Server: postgres-service
Username: user
Password: password
Database: mydb
Проверка соединения с PostgreSQL
Запустить клиент PostgreSQL:
kubectl run postgres-client --rm -it --image=postgres:15 -- bash
Затем внутри контейнера:
psql -h postgres-service -U user -d mydb
Если подключение успешно, можно выполнять SQL-запросы.
Вывод
Освоили навыки развертывания и управления кластером Kubernetes, а также научились настраивать взаимодействие между несколькими компонентами в распределенной системе. Так же решены проблемы с загрузкой образов, PVC, NodePort, DNS.