← Kubernetes: основы
6 мин · просто · Урок 4 из 11

Первый Pod

Из чего состоит манифест Pod, какие у него фазы и два способа его создать.

Если Kubernetes видишь впервые, сначала прочитай три коротких урока: YAML, зачем нужен Kubernetes и архитектура кластера. Дальше пойдёт легче.

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

Что такое Pod

Pod - наименьшая единица, которую запускает Kubernetes. Внутри Pod работает один или несколько контейнеров. Контейнеры одного Pod делят общую сеть, IP-адрес и тома (volumes - общие папки внутри Pod).

Обычно внутри Pod один контейнер. Ниже разбираем, из каких полей состоит такой Pod.

Манифест: четыре обязательных поля

Манифест - это YAML-файл с описанием объекта Kubernetes. Любой манифест начинается с одних и тех же четырёх полей.

apiVersion: v1
kind: Pod
metadata:
  name: hello
spec:
  containers:
    - name: hello
      image: busybox:1.36

apiVersion - версия API, по которой kubectl отправит объект в кластер. У базовых ресурсов (Pod, Service, ConfigMap, Secret, Namespace) значение v1.

kind - тип объекта. Здесь это Pod. Регистр важен: pod с маленькой буквы кластер не примет.

metadata - блок идентификации. Обязательное поле здесь name, имя Pod. Имя уникально внутри namespace - раздела кластера, который изолирует объекты друг от друга. Если Pod с таким именем уже есть, kubectl вернёт AlreadyExists.

spec - описание желаемого состояния. Для Pod главное поле - containers, список контейнеров. Каждый контейнер задаёт минимум name и image.

Контейнер: образ и тег

image - адрес образа контейнера с тегом. Тег указывает конкретную версию, например busybox:1.36.

Без тега Kubernetes подставит :latest. За этим тегом образ со временем меняется, и содержимое Pod становится непредсказуемым. Указывай конкретный тег и в учебном кластере, и в проде.

Фазы Pod

Pending образ ещё тянется старт Running контейнер запущен exit 0 ошибка Succeeded все вышли с кодом 0 Failed и не восстановились
Четыре фазы и два выхода из Running: успех или ошибка.

Команда kubectl get pod hello показывает фазу Pod в колонке STATUS.

Два способа создать Pod

Pod создают императивно или декларативно.

Императивно, одной командой:

kubectl run hello --image=busybox:1.36 -- sh -c 'sleep 3600'

В kubectl run сначала идёт имя Pod, потом флаги, после -- команда для контейнера. Здесь sleep 3600 держит контейнер живым час, иначе busybox завершится сразу и Pod уйдёт из Running.

Декларативно, через файл манифеста:

kubectl apply -f pod.yaml

В проде используют декларативный способ: манифест лежит в git, и каждое изменение видно в истории.

Многие сокращают kubectl до алиаса k, тогда команда выглядит как k get pod. Это одно и то же, разница только в наборе символов.

Остальные поля Pod (command/args, restartPolicy, жизненный цикл) разбираем в следующем уроке. Лимиты ресурсов и securityContext - в отдельных уроках курса.

Домашка

Теорию закрепляет задание на своём кластере: 3 шага с проверкой. Кластер поднимается по треку Kubernetes локально, задания лежат в репозитории k8s-practice.

./run.sh start k8s-first-pod     # развернуть стартовое состояние
./run.sh verify k8s-first-pod    # проверить текущий шаг

Коротко

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что такое Pod и чем он отличается от контейнера?

K8S-002

Прошли материал до конца? Отметьте урок пройденным.