Первый 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
Команда kubectl get pod hello показывает фазу Pod в колонке STATUS.
Pending- Pod создан, но контейнер ещё не запущен (например, тянется образ).Running- запущен хотя бы один контейнер.Succeeded- все контейнеры завершились с кодом 0.Failed- контейнеры завершились с ошибкой и не восстановились.
Два способа создать 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 # проверить текущий шаг
Коротко
- Pod - минимальная единица запуска, внутри один или несколько контейнеров с общей сетью и томами.
- Любой манифест начинается с
apiVersion,kind,metadata,spec. - У Pod обязателен список
spec.containers, у контейнера -nameиimage. - Образ указывают с конкретным тегом,
:latestделает содержимое Pod непредсказуемым. - Фазы:
Pending,Running,Succeeded,Failed. Видны в колонке STATUS. kubectl runсоздаёт Pod одной командой,kubectl apply -f- из файла.
Дрилл · вопросы как на собесе
Проверь себя без подсказок
Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.
Что такое Pod и чем он отличается от контейнера?
K8S-002Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс