- Kubernetes
- Документація
- Блог
- Навчання
- Партнери
- Спільнота
- Застосування
- Версії
- Інформація про випуск
- v1.33
- v1.32
- v1.31
- v1.30
- v1.29
- Українська (Ukrainian)
- English
- বাংলা (Bengali)
- 中文 (Chinese)
- Français (French)
- Deutsch (German)
- हिन्दी (Hindi)
- Bahasa Indonesia (Indonesian)
- 日本語 (Japanese)
- 한국어 (Korean)
- Polski (Polish)
- Português (Portuguese)
- Русский (Russian)
- Tiếng Việt (Vietnamese)
Перегляд Podʼів та Вузлів (Node)
Цілі
- Дізнайтесь, що таке Pod в Kubernetes.
- Дізнайтесь, що таке Node в Kubernetes.
- Діагностика розгорнутих застосунків.
Podʼи Kubernetes
Pod — це група з одного або декількох контейнерів (таких як Docker), що має спільне сховище даних (volumes), IP-адресу та містить інформацію про те, як їх запустити.
Коли ви створили Deployment у Модулі 2, Kubernetes створив Pod, щоб розмістити екземпляр вашого застосунку. Pod — це абстракція в Kubernetes, що являє собою групу з одного або декількох контейнерів застосунку (таких як Docker) та ресурсів, спільних для цих контейнерів. До цих ресурсів належать:
- Спільні сховища даних, або Volumes
- Мережа, адже кожен Pod у кластері має унікальну IP-адресу
- Інформація про те, як запускати кожний контейнер, така як версія образу контейнера або використання певних портів
Pod моделює специфічний для даного застосунку "логічний хост" та може містити різні, але доволі тісно повʼязані один з одним контейнери. Наприклад, в одному Podʼі може бути контейнер з вашим Node.js застосунком та інший контейнер, що передає дані Node.js для публікації вебсервером. Контейнери в межах Podʼа мають спільну IP-адресу та порти, завжди є сполученими, плануються для запуску разом та запускаються у спільному контексті на одному Node (вузлі).
Pod є неподільною атомарною одиницею платформи Kubernetes. Коли ви створюєте Deployment у Kubernetes, цей Deployment створює Podʼи вже з контейнерами всередині, на відміну від створення контейнерів окремо. Кожен Pod привʼязаний до вузла, до якого його було розподілено, і лишається на ньому до припинення роботи (згідно з політикою перезапуску) або видалення. У разі відмови вузла ідентичні Podʼи розподіляються по інших доступних Вузлах кластера.
Узагальнена схема Podʼів
Контейнери слід розміщувати разом в одному Podʼі, тільки якщо вони тісно повʼязані між собою і потребують спільного використання ресурсів, таких як диск.
Вузли
Pod завжди запускається на Node (Вузлі). Pod завжди запускається на Вузлі. Вузол — це робоча машина в Kubernetes, віртуальна або фізична, залежно від кластера. Функціонування кожного Вузла керується панеллю управління. Вузол може мати декілька Podʼів, а панель управління автоматично керує розподілом Podʼів між вузлами в кластері. Панель управління Kubernetes автоматично розподіляє Podʼи по вузлах кластера з урахуванням ресурсів, наявних на кожному Вузлі.
На кожному Вузлі Kubernetes запущені як мінімум:
Kubelet — процес, що забезпечує обмін даними між панеллю управління Kubernetes та Вузлом; kubelet керує Podʼами та контейнерами, запущеним на машині.
Оточення для запуску контейнерів (таке як Docker) забезпечує завантаження образу контейнера з реєстру, розпакування контейнера та запуск застосунку.
Узагальнена схема вузлів
Розвʼязання проблем за допомогою kubectl
В Модулі 2, ви використовували інтерфейс командного рядка kubectl. Ви будете продовжувати його використовувати в Модулі 3 для отримання інформації про розгорнуті застосунки та їхні середовища. За допомогою наступних команд kubectl можна виконати найбільш поширені операції:
kubectl get
— показати перелік ресурсівkubectl describe
— виведення детальної інформації про ресурсkubectl logs
— виведення логів контейнера в podʼіkubectl exec
— виконання команди в контейнері в podʼі
Ви можете використовувати ці команди, щоб переглядати інформацію про те, коли були розгорнуті застосунки, який їхній поточний статус, де вони запущені та які їхні конфігурації.
Тепер, коли ми більше знаємо про компоненти нашого кластера та командний рядок, дослідімо наш застосунок.
Перевірка конфігурації застосунку
Перевірмо, чи працює застосунок, який ми розгорнули в попередньому сценарії. Ми використаємо команду kubectl get
і подивимося на наявні Podʼи:
kubectl get pods
Якщо podʼи не запущені, зачекайте кілька секунд і знову спробуйте вивести список Podʼів. Ви можете продовжити, як тільки побачите, що працює один Pod.
Далі, щоб переглянути, які контейнери є всередині цього Podʼа і які образи використовуються для створення цих контейнерів, ми використовуємо команду kubectl describe pods
:
kubectl describe pods
Тут ми бачимо деталі про контейнер Podʼа: IP-адресу, порти та список подій, повʼязаних з життєвим циклом Podʼа.
Вивід команди describe
є розлогим і охоплює деякі концепції, які ми ще не пояснили, але не хвилюйтеся, вони стануть зрозумілими до кінця цього посібника.
Примітка:
Командуdescribe
можна використовувати для отримання детальної інформації про більшість примітивів Kubernetes, включаючи Node, Podʼи та Deployment. Вивід команди describe призначений для сприйняття людиною, а не для створення скриптів.Показати застосунок у терміналі
Памʼятаєте, що Podʼи працюють в ізольованій, приватній мережі — тому нам потрібно налаштувати проксі-доступ до них для налагодження та взаємодії з ними. To do this, Для цього ми використовуємо команду kubectl proxy
для запуску проксі в іншому терміналі. Відкрийте нове вікно термінала і введіть у цьому новому терміналі:
kubectl proxy
Тепер ми знову отримаємо імʼя Podʼа та будемо звертатись до цього Podʼа безпосередньо через проксі. Щоб отримати імʼя Podʼа та зберегти його в змінну середовища POD_NAME
:
export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')"
echo Name of the Pod: $POD_NAME
Щоб переглянути вивід нашого застосунку, виконайте запит curl
:
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/
URL — це шлях до API Podʼа.
Примітка:
Нам не потрібно вказувати імʼя контейнера, оскільки у нас є лише один контейнер всередині podʼа.Виконання команди в контейнері
Ми можемо виконувати команди безпосередньо в контейнері після того, як Pod буде запущено та він працюватиме. Для цього ми використовуємо команду exec
і вказуємо імʼя Podʼа як параметр. Перегляньмо змінні середовища:
kubectl exec "$POD_NAME" -- env
Знову варто зазначити, що можна пропустити імʼя самого контейнера, оскільки у нас є лише один контейнер в Podʼі.
Далі розпочнімо сеанс bash в контейнері Podʼа:
kubectl exec -ti $POD_NAME -- bash
Тепер у нас є відкрита консоль в контейнері, де запущений наш застосунок NodeJS. Вихідний код застосунку знаходиться у файлі server.js
:
cat server.js
You can check that the application is up by running a curl command:
curl http://localhost:8080
Примітка:
тут ми використовувалиlocalhost
, оскільки ми виконали команду всередині Podʼа NodeJS. Якщо ви не можете підʼєднатися до localhost:8080, перевірте, чи ви виконали команду kubectl exec
і запускаєте команду зсередини Podʼа.Щоб закрити підключення до контейнера, введіть exit
.
Що далі
- Підручник Використання Service для надання доступу до вашого застосунку.
- Дізнайтесь більше про Pods.
- Дізнайтесь більше про Nodes.
Змінено April 18, 2025 at 4:21 PM PST: sync upstream (a07f500f4d)