Skip to content

Робота з подами

Настав час дізнатись, як працювати з подами (pods), утилітою командного рядка KubeCTL, Поки на також Deployment Flow. Але і це ще не все, адже на тебе чекає огляд таких захопливих тем як liveness, readiness і стартап-проби, які використовуються у Kubernetes для перевірки подів.

Створення та взаємодія подів

Існує два способи створення об'єктів у Kubernetes:

  1. Імперативний (опис об'єктів додається напряму у терміналі).
  2. Декларативний (створення спеціальних файлів-маніфестів, з яких і створюється ресурс).

Розглянемо кожен із них ⬇️

Імперативний метод створення об’єктів

Для початку потрібно перевірити, чи є якісь поди у namespace, який було створено раніше. Для цього використовується наступна команда:

kubectl get pods -n mateapp

Тут flag -n задає неймспейс, у якому буде виконуватись команда.

Тепер поглянь на інлайн-команду, яка створює под:

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
    name: nginx
    namespace: mateapp
spec:
    containers:
    - name: nginx
      image: nginx
EOF

За допомогою команди cat << EOF створюється файл, контент якого — це все, що між двома EOF. Горизонтальна риска | — це pipe-оператор у Unix, який передає результат команди зліва від  | як вхідний параметр для команди справа —  kubectl create -f -.

💡 Команда kubectl -f створює ресурси, а прапорець -f дає змогу вказати файл, у якому описаний ресурс. Якщо після прапорця -f йде дефіс, це означає, що замість стандартного файлу у файловій системі треба вичитати файл з stdout.

Вміст файлу:

  • apiVersion: v1 — версія API того ресурсу, тобто поду;
  • kind: Pod — тип ресурсу, який ти хочеш створити;
  • metadata — обов’язковий атрибут опису ресурсу, який включає його назву; ще тут можна вказати неймспейс де має створитись даний ресурс; якщо явно не вказати неймспейс тут або в команді kubectl, то ресурс створиться в дефолтному неймспейсі default;
  • специфікація, де описується сам под, включає:
  • containers — обовʼязкове поле зі списком контейнерів цього пода;
  • name (nginx);
  • image (nginx) — офіційний контейнер nginx.

Для перевірки подів використовується команда kubectl get pods -o wide, яка виведе інформацію про всі поди та їхні IP-адреси.

Декларативний метод створення об’єктів

Для початку створимо файл pod.yml (для кращого розуміння ми назвали його саме так, але по факту він може називатись як завгодно). Цей файл буде містити опис поду з попереднього пункту про імперативний метод:

apiVersion: v1
kind: Pod
metadata:
 name: nginx
 namespace: mateapp
spec:
 containers:
 - name: nginx
   image: nginx

Створення цього файлу за допомогою kubectl виконується у терміналі:

kubectl apply -f pod.yml

(apply - створює под, а якщо под вже існує то вносить зміни до існуючого, а create - створює, але якщо вже існує то видає помилку)

Перевірка подів з неймспейсу mateapp виконується наступним чином:

kubectl get pods -n mateapp

Команда для виведення детальної інформації про под:

kubectl describe pod nginx -n mateapp

Результатом виконання цієї команди буде детальна інформація про ресурс:

  • статус;
  • IP;
  • нода, на якій ресурс запущений;
  • інформація про контейнер.

💡 Команда kubectl describe {resourceKind} також виводить інформацію про різні ресурси.

Взаємодія подів

Щоб протестувати комунікацію між подами, тобі знадобиться ще один под з контейнером busybox у середині. Також у середині цього контейнера вже буде встановлений інструмент curl, щоб робити HTTP-запити. Маніфест цього поду виглядатиме ось так:

apiVersion: v1
kind: Pod
metadata:
    name: busybox
    namespace: mateapp
spec:
    containers:
    - name: busybox
      image: curlimages/curl:8.11.1
      args:
      - sleep
      - "1000"

Як бачиш, цей файл подібний до того, який ти вже створював(-ла), змінилась тільки специфікація контейнера. Для створення поду буде використана наступна команда:

kubectl apply -f busybox.yml

Як і у Docker, тут можна підключатись до контейнера і безпосередньо з нього виконувати Shell-команди. Перед тим як ми підлючимось до контейнеру busybox, нам треба дізнатись IP адресу іншого поду, того який ми будемо викликати командою curl. ІP Адресу ми дізнаємось за допомогою команди:

kubectl get pods -n mateapp -o wide

Далі необхідно під’єднатись до busybox, використавши команду:

kubectl -n mateapp exec -it busybox -- sh

Ти опинишся усередині контейнера busybox. Залишилось виконати команду curl 10.1.0.7. У відповідь ти отримаєш HTML-розмітку. За замовчуванням nginx слухає 80-й порт, і curl також за замовчуванням робить запити на 80-й порт: