Як створювати поди Kubernetes і керувати ними в Linux

Що таке поди Kubernetes

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.

Залишити відповідь

Дякуємо, що поділились