Урок 02 · Kubernetes на практике

Первый локальный кластер

Что-то не запустилось или осталось непонятным? Задайте вопрос в комментариях к разбору этого урока в канале — разберёмся вместе.

В уроке 1 вы запускали контейнер командой docker run — сами, вручную, на своей машине. Сегодня вместо одной машины появится кластер: несколько логических ролей, которые вместе решают, где и как запускать ваши контейнеры, даже если что-то упадёт. Разворачивать целый настоящий кластер ради тренировки дорого и медленно — поэтому мы поднимем его локально через minikube, который эмулирует полноценный кластер прямо на ноутбуке.

Как устроен кластер

Три роли, которые важно не путать:

  • Control plane — «мозг» кластера. Принимает ваши команды через API Server и решает, на какой машине что запускать (Scheduler). Сам код приложений не выполняет.
  • Node — рабочая машина (реальная или виртуальная), на которой реально живут контейнеры. На ней работает kubelet — агент, который слушает control plane и дёргает знакомый вам по уроку 1 Docker.
  • kubectl — командная строка, через которую вы разговариваете с API Server. Не с нодой напрямую — всегда через control plane.
Схема: kubectl отправляет запрос в control plane, control plane решает, на какой node запустить контейнер ТЕРМИНАЛ Вы kubectl get nodes задаёт вопросы кластеру запрос CONTROL PLANE Мозг кластера API Server Scheduler сам код не выполняет куда? NODE Рабочая машина kubelet Docker (урок 1) здесь реально живут контейнеры
minikube эмулирует все три роли на одной вашей машине — но логически они остаются раздельными, ровно как в настоящем многомашинном кластере
Источник Официальная схема архитектуры — Kubernetes Docs: Components

Практика: поднимите свой кластер

Понадобится всё тот же Docker из урока 1 (minikube по умолчанию использует его как драйвер) плюс два новых инструмента.

  1. Поставьте kubectl — командную строку Kubernetes — по официальной инструкции под вашу ОС.
  2. Поставьте minikube по официальной инструкции.
  3. Запустите кластер (при первом запуске minikube скачает образ узла — может занять несколько минут в зависимости от интернета):
    minikube start
  4. Проверьте, что node действительно появилась и готова:
    kubectl get nodes

    В колонке STATUS должно быть Ready. Это и есть та самая «рабочая машина» из схемы выше — просто она виртуальная и живёт внутри Docker на вашем компьютере.

  5. Спросите control plane, из чего он состоит:
    kubectl cluster-info
  6. Откройте графическую панель кластера — она покажет то же самое, что вы будете видеть командами, но наглядно:
    minikube dashboard
    Откроется браузер с веб-интерфейсом. Пока там пусто — в следующем уроке появится первый Pod, и вы увидите его прямо здесь.
Что вы только что сделали У вас теперь есть настоящий, живой Kubernetes-кластер — пусть и однонодовый, локальный. kubectl get nodes и kubectl cluster-info — это первые две команды, которые вы будете набирать машинально в каждом следующем уроке: первая проверяет, жив ли кластер, вторая — с чем вы вообще разговариваете.
Лайфхак Опытные пользователи k8s почти никогда не набирают kubectl целиком. Добавьте в профиль своей оболочки алиас alias k=kubectl и включите автодополнение команд — например, для bash: source <(kubectl completion bash) (свой вариант для zsh/fish есть в kubectl completion --help). Десять секунд настройки — и вы будете экономить время на каждой команде до конца курса.

Проверьте себя

Какая часть кластера решает, на какой node запустить ваш контейнер?

Напишите команду, которая запустит локальный кластер minikube:

Напишите команду, которая покажет список node в кластере и их статус: