
ПКАПиИ_БСТ2104_Кофанов_Первухина_Лабораторная_работа_4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
__________________________________________________________________
Кафедра «Сетевые информационные технологии и сервисы»
Отчёт по лабораторной работе №4
по дисциплине «Программно-конфигурируемая архитектура приложений и инфраструктуры»
на тему «Знакомство с Kubernetes»
Выполнили: студенты гр. БСТ2104
Кофанов Дмитрий Алексеевич
Первухина Алиса Александровна
Проверил: ст. преп.
Маклачкова Виктория Валентиновна
Москва
2025
Цель работы
Целью работы является освоение базовых принципов работы с Kubernetes, а также настройки локального кластера с использованием инструмента kind и развёртывания приложений в кластере.
Задание
Установить утилиты kubectl и kind для работы с Kubernetes.
Создать локальный кластер Kubernetes с использованием kind.
Развернуть в кластере приложения PostgreSQL и Adminer, используя YAML-файлы для описания Deployment и Service.
Проверить работоспособность кластера и взаимодействие между компонентами.
Изучить команды для управления кластером, включая удаление и пересоздание подов и сервисов.
Оформить отчёт, приложить скриншоты выполнения и ответить на контрольные вопросы.
Содержание
Ход выполнения работы 4
Ответы на контрольные вопросы 10
Заключение 16
Ход выполнения работы
Установим утилиты kubectl и kind для работы с Kubernetes (см. рис. 1-2):
Рисунок 1 – Установка утилиты kubectl
Рисунок 2 – Установка утилиты kind
Создадим локальный кластер Kubernetes с использованием kind (см. рис. 3-5):
Рисунок 3 – Создание кластера, проверка состояния кластера и нод
Рисунок 4 – Создание кластера с использованием конфигурационного файла YAML
Рисунок 5 – Экспорт конфигурации кластера и удаление кластера
Развернём в кластере приложения PostgreSQL и Adminer, используя YAML-файлы для описания Deployment и Service (см. рис. 6-11):
Рисунок 6 – Создание файла конфигурации и кластера с его использованием
Рисунок 7 – Создание файла для развёртывания PostgreSQL
Рисунок 8 – Создание файла для создания Service PostgreSQL
Рисунок 9 – Создание файлов для развёртывания и создания Service Adminer
Рисунок 10 – Применение конфигурация для развёртывания PostgreSQL и Adminer, проверка состояния компонентов кластера
Рисунок 11 – Настройка сети NAT
Проверим работоспособность кластера и взаимодействие между компонентами (см. рис. 12-13):
Рисунок 12 – Веб-интерфейс для входа в Adminer
Рисунок 13 – Успешный вход в Adminer
Ответы на контрольные вопросы
Что такое kuberneets и зачем он нужен?
Kubernetes – это программная система для развертывания, масштабирования и управления контейнеризированными приложениями. Она позволяет автоматизировать развертывание, балансировку нагрузки, самовосстановление и масштабирование приложений. Kubernetes используется для управления кластерами контейнеров, помогая разработчикам и администраторам эффективно управлять инфраструктурой.
Расскажите про основные компоненты kubernetes и покажите их в kube-systems.
Плоскость управления (Control Plane):
API Server – обрабатывает запросы от пользователей и компонентов кластера.
Scheduler – распределяет поды по рабочим узлам.
Controller Manager – управляет репликацией подов, обработкой узлов и контролем состояния кластера.
etcd – распределенное хранилище конфигурации кластера.
Рабочие узлы (Worker Nodes):
Kubelet – агент на каждом узле, который управляет контейнерами.
Kube-proxy – балансировка нагрузки и сетевое взаимодействие подов.
Контейнерный рантайм – например, Docker или containerd
Расскажите про создание пода из yaml, основные поля.
Поды – это основные строительные блоки в Kubernetes, которые содержат один или несколько контейнеров.
Чтобы создать под, используется YAML-файл. В нем указываются:
Имя пода – чтобы можно было его идентифицировать.
Образ контейнера – указывает, что именно будет запущено внутри пода (например, Nginx, PostgreSQL и т.д.).
Порты – если под взаимодействует с сетью, нужно указать, какие порты используются.
Политика перезапуска – определяет, будет ли Kubernetes перезапускать под в случае ошибки.
Расскажите про сервисы ClusterIp и Headless.
Сервисы в Kubernetes нужны, чтобы приложения могли взаимодействовать друг с другом.
ClusterIP – это стандартный сервис, который автоматически получает IP-адрес внутри кластера. Он позволяет одним подам находить другие через этот IP. Подходит для обычных веб-приложений или баз данных, к которым не нужно подключаться извне.
Headless Service – это сервис без отдельного IP-адреса. Он используется, если нужно обращаться не к самому сервису, а сразу к подам внутри него (например, при работе с базами данных, которые требуют прямого подключения к каждому узлу).
Простой пример: если ClusterIP – это телефонный справочник с одним общим номером, который соединяет с нужным сотрудником, то Headless – это список личных номеров всех сотрудников.
Расскажите про сервисы NodePort и LoadBalancer.
Оба этих сервиса позволяют обращаться к подам извне.
NodePort – открывает порт на каждом узле кластера, через который можно достучаться до приложения. Это самый простой способ дать доступ извне, но он не очень удобен, так как приходится вручную искать, на каком узле работает сервис.
LoadBalancer – автоматически создает внешний IP-адрес, который распределяет трафик между подами. Этот вариант чаще всего используется в облачных средах (например, в AWS, Google Cloud), потому что облачные провайдеры сами создают балансировщик нагрузки.
Если ClusterIP – это внутренняя телефонная сеть офиса, то NodePort – это обычный номер телефона, а LoadBalancer – это горячая линия, где вас соединят с любым свободным оператором.
Расскажите про Ingress.
Ingress – это более продвинутый способ управлять входящим трафиком в кластер.
Допустим, у тебя в кластере есть несколько сервисов: веб-сайт, база данных, API. Без Ingress каждому пришлось бы назначать свой IP-адрес или порт, а это неудобно.
Ingress позволяет сделать одно доменное имя (например, mywebsite.com), а внутри уже направлять запросы:
mywebsite.com/api → направлять на один сервис
mywebsite.com/admin → на другой
mywebsite.com/ → на веб-приложение
Это похоже на ресепшен в большом офисе: приходит один общий запрос, а дальше его отправляют нужному специалисту.
Расскажите про Deployment, StatefulSet и DaemonSet.
Эти механизмы управляют подами, но у каждого своя задача:
Deployment – самый распространенный. Позволяет запускать несколько одинаковых подов, обновлять их без остановки работы и автоматически восстанавливать, если что-то сломалось. Подходит для обычных веб-приложений.
StatefulSet – используется, когда каждому поду нужно свое уникальное имя и данные. Например, для баз данных, где нельзя просто создать новые копии, не сохранив информацию.
DaemonSet – запускает по одному поду на каждом узле кластера. Например, для сбора логов или мониторинга, когда нужно, чтобы такой под был на каждом сервере.
Если представить это как отель:
Deployment – это номера-стандарты, которые можно копировать бесконечно.
StatefulSet – это уникальные VIP-номера, которые нельзя просто заменить.
DaemonSet – это охранники, которые должны быть на каждом этаже.
Расскажите про Job и CronJob.
Они используются для одноразовых или повторяющихся задач:
Job – выполняет задачу один раз (например, резервное копирование базы).
CronJob – это аналог cron в Linux, который запускает задачи по расписанию (например, чистка логов каждую ночь).
Расскажите про ConfigMap и Secret.
Они позволяют хранить настройки приложения отдельно от кода:
ConfigMap – для обычных конфигурационных данных (например, URL базы данных, имя приложения).
Secret – для хранения защищенных данных (например, пароли, API-ключи), которые передаются в зашифрованном виде.
Это похоже на записную книжку: ConfigMap – это обычные заметки, а Secret – это замок на сейфе с важными документами.
Перечислите основные команды kubectl, рассмотренные в лабораторной работе.
Просмотр состояния кластера: kubectl get nodes – список узлов kubectl get pods – список подов kubectl describe pod pod-name – детали пода
Управление объектами:
kubectl apply -f file.yaml – развернуть ресурс kubectl delete -f file.yaml – удалить ресурс
Логи и отладка:
kubectl logs pod-name – посмотреть логи kubectl exec -it pod-name -- bash – зайти внутрь пода
Заключение
В результате выполнения лабораторной работы были освоены базовые принципы работы с Kubernetes, а также выполнены настройка локального кластера с использованием инструмента kind и развёртывание приложений PostgreSQL и Adminer в кластере.