Первые шаги с Docker и Kubernetes
Установка Docker Desktop
Docker Desktop — это графическое приложение, которое объединяет движок Docker, клиент командной строки и инструменты виртуализации. Для работы на Windows требуется активировать функции виртуализации в BIOS/UEFI материнской платы.
Системные требования
- Операционная система: Windows 10 или Windows 11 (версии 20H2 и выше).
- Архитектура процессора: x64 с поддержкой виртуализации (Intel VT-x / AMD-V).
- Память: минимум 4 ГБ ОЗУ (рекомендуется 8 ГБ и более).
- Диск: свободное место не менее 5 ГБ.
Пошаговая установка
- Скачивание установщика. Перейдите на официальный сайт проекта Docker и скачайте файл
Docker Desktop Installer.exe.
Docker Desktop Installer.exe
Разбор:
- Это имя файла установщика, а не команда для терминала; запускают двойным щелчком или из PowerShell:
.\Docker Desktop Installer.exe install. - Установщик подтягивает Docker Engine, CLI, Compose и (по выбору) компонент Kubernetes.
- На Windows 10/11 рекомендуется бэкенд WSL 2: Linux-ядро в WSL выполняет контейнеры быстрее, чем старый режим только на Hyper-V.
- Запуск установки. Запустите скачанный файл от имени администратора.
- Настройка компонентов. В мастере установки отметьте галочками следующие опции:
- Использование гипервизора Hyper-V.
- Использование WSL 2 (Windows Subsystem for Linux) версии 2. Это критически важно для производительности и совместимости с Kubernetes.
- Завершение. Дождитесь окончания процесса и перезагрузите компьютер при необходимости.
- Первый запуск. Откройте приложение Docker Desktop. Иконка в трее должна стать зеленой, что свидетельствует о готовности движка.
Если WSL 2 ещё не включён, в PowerShell от имени администратора (Windows 10 2004+ / Windows 11) обычно достаточно:
wsl --install
Разбор:
wsl --installставит подсистему WSL, ядро WSL 2 и дистрибутив по умолчанию (часто Ubuntu); после перезагрузки выполнитеwsl --set-default-version 2.- На старых сборках или при ручной настройке включают компоненты через DISM/Optional Features, в PowerShell это
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -AllиEnable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All(нужна перезагрузка). VirtualMachinePlatformдаёт лёгкую виртуализацию для WSL 2; без неё Docker Desktop на WSL 2 не стартует.- Hyper-V в мастере Docker Desktop — отдельный путь (Windows Pro/Enterprise); с WSL 2 Hyper-V для самих контейнеров обычно не обязателен, но опции могут пересекаться на одной машине.
Проверка работоспособности
В PowerShell или командной строке:
docker --version
Разбор:
- Вызывает клиент Docker CLI из PATH; версия клиента должна совпасть с тем, что ставит Docker Desktop.
- Если команда не найдена — Docker Desktop не запущен или каталог CLI не добавлен в PATH (перезапуск терминала после установки).
- На Windows CLI общается с демоном через named pipe
//./pipe/docker_engine(WSL 2 или Hyper-V бэкенд — в Settings → General).
Система выведет номер версии, например: Docker version 24.0.7, build afdd53b.
Docker version 24.0.7, build afdd53b
Разбор:
- Пример ожидаемого вывода: номер релиза клиента и короткий идентификатор сборки (
build …). - Строка подтверждает, что бинарник
dockerдоступен; для полной проверки движка нуженdocker run(ниже). - Версии клиента и сервера (
docker versionбез флагов) могут отличаться по полям — для диагностики смотрите и Client, и Server.
Выполните тестовый запуск образа для проверки изоляции процессов:
docker run hello-world
Разбор:
docker runсоздаёт контейнер из образа; если образа нет локально, CLI выполняет неявныйdocker pullс Docker Hub.hello-world— минимальный образ, который печатает приветствие и завершается; успех означает, что демон Docker и сеть до реестра работают.- На WSL 2 бэкенде контейнер выполняется внутри Linux VM в WSL, а не как нативный процесс Windows.
Play ITЗагрузка интерактивного демо…
Работа с образами и запуск контейнеров
Образ (Image) — это неизменяемый шаблон, содержащий код приложения, библиотеки и зависимости. Контейнер — это запущенный экземпляр образа.
Получение образов из реестра
Реестр Docker Hub — основное хранилище публичных образов. Загрузка образа (pull), пример Nginx:
docker pull nginx:1.27-alpine
Разбор:
pullскачивает слои образа в локальное хранилище Docker Desktop (на диске Windows, каталог WSL-дистрибутиваdocker-desktop-dataпри бэкенде WSL 2).nginx— имя репозитория на Docker Hub;1.27-alpine— тег (версия + базовый образ Alpine Linux).- Указывайте конкретный тег, а не
latest, чтобы повторные деплои не подтягивали неожиданную версию.
Указывайте конкретный тег (1.27-alpine), а не latest: иначе повторный деплой может подтянуть другую версию без изменения манифеста.
Просмотр доступных образов
Список локальных образов:
docker images
Разбор:
- Показывает образы в локальном store движка (аналог
docker image ls). - Колонки
REPOSITORY,TAG,IMAGE ID,CREATED,SIZEпомогают убедиться, чтоpullзавершился и какой тег закэширован. - Один
IMAGE IDможет соответствовать нескольким тегам, если они указывают на один и тот же манифест.
Вывод содержит таблицу с колонками:
REPOSITORY: имя образа.TAG: версия образа.IMAGE ID: уникальный идентификатор слоя.CREATED: дата создания.SIZE: размер на диске.
Запуск контейнера
Команда docker run создает и запускает контейнер из указанного образа.
Базовый пример запуска Nginx:
docker run -d --name my-web-server nginx:1.27-alpine
Разбор:
-d(detached) — контейнер в фоне, терминал не привязан к stdout процесса в контейнере.--name my-web-server— стабильное имя дляdocker stop,docker logs,docker rmвместо автогенерируемого.nginx:1.27-alpine— образ из локального кэша или с Hub; без-pпорты на хост Windows не публикуются.
Проверка состояния контейнера
Список активных контейнеров отображается командой:
docker ps
Разбор:
- По умолчанию только работающие контейнеры на текущем контексте Docker Desktop.
- Колонки
PORTS,NAMES,STATUSпоказывают проброс портов и имя, заданное через--name. - Если список пуст после
docker run -d, смотритеdocker ps -a— контейнер мог сразу завершиться с ошибкой.
Чтобы увидеть все контейнеры (включая остановленные), добавьте флаг -a:
docker ps -a
Разбор:
-a/--allдобавляет контейнеры в состоянииExited,Createdи т.д.- Полезно после сбоя entrypoint: контейнер есть, но не в
Up. STATUSвидаExited (1)намекает на код возврата процесса PID 1 в контейнере.
Доступ к приложению внутри контейнера
По умолчанию контейнеры изолированы от сети хоста. Чтобы открыть приложение по IP-адресу компьютера, необходимо пробросить порт.
Пример запуска с пробросом порта 80:
docker run -d -p 8080:80 --name my-web-server nginx:1.27-alpine
Разбор:
-p 8080:80— публикация порта: 8080 на хосте Windows → 80 внутри контейнера (Nginx слушает 80).- На Docker Desktop с WSL 2
localhost:8080на Windows перенаправляется в контейнер через сеть бэкенда. - Повторный
docker runс тем же--nameзавершится ошибкой, пока старый контейнер не удалён (docker rm).
Откройте браузер и перейдите по адресу http://localhost:8080. Вы увидите приветственную страницу Nginx. Тот же сценарий через Compose (nginx + проброс порта) — стек №1.
Управление жизненным циклом
Остановка и удаление контейнера выполняются отдельными командами:
docker stop my-web-server
docker rm my-web-server
Разбор:
docker stopпосылает SIGTERM процессу PID 1, затем SIGKILL по таймауту; имя должно совпадать с--nameили ID изdocker ps.docker rmудаляет остановленный контейнер; для работающего сначалаstopилиdocker rm -f.- Данные в анонимных томах без
-vприrmне всегда стираются — именованные тома переживают контейнер.
Для удаления всех контейнеров и очистки пространства можно использовать:
docker system prune
Разбор:
- Удаляет остановленные контейнеры, неиспользуемые сети, "висячие" образы и кэш сборки (по подтверждению).
- Не трогает работающие контейнеры и образы, на которые есть ссылки у запущенных контейнеров.
docker system prune -aагрессивнее — снимает неиспользуемые образы без тегов у running; в учебной среде осторожно.
Эта команда удалит остановленные контейнеры, неиспользуемые сети и дубликаты образов.
Вы уже попробовали pull, run, ps, stop, rm и system prune.
Полный список с пояснениями — build, push, exec, logs, inspect, cp, save/load и другие — в универсальной шпаргалке.
Настройка Kubernetes на локальной машине
Kubernetes (K8s) — это система автоматизированного развертывания, масштабирования и управления контейнеризированными приложениями. На Windows проще всего включить встроенный кластер в Docker Desktop (одноузловой control plane + worker). Альтернативы: Minikube или kind — отдельная установка, если Docker Desktop Kubernetes не используете. Ниже — сценарий с Docker Desktop.
Активация Kubernetes в Docker Desktop
- Откройте настройки Docker Desktop (шестеренка в левом верхнем углу окна).
- Перейдите во вкладку Settings -> Kubernetes.
- Установите переключатель Enable Kubernetes в положение "Вкл".
- Нажмите кнопку Apply & Restart. Система перезапустит сервисы и создаст кластер.
Процесс может занять несколько минут. В трее появится индикатор статуса кластера.
Установка CLI клиента kubectl
Инструмент kubectl позволяет взаимодействовать с API сервером Kubernetes. Он устанавливается автоматически вместе с Docker Desktop, но его наличие нужно проверить.
kubectl version --client
Разбор:
- Печатает версию только клиента
kubectl; флаг--clientне требует работающего кластера. - Бинарник ставится Docker Desktop вместе с CLI; PATH обновляется после установки/перезапуска терминала.
- Если ошибка "не найден" — скачайте
kubectl.exeс сайта Kubernetes и добавьте каталог в переменную PATH пользователя Windows.
Если вывод показывает ошибку, скачайте бинарный файл kubectl.exe с официального сайта Kubernetes и поместите его в папку, добавленную в переменную окружения PATH.
Проверка состояния кластера
Команда kubectl get nodes отображает узлы (ноды) кластера.
kubectl get nodes
Разбор:
- Обращается к API встроенного кластера Docker Desktop; контекст по умолчанию обычно
docker-desktop. - Узел
docker-desktop— единственная нода control plane и worker на локальной машине. NotReadyчаще всего значит, что Kubernetes ещё поднимается после Apply & Restart или не хватает ресурсов WSL 2 (память в Settings → Resources).
Ожидаемый вывод:
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 5m v1.29.0
Разбор:
STATUS Ready— kubelet на ноде здоров и принимает поды.ROLES control-plane— на этой ноде же работают компоненты управления (в учебном кластере всё на одной VM WSL).VERSION— версия kubelet/kubernetes на ноде; номер может отличаться от версии клиентаkubectl.
Статус Ready означает, что нода готова принимать рабочие нагрузки.
Play ITЗагрузка интерактивного демо…
Развёртывание приложения и оркестрация
Оркестрация включает создание манифестов (описаний ресурсов), их применение к кластеру и мониторинг состояния.
Namespace (необязательно)
По умолчанию ресурсы попадают в namespace default. Для изоляции учебного приложения:
kubectl create namespace dev
Разбор:
- Создаёт логический изолятор имён; объекты в
devне видны вdefaultбез-n dev. kubectl create namespace— императивная команда; в проде чаще namespace в YAML иkubectl apply.- Для учебных манифестов ниже можно оставить
defaultили добавитьmetadata.namespace: dev.
В манифестах добавьте metadata.namespace: dev или применяйте с -n dev.
Создание манифеста Deployment
Манифест описывает желаемое состояние приложения. Создайте файл deployment.yaml со следующим содержимым:
Код ITЗагрузка примера кода…
Разбор:
apiVersion: apps/v1иkind: Deployment— версия API и тип ресурса для управляемого набора подов.replicas: 2— желаемое число идентичных подов; контроллер Deployment создаёт ReplicaSet.selector.matchLabelsиtemplate.metadata.labelsсapp: my-appдолжны совпадать, иначе Deployment не привяжет поды.image: nginx:1.27-alpine— образ из Docker Hub; kubelet на нодеdocker-desktopскачивает его через runtime Docker Desktop.containerPort: 80— порт контейнера для Service и probe (сам по себе наружу не публикует).
★ Pod и контейнер. Deployment создаёт поды — на практике в поде один контейнер приложения. Несколько реплик Deployment — это несколько подов с одинаковой меткой app: my-app.
★ ReplicaSet. Deployment управляет объектом ReplicaSet, тот поддерживает нужное число Pod'ов с меткой app: my-app. Отдельный манифест ReplicaSet вручную почти не пишут.
Служба Service
Поды получают IP при создании, но при перезапуске IP меняется. Service даёт стабильное имя и балансирует запросы между подами с подходящими метками.
Создайте service.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- port: 80
targetPort: 80
Разбор:
type: ClusterIP— виртуальный IP только внутри кластера; с Windows-хоста напрямую не открыт безport-forwardили Ingress.selector.app: my-appдолжен совпадать с метками подов из Deployment.port: 80— порт Service;targetPort: 80— порт контейнера nginx в поде.
Метка app: my-app в selector обязана совпадать с template.metadata.labels в Deployment. Service получает стабильный DNS: my-app-service (в namespace default — my-app-service.default.svc.cluster.local). Проверка Endpoints:
kubectl get endpoints my-app-service
Разбор:
- Endpoints — список IP:port подов, прошедших selector Service.
- Пустой список при "живых" подах — несовпадение меток или поды не в
Ready. - Имя
my-app-serviceсовпадает сmetadata.nameвservice.yaml.
Внешний HTTP-трафик с интернета обычно идёт через Ingress + Ingress Controller; для локальной проверки на Windows удобнее port-forward (ниже).
Применение конфигурации
Для внедрения ресурса в кластер:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Разбор:
kubectl apply— декларативное создание/обновление; в PowerShell те же команды, еслиkubectlв PATH.-fуказывает файл манифеста; путь относительно текущей директории терминала.- Порядок Deployment → Service логичен, но Service можно применить и до появления подов (endpoints заполнятся позже).
Система сообщит о создании ресурсов:
deployment.apps/my-app-deployment created
service/my-app-service created
Разбор:
deployment.apps/...— группа APIapps, ресурс Deployment зарегистрирован в кластере.created— объект новый; при повторномapplyс изменениями будетconfigured.- Ошибки валидации YAML или API версии выводятся до этой строки.
★ Цикл согласования (reconcile). Вы задаёте желаемое состояние (replicas: 2). Control plane сравнивает его с фактическим и через контроллеры создаёт или удаляет Pod'ы, пока расхождение не исчезнет. После apply достаточно проверить поды (см. блок "Проверка работы подов" ниже).
После apply манифест попадает в API Server и etcd, Scheduler назначает Pod на ноду, kubelet скачивает образ, поднимает сеть и контейнеры.
Полная цепочка (фазы Pending → Running, завершение и SIGTERM) — в разделе жизненный цикл Pod.
Проверка работы подов
Под (Pod) — минимальная единица развёртывания в Kubernetes. Статус созданных экземпляров:
kubectl get pods
Разбор:
- В
defaultnamespace покажет поды с префиксомmy-app-deployment-…. READY 1/1— контейнер прошёл readiness (если probe не заданы, часто сразу после старта).STATUSContainerCreating/ImagePullBackOff— сигнал смотретьkubectl describe pod.
Пример вывода:
NAME READY STATUS RESTARTS AGE
my-app-deployment-5d4f8b7c9-x2k4l 1/1 Running 0 10s
my-app-deployment-5d4f8b7c9-j9m3n 1/1 Running 0 10s
Разбор:
- Два пода соответствуют
replicas: 2; суффикс после hash — уникальный идентификатор ReplicaSet. Runningи1/1— процесс nginx в контейнере запущен.RESTARTS 0— контейнер не перезапускался из-за падений.
Статус Running и значение 1/1 означают, что контейнер успешно запустился.
Масштабирование приложения
Kubernetes позволяет изменять количество реплик без остановки сервиса.
Увеличение количества копий до 5:
kubectl scale deployment my-app-deployment --replicas=5
Разбор:
- Меняет поле
spec.replicasDeployment без правки YAML на диске (до следующегоapply -fфайл и кластер могут разойтись). - Контроллер создаёт дополнительные поды на ноде
docker-desktop, если хватает CPU/RAM WSL. - Имя
my-app-deployment—metadata.nameиз манифеста.
Проверка результата:
kubectl get pods
Разбор:
- Должно отображаться пять подов в
Running(при достаточных ресурсах). - Часть в
Pending— нехватка ресурсов на локальном кластере; смотритеkubectl describe podдля событий scheduler. - Service продолжит балансировать между всеми подами с меткой
app: my-app.
Теперь в списке будет пять работающих подов.
Предоставление доступа извне
Внутри кластера приложение уже доступно по DNS имени my-app-service. Для доступа с хоста (браузер на Windows) удобнее всего port-forward; тип LoadBalancer в Docker Desktop часто долго остаётся в pending. Тип NodePort (порт 30000–32767 на узле) — альтернатива, если нужен доступ без port-forward.
Цепочка с Ingress в production: браузер → Ingress Controller → Service → Pod.
Получение информации о службе:
kubectl get svc my-app-service
kubectl port-forward svc/my-app-service 8080:80
Разбор:
kubectl get svc— ClusterIP и порты Service;EXTERNAL-IPдля ClusterIP обычно<none>.port-forwardподнимает туннель с localhost Windows на порт Service:8080локально →80у Service (дальше наtargetPortподов).- Процесс
port-forwardдержит терминал занятым; остановка — Ctrl+C.
Теперь приложение доступно по адресу http://localhost:8080.
Мониторинг и управление
Эффективное управление требует постоянного отслеживания логов и ресурсов.
Просмотр логов
Для просмотра вывода приложения из конкретного пода:
kubectl logs my-app-deployment-5d4f8b7c9-x2k4l
Разбор:
- Имя пода — из
kubectl get pods(суффикс hash у каждого деплоя свой). - Логи — stdout/stderr контейнера
nginx-containerиз манифеста. - Флаг
-fдобавляет потоковый просмотр (аналогtail -f).
Просмотр логов всех подов в рамках деплоймента:
kubectl logs -l app=my-app
Разбор:
-l app=my-app— селектор по метке; собирает логи со всех подов с этой меткой.- Удобно при нескольких репликах без перечисления имён подов.
- Для Deployment с несколькими контейнерами указывают
-c имя-контейнера.
Описание ресурса
Команда kubectl describe предоставляет детальную информацию о состоянии объекта, включая события и ошибки:
kubectl describe pod my-app-deployment-5d4f8b7c9-x2k4l
Разбор:
- Секция Events внизу — главный источник при
ImagePullBackOff,CrashLoopBackOff, проблемах монтирования томов. - Показывает назначенную ноду, IP пода, условия
Ready, лимиты и probe. - Подставьте актуальное имя из
kubectl get podsвместо примера из статьи.
В разделе Events можно увидеть процессы создания, привязки к узлу и возможные сбои.
Удаление ресурсов
Для полного удаления приложения из кластера:
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml
Разбор:
- Удаляет объекты, описанные в файлах (по
kind+metadata.name). - Deployment удаляет ReplicaSet и поды; Service — endpoints и ClusterIP.
- Порядок Service/Deployment не критичен при delete, но поды исчезнут с Deployment.
Или удаление одного ресурса по имени:
kubectl delete deployment my-app-deployment
Разбор:
- Императивное удаление по типу и имени без файла.
- Service
my-app-serviceостанется, пока не удалите отдельно — трафик в никуда. - Namespace
devудаляется командойkubectl delete namespace dev(осторожно — каскадно все объекты внутри).
Практический мини-сценарий для закрепления
Ниже компактная лабораторка, которая даёт полный цикл "поднять, проверить, масштабировать, снять логи, удалить".
- Запустите Deployment и Service из манифестов.
- Проверьте поды и Endpoints.
- Откройте доступ через
port-forward. - Увеличьте число реплик до 5.
- Проверьте распределение нагрузки и статус.
- Удалите ресурсы и убедитесь, что namespace чист.
Набор команд:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl get pods -o wide
kubectl get endpoints my-app-service
kubectl port-forward svc/my-app-service 8080:80
kubectl scale deployment my-app-deployment --replicas=5
kubectl get pods
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml
Разбор:
apply— поднять Deployment и Service;get pods -o wide— поды с нодой и IP для отладки сети.get endpoints— убедиться, что Service видит поды передport-forward.port-forward— проверка в браузере на Windows; в отдельном окне PowerShell выполняйтеscaleиget pods.delete -f— убрать учебные ресурсы; при namespacedevдобавляйте-n devко всем командам.
После выполнения вы руками пройдёте базовые операции SRE-разработчика в Kubernetes.
Типовые ошибки новичка и быстрая диагностика
| Симптом | Частая причина | Что проверить |
|---|---|---|
ImagePullBackOff | Неверное имя образа или закрытый реестр | kubectl describe pod <pod-name> и поле image |
CrashLoopBackOff | Приложение падает при старте | kubectl logs <pod-name> --previous |
Pending | Не хватает CPU/RAM на узле или Pod ещё не запланирован | kubectl describe pod <pod-name> и requests/limits; см. жизненный цикл Pod |
| Сервис не отвечает | Метки Service и Deployment не совпадают | kubectl get svc, kubectl get pods --show-labels |
| Нет доступа из браузера | Нет port-forward или неверный порт | Проверить kubectl port-forward и адрес http://localhost:8080 |
Базовая команда для расследования почти любого кейса:
kubectl describe pod <pod-name>
Разбор:
- Замените
<pod-name>на имя изkubectl get pods(угол скобок в команду не вводите). - События scheduler, kubelet, pull образа и failed probe — в Events.
- Для упавшего контейнера дополните
kubectl logs <pod-name> --previous.
Она показывает события планирования, сетевые ошибки, проблемы с образом и probe-проверками.
Что изучить следующим шагом
После этой практики логично идти в более глубокие темы:
- Docker Swarm и Kubernetes — картина архитектуры и выбор подхода.
- Реализация Kubernetes — production-паттерны с Helm, Ingress, HPA и KEDA.
- Справочник по Kubernetes — команды и YAML-поля как рабочая памятка.
Так вы сохраняете плавный переход от "первого запуска" к реальной эксплуатации кластера.
Мини-практикум по диагностике ошибок
Этот блок тренирует навык поиска причин, когда "что-то не работает".
Ситуация 1 — ошибка в имени образа
Измените в deployment.yaml образ на несуществующий тег и примените манифест:
kubectl apply -f deployment.yaml
kubectl get pods
kubectl describe pod <pod-name>
Разбор:
- После
applyподы перейдут вImagePullBackOff— kubelet не сможет скачать образ с Hub. get pods— быстрый статус; точная причина вdescribe→ Events (Failed to pull image).- Верните корректный тег в YAML и снова
kubectl apply -f deployment.yaml.
Ожидаемый результат — статус ImagePullBackOff. После этого верните корректный тег образа и повторите apply.
Ситуация 2 — несовпадение меток Service и Deployment
Смените selector.app в service.yaml на другое значение и примените:
kubectl apply -f service.yaml
kubectl get endpoints my-app-service
Разбор:
- Service обновится, но endpoints опустеют, если ни один под не несёт новую метку selector.
kubectl get endpoints my-app-serviceпокажет пустой список адресов — типичный симптом рассинхрона меток.- Верните
app: my-appв selector и в labels Deployment, затем снова проверьте endpoints.
Вы увидите пустой endpoint-list. Верните совпадающую метку и снова проверьте endpoints.
Ситуация 3 — недостаток ресурсов
Повысьте replicas до значения, которое превышает доступные ресурсы вашей машины, затем:
kubectl get pods
kubectl describe pod <pending-pod-name>
Разбор:
- Лишние поды останутся в
Pending— scheduler не найдёт ноду с свободнымиrequestsCPU/RAM. - В Events будет
Insufficient cpuилиInsufficient memory(зависит от лимитов WSL и Docker Desktop). - Показывает, зачем в проде задают
requests/limitsи мониторят ёмкость кластера.
Такой эксперимент показывает, как Kubernetes сообщает о проблемах планирования и почему важны корректные requests/limits.
Короткий чек-лист локальной готовности
- Docker Desktop запущен и Kubernetes в статусе Ready.
kubectl get nodesвозвращает хотя бы одну ноду со статусом Ready.- Локальные манифесты проходят
kubectl applyбез ошибок. - Сервис имеет рабочие endpoints.
- Доступ к приложению подтверждён через
port-forward.
После этого можно переходить к более сложным сценариям из Реализация Kubernetes.
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первые шаги к микросервисам, Первые шаги с Memcached, Первые шаги с Cassandra, Первые шаги с Redis, Первые шаги с MongoDB, Первые шаги с SQL.