Введение
В этой лабораторной работе вы изучите наименьшую развёртываемую единицу Kubernetes — Pod.
Pod — это объект, который Kubernetes планирует разместить на узле. Обычно в Kubernetes не запускают контейнер напрямую: контейнеры помещают внутрь подов.
Pod может содержать один или несколько контейнеров, которые используют общий сетевой контекст и общее хранилище. В большинстве примеров для начинающих используется один контейнер, но важно понять именно принцип общей среды.
Вы научитесь:
- Определять Pod с помощью файла конфигурации YAML (чертежа).
- Создавать Pod в кластере с помощью
kubectl. - Проверять состояние Pod и убеждаться, что он запущен.
- Исследовать подробную конфигурацию и историю Pod.
К концу лабораторной работы в вашем кластере будет запущен настоящий веб-сервер внутри Pod.
Определите Pod
На этом шаге вы определите свой первый Pod. Kubernetes использует YAML. YAML-файл похож на чертёж или рецепт: он точно описывает, как должно выглядеть ваше приложение.
Pod — это наименьший объект, который Kubernetes планирует разместить на узле, но это не то же самое, что контейнер. Контейнер — это запущенный процесс приложения и его образ файловой системы. Pod — это оболочка Kubernetes для одного или нескольких контейнеров. Она предоставляет контейнерам общий сетевой идентификатор, общий жизненный цикл и, при необходимости, общее хранилище.
Определение Pod состоит из четырёх основных частей:
- apiVersion: версия языка Kubernetes, которую мы используем.
- kind: тип создаваемого объекта (в данном случае
Pod). - metadata: данные для идентификации объекта, например его имя и метки.
- spec: «спецификация» — основная часть описания. Здесь указываются контейнеры, которые нужно запустить.
Вы создадите файл nginx-pod.yaml. В нём будет определён Pod с именем nginx-pod, запускающий один контейнер на основе образа nginx (популярного веб-сервера).
Создайте файл с помощью текстового редактора nano:
nano nginx-pod.yaml
Скопируйте в файл приведённое ниже содержимое и вставьте его. Внимательно изучите его, чтобы увидеть четыре описанные выше части:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Чтобы сохранить файл и выйти из стандартного nano, нажмите Ctrl+X, затем введите Y, чтобы подтвердить сохранение, и нажмите Enter, чтобы записать файл с указанным именем.
Теперь вы написали свой первый чертёж Kubernetes! Он сообщает Kubernetes: «Мне нужен Pod с именем nginx-pod. Запустите внутри него один контейнер, используя образ nginx».
Создайте Pod
Теперь, когда у вас есть чертёж (nginx-pod.yaml), передайте его Kubernetes.
Для этого используется команда kubectl apply. Она сообщает Kubernetes: «Вот желаемое состояние. Пожалуйста, приведите систему к нему».
Понятие желаемого состояния — одна из центральных идей Kubernetes. Вы не указываете системе каждый низкоуровневый шаг. Вместо этого вы объявляете нужный конечный результат, а контроллеры Kubernetes продолжают работать, пока фактическое состояние не совпадёт с этим описанием.
Выполните следующую команду, чтобы создать Pod:
kubectl apply -f nginx-pod.yaml
Вы должны увидеть сообщение о подтверждении:
pod/nginx-pod created
Выполняя эту команду, вы отправили чертёж на API-сервер Kubernetes (Control Plane). Затем Scheduler нашёл подходящий Node для вашего Pod, а Kubelet на этом Node начал загружать образ Nginx для его запуска.
Проверьте состояние
На этом шаге вы проверите состояние созданного Pod. Создание Pod не происходит мгновенно: требуется время, чтобы загрузить образ контейнера и запустить приложение.
Важно помнить: kubectl apply обычно быстро возвращает приглашение командной строки, потому что только отправляет запрос. Фактическая работа выполняется асинхронно внутри кластера. Поэтому проверка состояния — это обычный следующий шаг, а не признак ошибки.
Чтобы посмотреть состояние подов, используйте команду get:
kubectl get pods
Вы увидите таблицу со списком подов. Обратите внимание на столбец STATUS:
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 15s
STATUS: самое важное поле.
ContainerCreating: система всё ещё загружает образ или запускает контейнер.Running: успех! Pod запущен и работает.Pending: кластер определяет, где разместить Pod.ErrorилиCrashLoopBackOff: произошла ошибка (например, приложение завершилось с ошибкой).
READY: значение
1/1означает, что готов 1 из 1 контейнера, определённого в Pod, и он может обслуживать запросы.
Если вы видите ContainerCreating, подождите несколько секунд и снова выполните kubectl get pods. Когда в столбце появится Running, ваш веб-сервер Nginx будет запущен.
Исследуйте подробности
На этом шаге вы научитесь «заглядывать под капот». Команда get показывает сводную информацию, но иногда нужно точно понять, что происходит, особенно если возникла проблема.
Команда describe выводит подробный отчёт о ресурсе Kubernetes.
Начинающим полезно воспринимать kubectl get и kubectl describe как два уровня наблюдения. get отвечает на вопрос «Каково текущее общее состояние?», а describe — «Что произошло, чтобы система пришла к этому состоянию?». История событий часто является самым быстрым способом найти первопричину.
Выполните следующую команду, чтобы исследовать nginx-pod:
kubectl describe pod nginx-pod
Команда выведет большой объём информации. Прокрутите вывод до конца и найдите раздел Events. Он показывает последовательность запуска Pod:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled ... default-scheduler Successfully assigned default/nginx-pod...
Normal Pulling ... kubelet Pulling image "nginx:latest"
Normal Pulled ... kubelet Successfully pulled image "nginx:latest"...
Normal Created ... kubelet Created container nginx
Normal Started ... kubelet Started container nginx
Этот журнал событий — ваша первая остановка при отладке. Если Pod застрял в состоянии Pending или Error, раздел Events обычно объясняет причину (например, «Insuficient CPU» или ImagePullBackOff).
Теперь вы создали, проверили и исследовали свой первый Pod Kubernetes!
Итоги
В этой лабораторной работе вы освоили понятие Pod — фундаментального строительного блока Kubernetes.
Вы успешно:
- Написали чертёж YAML для Pod с Nginx.
- Развернули его в кластере с помощью
kubectl apply. - Проверили, что Pod находится в состоянии Running, с помощью
kubectl get. - Исследовали подробную историю запуска с помощью
kubectl describe.
Понимание подов крайне важно, потому что все остальные понятия Kubernetes — Deployments, Services и StatefulSets — в конечном счёте связаны с управлением этими подами. Теперь вы готовы перейти к более сложным темам!


