Kubernetes на реальных примерах

Этот гайд предназначен для освоения Kubernetes — платформы для оркестрации контейнеров. Программа рассчитана на новичков и постепенно подводит слушателя к уровню опытного пользователя. Каждый урок снабжён примерами и тестовыми вопросами для проверки знаний.
🖥 На Stepik вышел курс, который учит работать с Docker на реальных проектах – лучший вход в работу с контейнерами.
Модуль 1. Знакомство с Kubernetes
Урок 1. Что такое Kubernetes
Описание:
- Kubernetes — это платформа с открытым исходным кодом для управления контейнеризованными приложениями, которая автоматизирует развёртывание, масштабирование и управление контейнерами.
- Она была разработана компанией Google и передана в Cloud Native Computing Foundation (CNCF). Платформа помогает запускать микросервисные приложения и упрощает администрирование.
- Основные задачи: оркестрация контейнеров, управление ресурсами, самоисцеление (перезапуск упавших контейнеров) и автоматическое масштабирование.
Пример: простая веб‑служба, написанная на Python, упаковывается в образ Docker и развертывается в Kubernetes, который автоматически создаёт несколько копий контейнера и балансирует запросы между ними.
Тест:
- Что такое Kubernetes?
- Операционная система для запуска виртуальных машин.
- Платформа для оркестрации контейнеров, автоматизирующая развёртывание и масштабирование приложений. ✅
- Язык программирования для разработки микросервисов.
- База данных для хранения контейнеров.
- Какую задачу решает Kubernetes?
- Управляет только сетевым трафиком.
- Автоматизирует развёртывание, масштабирование и мониторинг контейнеризованных приложений. ✅
- Служит для проектирования микросхем.
- Является текстовым редактором.
- Какая организация развивает Kubernetes?
- Cloud Native Computing Foundation (CNCF). ✅
- Apache Software Foundation.
- Mozilla Foundation.
- FreeBSD Foundation.
Урок 2. Архитектура кластера
Описание:
- Кластер Kubernetes состоит из управляющих компонентов (control plane) и рабочих узлов (nodes). Узел — это «рабочая машина» (виртуальная или физическая), на которой запускаются подыkubernetes.io.
- Управляющая плоскость включает API‑сервер, планировщик (scheduler) и controller manager — службы, которые принимают решения о размещении подов, следят за состоянием и управляют инфраструктурой.
- На каждом рабочем узле работает kubelet (агент, отвечающий за связь с управляющей плоскостью), а также контейнерный runtime (например, containerd или Docker), который запускает контейнерыkubernetes.io.
- Контрольная плоскость распределяет поды по узлам, следя за доступными ресурсами и состоянием компонентов. При необходимости перезапускает контейнеры или переносит их на другие узлы.
Тест:
- Что такое «узел» (Node) в Kubernetes?
- Веб‑сервер, который обслуживает пользователей.
- Рабочая машина (физическая или виртуальная), на которой запускаются поды и которая управляется контрольной плоскостьюkubernetes.io. ✅
- Отдельный контейнер в кластере.
- База данных для хранения образов.
- Какие компоненты обычно работают на каждом узле?
- Только API‑сервер.
- kubelet и контейнерный runtime (например, containerd)kubernetes.io. ✅
- Только Git‑сервер.
- Планировщик и controller manager.
- За что отвечает планировщик (scheduler)?
- За загрузку образов контейнеров из интернета.
- За выбор узла, на котором будет запущен новый под, учитывая доступные ресурсы. ✅
- За хранение данных в кластере.
- За обновление ядра операционной системы.
Урок 3. Основные объекты Kubernetes
Описание:
- Под (Pod) — наименьшая единица развертывания в Kubernetes. Под представляет собой группу из одного или нескольких контейнеров с общей сетью и дисковым пространством. Поды предназначены для совместного запуска тесно связанных контейнеровkubernetes.io.
- Сервис (Service) — абстракция, позволяющая объединить набор подов и предоставить им стабильную точку доступа в сети. Сервис решает проблему обнаружения подов и балансировки нагрузкиkubernetes.io.
- Deployment — контроллер, который управляет набором подов и обеспечивает декларативные обновления. Позволяет описать желаемое количество реплик и обновлять приложения без простоевkubernetes.io.
- ReplicaSet, StatefulSet, DaemonSet — другие контроллеры для управления подами (со статическим именованием, состоянием или запуском по одному экземпляру на каждом узле).
- ConfigMap и Secret — хранилища для конфигурации и секретов, монтируемые в контейнеры.
Тест:
- Что такое Pod?
- Группа из одного или более контейнеров с общим сетевым и дисковым пространствомkubernetes.io. ✅
- Система для управления дисками.
- Отдельная виртуальная машина.
- Скрипт для развертывания приложений.
- Для чего используется Service?
- Для установки операционной системы.
- Для экспонирования набора подов через единый сетевой адрес и балансировку нагрузкиkubernetes.io. ✅
- Для хранения секретов.
- Для управления версиями контейнеров.
- Что делает Deployment?
- Управляет обновлениями и количеством реплик подов в декларативном стилеkubernetes.io. ✅
- Создаёт базы данных.
- Настраивает сетевые правила.
- Изолирует сеть контейнеров.
Модуль 2. Поды и контейнеры
Урок 1. Поды и контейнеры в Kubernetes
Описание:
- Под — это оболочка вокруг контейнера(ов). В Kubernetes принято помещать один контейнер в под, но иногда требуется несколько контейнеров, которые должны быть совместно запущены (sidecar‑контейнеры). Поды имеют общий IP‑адрес и точки монтирования.
- Создание пода с помощью YAML‑манифеста: в секции
apiVersion: v1,kind: Podуказываются метаданные и описание контейнеров. Пример nginx‑пода:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
- Поды обычно создаются через контроллеры (Deployment, Job и др.), а не напрямую. Контроллеры обеспечивают управление жизненным циклом и масштабированиеkubernetes.io.
Тест:
- Что является основной единицей развертывания в Kubernetes?
- Контейнер Docker.
- Под (Pod). ✅
- Узел (Node).
- ClusterIP.
- Сколько контейнеров может содержать под?
- Всегда один.
- Один или несколько, которые должны быть совместно запущены. ✅
- Не более двух.
- Столько же, сколько узлов в кластере.
- Что рекомендуется использовать для создания подов в большинстве случаев?
- Контроллеры (например, Deployment), обеспечивающие управление и масштабированиеkubernetes.io. ✅
- Ручное создание командой
kubectl create pod. - Запуск подов через cron.
- Использование внешних скриптов.
Урок 2. Жизненный цикл и управление подами
Описание:
- Поды считаются эфемерными объектами: при удалении пода его данные исчезают (если они не вынесены в постоянное хранилище). Контроллеры (Deployment, ReplicaSet) отвечают за создание и удаление подов при изменении состояния.
- Каждому поду назначается уникальный IP‑адрес; при перезапуске будет назначен новый IP. Поэтому для обращения к подам используется сервис.
- Статус пода можно просмотреть командой
kubectl get podsиkubectl describe pods. kubectl logsвыводит логи контейнеров, аkubectl execпозволяет выполнять команды внутри контейнера.
Тест:
- Почему поды считаются эфемерными?
- Потому что они навсегда сохраняют данные при перезапуске.
- Потому что при удалении пода его данные исчезают, если они не вынесены в постоянное хранилище. ✅
- Потому что они работают только на Windows.
- Потому что к ним нельзя подключиться.
- Какая команда показывает список подов в текущем пространстве имён?
kubectl logs.kubectl get pods. ✅kubectl apply.kubectl scale.
- Для чего используется команда
kubectl exec?- Для вывода списка подов.
- Для запуска команды внутри контейнера пода. ✅
- Для удаления пода.
- Для создания сервиса.
Урок 3. Контроллеры: ReplicaSet, Deployment и StatefulSet
Описание:
- ReplicaSet гарантирует наличие заданного количества реплик подов. Контроллер следит за количеством живых подов и создаёт/удаляет их при отклонении от желаемого состояния.
- Deployment предоставляет декларативные обновления ReplicaSet и подов. Он позволяет задать желаемое состояние приложения, а контроллер плавно обновит поды, создавая новые и удаляя старыеkubernetes.io.
- StatefulSet используется для приложений, которым требуется сохранение идентичности подов (имена, упорядоченный запуск/остановка) и стабильное хранилище. Применяется для баз данных, распределённых систем.
- DaemonSet гарантирует, что на каждом узле будет запущен один экземпляр пода (например, системный агент или мониторинг).
Тест:
- Что обеспечивает ReplicaSet?
- Управление конфигурацией контейнеров.
- Поддержание заданного количества реплик подов, автоматическое создание/удаление. ✅
- Управление секретами.
- Создание ingress‑контроллеров.
- Какие преимущества даёт Deployment по сравнению с прямым использованием ReplicaSet?
- Deployment позволяет описывать желаемое состояние и обеспечивает атомарные обновления и откаты версий без простоя приложенияkubernetes.io. ✅
- Он служит для хранения секретов.
- Он предоставляет доступ по постоянному IP‑адресу.
- Он автоматически монтирует тома.
- Для чего нужен StatefulSet?
- Для приложений с хранимым состоянием и требованием уникальных имён подов (например, базы данных). ✅
- Для балансировки сетевого трафика.
- Для управления конфигурационными файлами.
- Для сборки Docker‑образов.
- Что делает DaemonSet?
- Запускает поды только на одном узле.
- Гарантирует, что на каждом узле кластера будет запущен один экземпляр пода (например, для мониторинга). ✅
- Создаёт секреты.
- Управляет масштабированием.
Модуль 3. Развёртывание и управление рабочими нагрузками
Урок 1. Создание и обновление Deployment
Описание:
- Deployment управляет ReplicaSet и подами. Он позволяет описать желаемое количество копий приложения и автоматизировать процесс обновления. Чтобы создать Deployment, используется манифест
apiVersion: apps/v1,kind: Deployment. В нём указывают имя, количество реплик и шаблон пода. - Обновление Deployment происходит постепенно: создаётся новый ReplicaSet, а старые поды удаляются по мере появления новыхkubernetes.io. Это обеспечивает непрерывность работы приложения.
- Команды
kubectl apply -f deployment.yamlсоздают/обновляют Deployment, аkubectl rollout status deployment/<name>показывает статус развёртывания.
Тест:
- Что описывается в Deployment?
- Только конфигурация узлов.
- Декларативное состояние приложения (количество реплик, образ контейнера), которое должен поддерживать контроллер. ✅
- Состояние сети кластера.
- Правила firewall.
- Как происходит обновление Deployment?
- Старые поды удаляются сразу, а новые запускаются после удаления.
- Создаётся новый ReplicaSet с обновлённым шаблоном, затем постепенно масштабируется новый и уменьшается старый, что обеспечивает непрерывную работу приложенияkubernetes.io. ✅
- Контейнеры обновляются внутри существующих подов.
- Выполняется обновление ядра операционной системы.
- Какая команда позволяет следить за состоянием развертывания?
kubectl get pods.kubectl rollout status deployment/<имя>✅kubectl delete deployment.kubectl proxy.
Урок 2. Управление ReplicaSet и масштабирование
Описание:
- ReplicaSet обеспечивает поддержание определённого количества подов. Масштабирование можно выполнить вручную (
kubectl scale deployment <имя> --replicas=<число>), указав желаемое число реплик. - Автоматическое масштабирование реализуется при помощи Horizontal Pod Autoscaler (HPA), который увеличивает или уменьшает количество реплик на основе метрик (например, загрузки CPU). Для работы HPA требуется компонент metrics‑server и объект
HorizontalPodAutoscaler. - Масштабирование вниз может происходить постепенно для экономии ресурсов. Следует следить за пределами ресурсов (requests/limits) в манифестах контейнеров.
Тест:
- Что делает ReplicaSet при падении одного из подов?
- Ничего не делает.
- Перезапускает контейнер внутри пода.
- Создаёт новый под, чтобы поддерживать заданное количество реплик. ✅
- Останавливает все поды.
- Как называется объект для горизонтального автоматического масштабирования подов?
- VerticalPodAutoscaler.
- HorizontalPodAutoscaler. ✅
- Deployment.
- ConfigMap.
- Какая команда масштабирует Deployment до указанного количества реплик?
kubectl delete.kubectl scale deployment <имя> --replicas=<N>✅kubectl logs.kubectl run.
Урок 3. StatefulSet и DaemonSet
Описание:
- StatefulSet используется для приложений, которым требуются стабильные идентификаторы подов и сохранение состояния. Каждый под имеет уникальное имя (например,
app-0,app-1) и может иметь привязанный PersistentVolume, который сохраняет данные при перезапуске. - DaemonSet гарантирует, что на каждом узле будет запущена одна копия пода. Это полезно для агентов мониторинга (Prometheus Node Exporter), журналирования или сетевых плагинов.
- Удаляя DaemonSet, можно остановить все запущенные экземпляры на узлах. Масштабирование осуществляется автоматически при добавлении или удалении узлов.
Тест:
- Для чего предназначен StatefulSet?
- Для бессостоящих приложений.
- Для приложений, где требуется сохранение состояния и уникальные имена подов (например, базы данных). ✅
- Для динамического масштабирования CPU.
- Для управления секретами.
- Какое свойство отличает DaemonSet от ReplicaSet?
- DaemonSet разворачивает поды только на одном узле.
- DaemonSet гарантирует одну копию пода на каждом узле кластера, независимо от количества узлов. ✅
- ReplicaSet предназначен для приложений со статусом.
- DaemonSet обновляет контейнеры без перерыва.
- Для чего пригодится DaemonSet?
- Для развертывания сервисов балансировки.
- Для запуска агентов мониторинга или сетевых компонентов на всех узлах. ✅
- Для создания ConfigMap.
- Для обновления ядер ОС.
Модуль 4. Сервисы и сетевое взаимодействие
Урок 1. Сервисы и балансировка нагрузки
Описание:
- Service позволяет экспонировать набор подов через единый сетевой адрес. Он решает проблему обнаружения подов, которые могут динамически появляться и исчезать. Сервис создаётся объектом
Service, где указывается селектор для выбора нужных подовkubernetes.io. - Поддерживаются типы сервисов: ClusterIP (доступ внутри кластера), NodePort (открытие порта на каждом узле), LoadBalancer (создаёт балансировщик в облаке) и ExternalName (псевдоним DNS).
- Сервис работает совместно с DNS: каждому сервису назначается DNS‑имя, по которому другие поды могут обращаться к нему.
- Пример простого сервиса:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: ClusterIP
Тест:
- Какую проблему решает Service?
- Настройку дисков.
- Обеспечивает обнаружение подов и балансировку нагрузки между нимиkubernetes.io. ✅
- Установку обновлений ядра.
- Настройку логирования.
- Какой тип сервиса используется для внутреннего доступа в кластере?
- NodePort.
- ClusterIP. ✅
- LoadBalancer.
- ExternalName.
- Что делает Service с типом LoadBalancer?
- Ничего не делает.
- Создаёт внешний балансировщик нагрузки в облаке и направляет трафик на узлы кластера. ✅
- Удаляет поды.
- Создаёт ConfigMap.
Урок 2. Ingress и маршрут трафика
Описание:
- Ingress — объект, позволяющий управлять входящим HTTP/HTTPS‑трафиком и маршрутизировать его к различным сервисам на основе правил (URL‑путь, хост). Ingress работает совместно с контроллером Ingress, который реализует фактическое перенаправление.
- С помощью Ingress можно настроить SSL‑терминацию, переписывание путей и базовую аутентификацию. Это позволяет иметь один внешний IP‑адрес и обслуживать множество приложений.
- Пример Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Тест:
- Что такое Ingress?
- Объект хранения конфигураций.
- Объект для маршрутизации входящих HTTP/HTTPS‑запросов к сервисам внутри кластера. ✅
- Система логирования.
- Система управления узлами.
- Для чего нужен Ingress‑контроллер?
- Для автоматизации развёртывания баз данных.
- Для реализации правил Ingress на уровне сети и балансировщика. ✅
- Для создания PersistentVolume.
- Для управления секретами.
- Какой тип трафика обычно обрабатывает Ingress?
- TCP пакеты для базы данных.
- HTTP/HTTPS‑запросы. ✅
- ICMP‑пакеты.
- Системные журналы.
Урок 3. Сетевые политики и безопасность
Описание:
- NetworkPolicy — объект, который определяет правила сетевого взаимодействия между подами. По умолчанию, если в кластере включён сетевой плагин с поддержкой NetworkPolicy, трафик между подами разрешён. Сетевые политики могут ограничивать входящий и исходящий трафик по IP‑адресам, пространствам имён и меткам.
- Пример политики, разрешающей входящий трафик только от подов с меткой
access: granted:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-access
spec:
podSelector:
matchLabels:
app: my-app
ingress:
- from:
- podSelector:
matchLabels:
access: granted
ports:
- protocol: TCP
port: 80
- Сетевые политики важны для обеспечения безопасности приложений, особенно в многопользовательских кластерах.
Тест:
- Для чего используется NetworkPolicy?
- Для настройки ядра Linux.
- Для ограничения сетевого трафика между подами согласно заданным правилам. ✅
- Для обновления контейнеров.
- Для управления хранилищем.
- Что происходит, если не настроены сетевые политики и плагин поддерживает их?
- Весь трафик блокируется.
- Весь трафик разрешён. ✅
- Сеть перезапускается.
- Настраиваются только исходящие соединения.
- Какие параметры используются в правилах NetworkPolicy?
- Подсети и версии ядра.
- IP‑диапазоны, метки подов, пространства имён и порты. ✅
- Только имена сервисов.
- Количество реплик Deployment.
Модуль 5. Хранение данных и конфигурация
Урок 1. Томa и постоянные тома
Описание:
- В Kubernetes том (Volume) — это каталог, доступный контейнерам внутри подаkubernetes.io. Типы томов определяют, где и как хранится информация:
emptyDir(файлы удаляются при удалении пода),hostPath(монтирование каталога хоста),configMap(файлы конфигурации) и др. - Чтобы использовать том, его описывают в разделе
volumesманифеста пода и монтируют в контейнер черезvolumeMountskubernetes.io. - PersistentVolume (PV) и PersistentVolumeClaim (PVC) — ресурсы, которые позволяют выделить долговременное хранилище. PV представляют физическое хранилище (EBS, NFS), а PVC — запрос приложения на дисковое пространство. Связывание PV и PVC обеспечивает сохранность данных при удалении подов.
Тест:
- Что представляет собой том (Volume) в Kubernetes?
- Файл конфигурации.
- Каталог, который может содержать данные и доступен контейнерам в подеkubernetes.io. ✅
- Объект для маршрутизации трафика.
- Таблица в базе данных.
- Для чего используются PersistentVolume и PersistentVolumeClaim?
- Для автоматического масштабирования.
- Для организации долгосрочного хранения данных, независимого от жизненного цикла подов. ✅
- Для управления сетевыми политиками.
- Для обновления подов.
- Как подключить том к контейнеру?
- Монтировать его через
volumeMountsв описании контейнера и описать сам том в секцииvolumeskubernetes.io. ✅ - Указать его в
ports. - Создать ConfigMap.
- Использовать команду
kubectl logs.
- Монтировать его через
Урок 2. ConfigMap и Secret
Описание:
- ConfigMap — объект, позволяющий хранить неконфиденциальные данные конфигурации в формате ключ‑значение. Эти данные можно монтировать как том или передавать в контейнер через переменные окружения.
- Secret — объект для хранения конфиденциальной информации (пароли, токены). В отличие от ConfigMap, данные в Secret кодируются (base64) и могут быть ограничены по доступу.
- Пример использования ConfigMap и Secret в поде:
apiVersion: v1
kind: Pod
metadata:
name: secret-example
spec:
containers:
- name: app
image: alpine
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-secret
key: username
- name: CONFIG_VALUE
valueFrom:
configMapKeyRef:
name: app-config
key: my_key
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: app-config
- Для создания ConfigMap используется
kubectl create configmap, а для Secret —kubectl create secret generic.
Тест:
- Какой объект следует использовать для хранения паролей в Kubernetes?
- ConfigMap.
- Secret. ✅
- Deployment.
- Ingress.
- Чем отличаются ConfigMap и Secret?
- Secret хранит конфиденциальные данные и кодируется, ConfigMap — неконфиденциальные данные. ✅
- Secret используется только для сетевых политик.
- ConfigMap предназначен для баз данных.
- Ничем не отличаются.
- Каким способом можно подставить значение из Secret в контейнер?
- Через
valueFrom.secretKeyRefв разделеenv. ✅ - Через
ports. - Через
args. - Через
ingress.
- Через
Урок 3. StorageClass и динамическое выделение хранилища
Описание:
- StorageClass определяет класс хранилища, который позволяет динамически создавать PersistentVolume. В нём описываются параметры провайдера (например, тип диска в облаке, режим доступа).
- При создании PVC, в котором указан StorageClass, Kubernetes автоматически создаёт PV с нужными характеристиками.
- К примеру, в AWS можно создать StorageClass с использованием EBS GP3 дисков:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp3
provisioner: ebs.csi.aws.com
parameters:
type: gp3
fsType: ext4
allowVolumeExpansion: true
reclaimPolicy: Delete
Тест:
- Для чего используется StorageClass?
- Для описания динамических параметров выделения дисков (например, тип диска, репликация). ✅
- Для управления Ingress.
- Для настройки сетевой политики.
- Для обновления контейнеров.
- Что происходит при создании PVC, если указан StorageClass?
- PVC остаётся без хранилища.
- Kubernetes автоматически создаёт PersistentVolume соответствующего класса. ✅
- Ничего не происходит.
- Создаётся ReplicaSet.
- Что такое параметр
allowVolumeExpansionв StorageClass?- Разрешает изменение размера тома после его создания. ✅
- Задаёт тип сети.
- Управляет сетевыми правилами.
- Определяет количество реплик.
Модуль 6. Масштабирование, мониторинг и реальные примеры
Урок 1. Автоматическое масштабирование и ресурсы
Описание:
- Horizontal Pod Autoscaler (HPA) — контроллер, который автоматически увеличивает или уменьшает количество реплик подов на основе метрик (загрузка CPU, пользовательские метрики). Для работы HPA необходимо установить
metrics-serverили Prometheus Adapter. - Vertical Pod Autoscaler (VPA) — контроллер, который автоматически подбирает значения ресурсов (requests/limits) для контейнеров. VPA рекомендуется использовать для фоновых или batch‑нагрузок, но реже для веб‑сервисов.
- Чтобы правильно настроить автоскейлинг, в манифестах контейнеров необходимо указать
resources.requestsиresources.limits.
Тест:
- Какая разница между HPA и VPA?
- HPA масштабирует количество подов, VPA корректирует запрашиваемые ресурсы контейнеров. ✅
- VPA масштабирует только сетевые политики.
- HPA управляет секретами.
- Они не отличаются.
- Какие метрики обычно используются HPA?
- Загрузка CPU и пользовательские метрики. ✅
- Число Ingress.
- Параметры ядра Linux.
- Кольцевой буфер.
- Что необходимо установить для работы HPA?
- metrics‑server или другой источник метрик. ✅
- Secret Controller.
- ConfigMap.
- Ingress Controller.
Урок 2. Мониторинг и логирование
Описание:
- Для наблюдения за состоянием приложений используются инструменты мониторинга: Prometheus (сбор метрик), Grafana (визуализация), Alertmanager (оповещения). Они могут быть развернуты в виде подов внутри кластера.
- Логирование осуществляется через системы, такие как ELK (Elasticsearch, Logstash, Kibana) или Loki, которые собирают и хранят логи контейнеров. Чтобы отправлять логи, часто используются Fluentd или Vector, настроенные через DaemonSet.
- В Kubernetes предусмотрены события (
kubectl get events) и логи (kubectl logs) для отладки.
Тест:
- Какой инструмент используют для сбора и хранения метрик?
- Prometheus. ✅
- Kibana.
- Fluentd.
- Ceph.
- Для чего служит Grafana?
- Для хранения секретов.
- Для визуализации метрик, полученных от Prometheus. ✅
- Для создания подов.
- Для маршрутизации HTTP‑запросов.
- Что такое DaemonSet в контексте логирования?
- Контроллер, который запускает по одному экземпляру пода на каждом узле, например, для сбора логов. ✅
- Контроллер, который управляет ConfigMap.
- Репликация подов.
- Обновление ядра ОС.
Урок 3. Реальный пример: деплой WordPress с MySQL
Описание:
- В качестве практики развернём веб‑приложение WordPress, использующее базу данных MySQL. Каждое приложение будет выполнено в отдельном поде или наборе подов, управляющихся Deployment.
- Создадим PersistentVolumeClaims для хранения данных базы данных и загрузок WordPress. Будет создан Service для базы данных и сервис типа LoadBalancer или NodePort для WordPress.
- Пример файлов:
1. Манифест базы данных (mysql-deployment.yaml):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8
env:
- name: MYSQL_ROOT_PASSWORD
value: password
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
2. Манифест WordPress (wordpress-deployment.yaml):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:6
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_PASSWORD
value: password
volumeMounts:
- name: wordpress-storage
mountPath: /var/www/html
volumes:
- name: wordpress-storage
persistentVolumeClaim:
claimName: wp-pvc
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
selector:
app: wordpress
- Развернув эти манифесты, мы получим работающий блог. Для доступа используйте
kubectl port-forwardили сервис типа LoadBalancer. Трафик между WordPress и базой данных осуществляется через сервисmysql.
Тест:
- Какие PersistentVolumeClaim используются в этом примере?
mysql-pvcиwp-pvcдля хранения данных MySQL и WordPress. ✅- Только
mysql-pvc. - Только
wp-pvc. - PVC не используются.
- Для чего используется сервис
mysql?- Для предоставления постоянного IP‑адреса и порта для базы данных MySQL. ✅
- Для обновления WordPress.
- Для логирования.
- Для настройки Ingress.
- Какой тип сервиса выбран для WordPress в примере?
- ClusterIP.
- NodePort (порт 30080). ✅
- LoadBalancer.
- ExternalName.



