Робота з подами
Настав час дізнатись, як працювати з подами (pods), утилітою командного рядка KubeCTL, Поки на також Deployment Flow. Але і це ще не все, адже на тебе чекає огляд таких захопливих тем як liveness, readiness і стартап-проби, які використовуються у Kubernetes для перевірки подів.
Створення та взаємодія подів
Існує два способи створення об'єктів у Kubernetes:
- Імперативний (опис об'єктів додається напряму у терміналі).
- Декларативний (створення спеціальних файлів-маніфестів, з яких і створюється ресурс).
Розглянемо кожен із них ⬇️
Імперативний метод створення об’єктів
Для початку потрібно перевірити, чи є якісь поди у namespace, який було створено раніше. Для цього використовується наступна команда:
Тут 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 виконується у терміналі:
(apply - створює под, а якщо под вже існує то вносить зміни до існуючого, а create - створює, але якщо вже існує то видає помилку)
Перевірка подів з неймспейсу 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"
Як бачиш, цей файл подібний до того, який ти вже створював(-ла), змінилась тільки специфікація контейнера. Для створення поду буде використана наступна команда:
Як і у Docker, тут можна підключатись до контейнера і безпосередньо з нього виконувати Shell-команди. Перед тим як ми підлючимось до контейнеру busybox, нам треба дізнатись IP адресу іншого поду, того який ми будемо викликати командою curl. ІP Адресу ми дізнаємось за допомогою команди:
Далі необхідно під’єднатись до busybox, використавши команду:
Ти опинишся усередині контейнера busybox. Залишилось виконати команду curl 10.1.0.7. У відповідь ти отримаєш HTML-розмітку. За замовчуванням nginx слухає 80-й порт, і curl також за замовчуванням робить запити на 80-й порт:
