Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПКАПиИ_лабораторная_5

.docx
Скачиваний:
1
Добавлен:
25.04.2025
Размер:
1.32 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

__________________________________________________________________

Кафедра «Сетевых информационных технологий и сервисов (СИТиС)»

Дисциплина «Программно-конфигурируемая архитектура приложений и инфраструктуры»

Отчёт по лабораторной работе №5 на тему:

«Создание и настройка кластера Kubernetes с распределенной системой из трех взаимосвязанных компонентов»

Выполнили: студенты гр. БСТ2104

Проверили:

Москва, 2025 г.

Цель работы:

Освоить навыки развертывания и управления кластером Kubernetes, а также научиться настраивать взаимодействие между несколькими компонентами в распределенной системе.

Задание:

Ваша задача — создать кластер Kubernetes, состоящий из трех взаимосвязанных компонентов. Компоненты могут быть любыми на ваш выбор, например:

  • Nginx (веб-сервер), PostgreSQL (база данных) и Adminer (веб-интерфейс для управления БД).

  • Redis (кэш-сервер), Node.js (веб-приложение) и Prometheus (система мониторинга).

  • MySQL (база данных), PHP (веб-приложение) и phpMyAdmin (управление БД).

  1. Или любые другие комбинации, которые вы считаете интересными и полезными.

Требования:

  1. Кластер Kubernetes:

    • Разверните локальный кластер с использованием инструмента kind.

    • Убедитесь, что все компоненты работают в рамках одного кластера.

  2. Три взаимосвязанных компонента:

    • Выберите три программы, которые могут взаимодействовать между собой (например, веб-сервер, база данных и интерфейс управления).

    • Настройте их так, чтобы они могли обмениваться данными или работать совместно.

  3. Документация:

    • Опишите, какие компоненты вы выбрали и как они связаны между собой.

    • Укажите, какие проблемы вы решили в процессе настройки.

  4. Проверка работоспособности:

    • Убедитесь, что все компоненты работают корректно и взаимодействуют друг с другом.

    • Предоставьте инструкцию по доступу к каждому компоненту (например, 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.