Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПКАПиИ_лабораторная_4.docx
Скачиваний:
11
Добавлен:
25.04.2025
Размер:
4.54 Mб
Скачать

Ответы на вопросы

1. Что такое Kubernetes и зачем он нужен?

Kubernetes (k8s) — это система оркестрации контейнеров, предназначенная для автоматизации развертывания, управления и масштабирования контейнеризированных приложений.

Раньше администраторы запускали контейнеры вручную с помощью Docker, но со временем стало сложно управлять большим количеством контейнеров, балансировать нагрузку и следить за отказоустойчивостью. Kubernetes решает эти проблемы, позволяя:

  • Автоматически распределять контейнеры между серверами (нодами).

  • Следить за состоянием приложений и автоматически перезапускать упавшие контейнеры.

  • Обеспечивать балансировку нагрузки между сервисами.

  • Масштабировать приложения в зависимости от нагрузки.

  • Разграничивать доступ и управлять конфигурацией сервисов.

Ключевые возможности

  • Самовосстановление: если контейнер выходит из строя, Kubernetes автоматически создаст новый.

  • Автоматическое масштабирование: при увеличении нагрузки Kubernetes может добавить новые экземпляры подов.

  • Декларативное управление: разработчики описывают, каким должен быть кластер (например, 3 реплики пода), а Kubernetes сам поддерживает это состояние.

2. Основные компоненты Kubernetes и их просмотр

Kubernetes — это распределённая система, которая состоит из Control Plane (управляющей плоскости) и Worker Nodes (рабочих узлов).

Control Plane (управляющая плоскость)

Это компоненты, которые управляют кластером:

  • API Server (kube-apiserver) – основной входной API для всех операций (работает через kubectl).

  • Scheduler (kube-scheduler) – определяет, на каких нодах запустить поды.

  • Controller Manager (kube-controller-manager) – следит за состоянием кластера, пересоздавая упавшие поды.

  • ETCD – распределённое хранилище состояния кластера.

Worker Nodes (рабочие узлы)

На рабочих узлах (нодах) выполняются приложения:

  • Kubelet – агент, отвечающий за запуск подов на узле.

  • Container Runtime – система, управляющая контейнерами (Docker, containerd).

  • Kube Proxy – сетевой компонент, обеспечивающий доступ сервисов внутри кластера.

Как посмотреть системные компоненты в кластере?

kubectl get pods -n kube-system

Пример вывода:

NAME READY STATUS RESTARTS AGE

kube-apiserver-master 1/1 Running 0 10d

kube-controller-manager-master 1/1 Running 0 10d

kube-scheduler-master 1/1 Running 0 10d

kube-proxy-abc12 1/1 Running 0 10d

3. Создание пода из YAML, основные поля

Pod (под) – это минимальная единица Kubernetes. Он может содержать один или несколько контейнеров, объединённых общей сетью и хранилищем.

Основные поля Pod YAML

  • apiVersion – версия API Kubernetes (v1).

  • kind – тип ресурса (Pod).

  • metadata – имя и метки пода.

  • spec – спецификация пода (описание контейнеров).

  • containers – список контейнеров внутри пода.

  • image – используемый образ контейнера (например, nginx).

  • ports – список портов, открытых в контейнере.

Создать под в кластере:

kubectl apply -f pod.yaml

4. Сервисы ClusterIP и Headless

Сервис (Service) – это абстракция, которая предоставляет постоянный IP-адрес и DNS-имя для набора подов. Это важно, потому что IP-адреса подов динамически изменяются, и напрямую к ним обращаться неудобно.

ClusterIP (по умолчанию)

  • Доступен только внутри кластера.

  • Позволяет подам общаться друг с другом.

Посмотреть сервисы:

kubectl get svc

Headless Service

  • Используется, когда нужен прямой доступ к подам без балансировки.

  • Полезен для баз данных (PostgreSQL, MySQL, Kafka).

5. Сервисы NodePort и LoadBalancer

NodePort

  • Открывает доступ извне кластера через IP-адрес узла.

  • Используется, если нет балансировщика нагрузки.

LoadBalancer

  • Автоматически создаёт внешний IP-адрес.

  • Используется в облачных платформах (AWS, GCP, Azure).

Доступ к сервису:

http://<NODE_IP>:30080

6. Что такое Ingress?

Ingress – это маршрутизатор HTTP-трафика внутри кластера. Вместо того чтобы обращаться к каждому сервису через разные порты, можно настроить Ingress и использовать человеческие URL.

Пример:

http://myapp.com/api → перенаправляет на service-api

http://myapp.com/web → перенаправляет на service-web

Преимущества Ingress

Позволяет использовать дружелюбные домены вместо IP-адресов Может выполнять SSL-терминацию (HTTPS) Позволяет балансировать нагрузку между сервисами

Просмотр Ingress-контроллеров:

kubectl get ingress

7. Deployment, StatefulSet и DaemonSet

Deployment

Используется для обычных приложений, которые не требуют сохранения состояния. Пример: веб-серверы, API, микросервисы.

StatefulSet

Используется для сервисов, требующих сохранения состояния (базы данных, Kafka). Основное отличие:

  • Каждый под имеет постоянный идентификатор (pod-0, pod-1).

  • Хранилище привязано к определённому поду.

DaemonSet

Используется для запуска одного пода на каждой ноде. Пример: логирование (Fluentd), мониторинг (Prometheus Node Exporter).

8. Job и CronJob

Job

Запускает одноразовую задачу, которая выполняется и завершается. Пример: миграция базы данных.

CronJob

Запускает задачу по расписанию (аналог cron в Linux). Пример: очистка временных файлов раз в день.

9. ConfigMap и Secret

ConfigMap

Используется для хранения конфигурации (например, адресов БД). Пример: переменная DATABASE_URL, которая передаётся в под.

Secret

Используется для хранения секретных данных (пароли, API-ключи). В отличие от ConfigMap, данные в Secret кодируются в base64 и хранятся безопасно.

10. Основные команды kubectl

kubectl get pods # Список подов

kubectl get svc # Список сервисов

kubectl get nodes # Список узлов

kubectl apply -f file.yaml # Применение манифеста

kubectl delete -f file.yaml # Удаление ресурса

kubectl logs pod-name # Логи пода

kubectl describe pod pod-name # Детальная информация о поде