Як створювати поди Kubernetes і керувати ними в Linux
Kubernetes — найпопулярніший оркестратор. Ми підготували невеликий гайд, де нагадаємо, що таке Kubernetes, розповімо, як створювати поди та що з ними робити.
Що таке Kubernetes?
Це платформа з відкритим кодом для керування контейнерами від компанії Google. У контейнерах зберігаються всі залежності ПЗ: код, середовище виконання, конфігурація та системні бібліотеки.
Контейнери допомагають зв’язати та запустити програму. Зручніше це робити автоматизовано, що і робить Kubernetes. Він допомагає масштабуватись, обробляє помилки у додатку, надає шаблони розгортання та виконує інші корисні функції.
Якщо ви хочете масштабувати методи DevOps на кілька баз коду за розширення команди розробників — вам знадобляться контейнери. Вони дозволяють масштабувати середовище під необхідну кількість спеціалістів, через що код працює однаково на всіх комп’ютерах, де розгортаються контейнери.
Їх ще зручно використовувати для розробки мікросервісів, оскільки ці сервіси поміщаються в контейнери. Контейнери мікросервісів разом із використанням надійної платформи управління дуже спрощують роботу з кластером та оркестрацію.
Більше про k8s можете дізнатися у цьому матеріалі.
Поди в Kubernetes
Pod — основна логічна одиниця виміру в Kubernetes. Це набір з одного або декількох контейнерів програм, наприклад, Docker або rkt, які спільно розгортаються на ноді.
Поди вважаються базовими будівельними блоками Kubernetes, тому що всі робочі навантаження типу Deployments і ReplicaSets можна виразити у вигляді подів.
Кожен под запускає та обслуговує єдиний екземпляр програми. Якщо ви захочете зробити горизонтальне масштабування, вам потрібно буде використовувати різні поди: по одному на кожен інстанс програми.
Створення пода Kubernetes
Способів створення пода багато. У гайді розглянемо два варіанти із використанням образу nginx.
Спосіб 1
Просто використати файл конфігурації для створення пода:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
hostNetwork: true
dnsPolicy: Default
Спосіб 2
Створити под за допомогою утиліти Minikube, яка дозволяє запускати кластер Kubernetes з однією нодою на своєму ноутбуці або комп’ютері.
Якщо з’являться складнощі з установкою Minikube, вам допоможе ця інструкція.
Щоб створити под, потрібно запустити кластер Kubernetes. Коли ви опинитеся в середовищі пісочниці Kubernetes, потрібно перевірити підключення до кластера Kubernetes. Для цього виконаємо команду kubectl get nodes у командному рядку, щоб побачити вузли кластера у терміналі. Якщо це спрацювало, створимо та запустимо под.
Щоб це зробити, виконаємо команду:
kubectl run nginx--image=nginx --restart=Never
Ми отримаємо под з ім’ям nginx, що працює з образом nginx в Docker Hub. А частина –restart=Never, каже Kubernetes створити один под, а не розгортання.
Натискаємо Enter і модуль буде створено. Термінал має видати pod/nginx створений.
Готово! Ми створили под у kubernetes.
Як переглянути под
Запустіть команду kubectl get pods, щоб побачити статус вашого пода. Щоб переглянути повну конфігурацію пода, запустіть у терміналі kubectl description pod nginx
Термінал покаже YAML для пода: ім’я nginx, його місцеперебування, ноду, час запуску та поточний статус. Також ви побачите докладну інформацію про контейнер nginx разом з ідентифікатором контейнера та місцеперебування образу.
* YAML — формат перекладу даних у послідовність байтів. За концепцією він схожий на мову розмітки, але орієнтується на зручність введення-виведення типових структур даних багатьох програмованих мов.
Якщо ви прокрутите до кінця терміналу, ви побачите історію подій пода. У нашому випадку там буде вказано, що він був створений і запущений. У цьому випадку образ nginx був успішно завантажений і призначений ноді.
Що можна робити з подами в Linux
Вказати ліміти пам’яті для пода
Щоб це зробити, включіть поле resources:requests в маніфест ресурсів контейнера вашого пода. Щоб додати обмеження пам’яті, вкажіть resources:limits
Приклад того, як зробити запит пам’яті на 100 МБ і поставити ліміт у 200 МБ. Файл конфігурації для пода:
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
namespace: mem-example
spec:
containers:
- name: memory-demo-ctr
image: polinux/stress
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
Призначити под ноді
Перш ніж це зробити, у вас повинен бути кластер Kubernetes і налаштований для зв’язку з ним kubectl. Краще намагатися реалізувати це в кластері, в якому є хоча б дві ноди.
Приступимо. Перерахуємо ноди в нашому кластері:
kubectl get nodes --show-labels
Вибираємо одну з нод і додаємо до неї позначку:
kubectl label nodes <your-node-name> disktype=ssd
<your-node-name> — ім’я вибраної вами ноди.
Перевіряємо, щоб в обраної ноди була позначка disktype=ssd:
kubectl get nodes --show-labels
Створюємо под, який призначимо конкретній ноді:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
Далі використовуємо файл конфігурації, щоб створити под, який буде запланований на ноді:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml
Перевіримо, що под працює на потрібній ноді
kubectl get pods --output=wide
Виведення буде таким:
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 13s 10.200.0.4 worker0
Ще можна:
- Призначити ресурси CPU контейнерам та подам;
- Налаштувати поди так, щоб призначити певні класи якості обслуговування — Quality of Service;
- Налаштувати под для використання Volume як сховища;
- Налаштувати контекст безпеки для пода або контейнера, щоб визначити привілеї та параметри управління доступом;
- Налаштувати Liveness, Readiness та Startup Probes.
На цьому перелік не закінчується. Більше дій та покрокові інструкції до них можна переглянути на сайті Kubernetes.
Підсумок
У матеріалі розібралися, що таке поди в Kubernetes, як їх створювати, і розглянули кілька дій з подами в Linux. Але це лише вершина айсбергу. Щоб швидко та ефективно розібратися з оркестратором, записуйтесь на наш курс Адміністрування Kubernetes. У програмі зібрали всі необхідні знання для роботи з Kubernetes.