 
        
        ПКАПиИ_лабораторная_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
исунок
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.
