У попередніх двох статтях ми розглянули, навіщо потрібен Kubernetes і як він влаштований зсередини. Тепер настав час перейти від концепцій до реальної роботи: запустити власний кластер, виконати перші команди та побачити, як абстрактні компоненти — API-сервер, scheduler, kubelet — працюють разом.
Але виникає практичне питання: де взяти кластер для навчання? Розгортати production-кластер у хмарі (GKE, EKS, AKS) для експериментів — дорого і надмірно. Встановлювати повноцінний кластер на кількох серверах через kubeadm — складно і вимагає інфраструктури.
Саме для цього існують локальні дистрибутиви Kubernetes — інструменти, які дозволяють запустити повноцінний кластер на вашому ноутбуці за кілька хвилин. Вони не призначені для production, але ідеально підходять для розробки, тестування та навчання.
kubectl-команди. Рекомендуємо мати під рукою термінал та виконувати команди паралельно з читанням.
Існує кілька популярних інструментів для запуску Kubernetes локально. Кожен має свої переваги та обмеження. Розглянемо чотири основні варіанти.
minikube — це офіційний інструмент Kubernetes для локальної розробки. Він створює віртуальну машину (або використовує Docker як backend) і розгортає всередині неї повноцінний однонодовий кластер.
Переваги:
minikube start, minikube stop, minikube delete)Недоліки:
Типовий use case: Навчання Kubernetes, розробка застосунків, тестування маніфестів перед деплоєм у production.
kind (Kubernetes IN Docker) — інструмент, який запускає Kubernetes-вузли як Docker-контейнери. Кожен вузол кластера — це окремий контейнер.
Переваги:
Недоліки:
Типовий use case: CI/CD тестування, розробка Kubernetes-операторів, тестування multi-node сценаріїв.
k3s — це мінімалістичний дистрибутив Kubernetes від Rancher Labs. Він видаляє застарілі компоненти та зменшує бінарник до ~50 МБ (порівняно з ~1 ГБ у повному Kubernetes).
Переваги:
Недоліки:
Типовий use case: IoT, edge computing, локальна розробка на слабких машинах.
Docker Desktop (Windows/macOS) має вбудовану підтримку Kubernetes — можна увімкнути кластер одним чекбоксом у налаштуваннях.
Переваги:
Недоліки:
Типовий use case: Швидкий старт для розробників, які вже використовують Docker Desktop.
| Характеристика | minikube | kind | k3s | Docker Desktop |
|---|---|---|---|---|
| Час старту | 30-60 сек | 10-20 сек | 15-30 сек | 40-60 сек |
| Споживання RAM | 2-4 ГБ | 1-2 ГБ | 512 МБ - 1 ГБ | 2-3 ГБ |
| Multi-node | Так (складно) | Так (легко) | Так | Ні |
| Платформи | Win/Mac/Linux | Win/Mac/Linux | Win/Mac/Linux | Win/Mac |
| Вбудовані addons | Багато | Мало | Traefik | Мало |
| Складність | Низька | Середня | Низька | Дуже низька |
| Рекомендація | Навчання | CI/CD, тести | Edge, слабкі машини | Швидкий старт |
Перш ніж встановлювати сам кластер, потрібен інструмент для взаємодії з ним — kubectl. Це CLI, який ми вже згадували у попередній статті.
docker CLI — це інструмент для керування контейнерами на одному хості, то kubectl — інструмент для керування контейнерами (Podʼами) на цілому кластері. Синтаксис схожий: docker ps → kubectl get pods, docker logs → kubectl logs.brew install kubectl
# Завантажити останню версію
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
# Зробити виконуваним
chmod +x ./kubectl
# Перемістити у PATH
sudo mv ./kubectl /usr/local/bin/kubectl
choco install kubernetes-cli
scoop install kubectl
winget install Kubernetes.kubectl
# Додати репозиторій Kubernetes
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
snap install kubectl --classic
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
Після встановлення перевірте версію:
kubectl version --client
Очікуваний вивід:
--client показує лише версію kubectl, не намагаючись підключитись до кластера. Це корисно для перевірки встановлення до того, як кластер запущено.Тепер встановимо сам minikube — інструмент для запуску локального кластера.
brew install minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
sudo install minikube-darwin-arm64 /usr/local/bin/minikube
choco install minikube
winget install Kubernetes.minikube
# Завантажте .exe з https://minikube.sigs.k8s.io/docs/start/
# Запустіть інсталятор
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
sudo rpm -Uvh minikube-latest.x86_64.rpm
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube version
Очікуваний вивід:
Настав момент істини — запустимо наш перший Kubernetes-кластер.
Виконайте команду:
minikube start --driver=docker
--driver=docker вказує minikube використовувати Docker як backend. Це найшвидший та найстабільніший варіант, якщо у вас встановлено Docker Desktop або Docker Engine. Без цього прапорця minikube спробує автоматично визначити найкращий драйвер.Процес займе 30-60 секунд. Ви побачите вивід, схожий на цей:
Що відбулося під капотом:

minikube, який виконує роль єдиного вузла кластераkube-apiserver, etcd, kube-scheduler, kube-controller-managerkubelet, kube-proxy, containerdПеревірити, що контейнер запущено, можна через Docker:
docker ps --filter name=minikube
Тепер перевіримо, що кластер справді працює. Виконайте:
kubectl cluster-info
Очікуваний вивід:
Ця команда показує адресу API-сервера та системні сервіси. Зверніть увагу: kubectl спілкується з кластером через HTTPS на локальному порту.
Згадайте з попередньої статті: кластер складається з вузлів (nodes). Подивимось, які вузли є у нашому кластері:
kubectl get nodes
Бачимо один вузол з іменем minikube. Колонка ROLES показує control-plane — це означає, що цей вузол виконує роль і control plane, і worker node одночасно. У production-кластерах ці ролі розділені, але для локальної розробки це нормально.
Статус Ready означає, що вузол справний і готовий приймати Podʼи.
Kubernetes сам використовує Podʼи для запуску своїх внутрішніх компонентів. Подивимось на них:
kubectl get pods -n kube-system
-n kube-system вказує на namespace (простір імен) kube-system. Це критично важлива концепція ізоляції, яку ми детально розберемо у наступному розділі.Очікуваний вивід:
Впізнаєте ці імена? Це саме ті компоненти, які ми розглядали у попередній статті:
etcd-minikube — розподілена база даних стануkube-apiserver-minikube — API-серверkube-controller-manager-minikube — менеджер контролерівkube-scheduler-minikube — планувальникkube-proxy-vx9qm — мережевий проксіcoredns-* — DNS-сервер для service discoverystorage-provisioner — компонент для автоматичного створення volumesКолонка READY показує 1/1 — це означає, що у Podʼі один контейнер і він готовий до роботи. Статус Running підтверджує, що контейнер виконується.
Коли ви вперше заходите в кластер, він може здатися безкраїм полем. Але насправді Kubernetes розділений на "віртуальні зони", які називаються Namespaces (простори імен).
Уявіть кластер як велику офісну будівлю. Будівля одна (один кластер), але в ній багато кімнат:
Співробітники розробки не заважають бухгалтерам, хоча всі вони знаходяться під одним дахом.
web-server у namespace project-a і ще один web-server у namespace project-b. Вони не будуть конфліктувати. Це працює як папки на вашому комп'ютері.dev, але заборонити їм навіть дивитися, що відбувається у production.testing не може споживати більше 10 ГБ оперативної пам'яті кластера", щоб тести не "з'їли" ресурси всього офісу.default — "вітальня". Якщо ви створюєте об'єкт і не вказуєте namespace, він потрапляє сюди.kube-system — "серверна". Тут живуть компоненти самого Kubernetes (API-сервер, планувальник тощо). Краще сюди нічого свого не ставити.kube-public — "хол". Ресурси, які мають бути видимі всім (навіть без автентифікації).Коли ви виконуєте kubectl get nodes, як kubectl знає, до якого кластера звертатись? Відповідь — через файл конфігурації kubeconfig.
За замовчуванням kubectl читає конфігурацію з файлу ~/.kube/config. Цей файл містить три основні секції:
kubectl він завжди представлений однією точкою входу (адресою API-сервера). Це як «ресепшн» у великому готелі: вам не потрібно знати розташування всіх кімнат, ви просто звертаєтесь до адміністратора, а він сам керує процесами всередині.kubectl-команд.Подивимось на структуру файлу:
kubectl config view
Команда minikube start працює як автоматичний налаштувальник. Вона сама заповнює всі складні технічні поля у вашому файлі конфігурації:
clusters.users.minikube, який автоматично пов'язує цей кластер з цими ключами.current-context, щоб ви могли відразу почати роботу.Тобто Minikube повністю готує "міст" між вашим терміналом та кластером, позбавляючи вас ручної рутини.
Якщо у вас кілька кластерів (наприклад, локальний minikube та production у GKE), ви можете перемикатись між ними:
# Переглянути всі доступні контексти
kubectl config get-contexts
# Перемкнутись на інший контекст
kubectl config use-context <назва-контексту>
# Подивитись поточний контекст
kubectl config current-context
Одна з найпоширеніших проблем новачків — ви створили Pod у контексті minikube, а потім не можете його знайти. Чому? Тому що в контексті можна задати namespace за замовчуванням.
Приклад робочого сценарію:
У вас є контекст prod, але ви працюєте лише з сервісом замовлень у namespace orders. Ви можете налаштувати контекст так, щоб не писати кожного разу -n orders:
kubectl config set-context --current --namespace=orders
Тепер команда kubectl get pods буде автоматично показувати лише Pod-и з orders. Це дуже зручно, але небезпечно, якщо ви забули, у якому namespace зараз знаходитесь!
У досвідченого DevOps-інженера файл ~/.kube/config може містити десятки контекстів. Оскільки перемикатись через довгі команди kubectl config use-context ... незручно, у спільноті використовують два "must-have" інструменти:
kubectx
kubectx minikube.kubens
kubens monitoring.Тепер, коли кластер запущено і kubectl налаштовано, розглянемо базові команди для роботи з Kubernetes.
Як ми згадували у попередній статті, команди kubectl мають чітку структуру:
kubectl [дієслово] [тип-ресурсу] [імʼя] [прапорці]
Основні дієслова:
get
describe
apply
delete
logs
exec
docker exec).# Переглянути всі Podʼи у поточному namespace (default)
kubectl get pods
# Переглянути Podʼи у всіх namespace
kubectl get pods --all-namespaces
# або скорочено:
kubectl get pods -A
# Переглянути вузли кластера
kubectl get nodes
# Переглянути сервіси
kubectl get services
# або скорочено:
kubectl get svc
# Детальна інформація про вузол
kubectl describe node minikube
# Детальна інформація про Pod
kubectl describe pod <назва-podʼу>
# Переглянути логи Podʼу
kubectl logs <назва-podʼу>
# Переглянути логи у реальному часі (аналог docker logs -f)
kubectl logs -f <назва-podʼу>
# Виконати команду у контейнері
kubectl exec <назва-podʼу> -- ls /app
# Відкрити інтерактивну оболонку (аналог docker exec -it)
kubectl exec -it <назва-podʼу> -- /bin/bash
# Вивести у форматі YAML
kubectl get pods -o yaml
# Вивести у форматі JSON
kubectl get pods -o json
# Вивести з додатковими колонками
kubectl get pods -o wide
Kubernetes підтримує скорочення для типів ресурсів:
| Повна назва | Скорочення |
|---|---|
pods | po |
services | svc |
deployments | deploy |
replicasets | rs |
namespaces | ns |
nodes | no |
persistentvolumes | pv |
persistentvolumeclaims | pvc |
Приклад:
# Ці команди еквівалентні:
kubectl get pods
kubectl get po
Настав час запустити наш перший застосунок у Kubernetes. Почнемо з найпростішого — одного Podʼу з Nginx.
Найшвидший спосіб запустити Pod — використати команду kubectl run:
kubectl run nginx --image=nginx:1.25
docker run nginx:1.25, але замість запуску контейнера напряму, вона створює Pod у кластері. Kubernetes сам вирішує, на якому вузлі його розмістити.Перевіримо, що Pod створено:
kubectl get pods
Статус ContainerCreating означає, що Kubernetes завантажує образ та запускає контейнер. Зачекайте кілька секунд і виконайте команду знову:
Статус змінився на Running, а колонка READY показує 1/1 — один контейнер з одного готовий.
Розглянемо покроково, що сталося після виконання kubectl run:

Покрокове пояснення:
kubectl надсилає HTTP POST-запит до API-сервера з специфікацією Podʼуetcd зі статусом Pending (очікує призначення вузла)kube-scheduler постійно відстежує (watch) нові Podʼи без призначеного вузлаminikube, оновлює поле nodeName через API-серверkubelet на вузлі minikube відстежує Podʼи, призначені його вузлуkubelet інструктує containerd завантажити образ nginx:1.25 та запустити контейнерkubelet оновлює статус Podʼу на RunningЦе і є reconciliation loop у дії: система безперервно порівнює бажаний стан (Pod має бути запущений) з поточним (Pod ще не існує) і усуває розбіжності.
Подивимось детальніше на створений Pod:
kubectl describe pod nginx
Вивід буде великим, але найважливіші секції:
Секція Events показує хронологію подій — це найкорисніша частина для діагностики проблем.
Pod запущено, але як до нього звернутись? У Podʼа є внутрішня IP-адреса (10.244.0.5 у прикладі вище), але вона доступна лише всередині кластера.
Для тестування можна використати port-forward — тунель між вашою локальною машиною та Podʼом.
Зверніть увагу на синтаксис: pod/nginx. У Kubernetes команди часто будуються за принципом тип/імʼя. Це дозволяє чітко сказати: "Я хочу перенаправити порти саме для пода з іменем nginx".
kubectl port-forward pod/nginx 8080:80
Тепер відкрийте браузер та перейдіть на http://localhost:8080 — ви побачите стандартну сторінку Nginx.
port-forward — це інструмент для розробки та діагностики, не для production. У наступних статтях ми розглянемо Service — правильний спосіб надати доступ до застосунків у Kubernetes.Видалимо створений Pod:
kubectl delete pod nginx
Перевіримо:
kubectl get pods
Команда kubectl run зручна для швидких тестів, але у реальних проєктах використовується декларативний підхід — опис ресурсів у YAML-файлах.
Версіонування
Відтворюваність
Code Review
Автоматизація
kubectl run не підходять для автоматизації.YAML-маніфест — це декларація бажаного стану. Ви не даєте команду "запусти", ви кажете: "Ось опис того, як має виглядати мій ідеальний світ, зроби так, щоб воно працювало".
Створимо файл nginx-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Уявіть цей файл як анкету для реєстрації нового мешканця в готелі (кластері). Розберемо її поля:
v1.Pod.name), за яким Kubernetes буде відрізняти цей Pod від інших. Також тут живуть мітки (labels) — це як кольорові наклейки на коробці, щоб потім легко було знайти всі коробки з "написом" app: nginx.containers), їхні образи (image) та порти. Це і є "бажаний стан", який Kubernetes буде підтримувати.Застосуємо створений файл:
kubectl apply -f nginx-pod.yaml
Команда kubectl apply є ідемпотентною. Уявіть це як кнопку "Зберегти" у текстовому редакторі: якщо файлу ще немає — він створиться, якщо він уже є — він просто оновиться новими даними. Ви можете запускати цю команду скільки завгодно разів — Kubernetes просто переконається, що реальний стан кластера відповідає вашому файлу.
Перевіримо:
kubectl get pods
Якщо ви хочете побачити повну специфікацію Podʼу (включно з полями, які Kubernetes додав автоматично):
kubectl get pod nginx -o yaml
Вивід буде містити набагато більше полів, ніж ми задали у маніфесті:
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
uid: a3f8c9d1-2e45-4b6c-8d7e-9f0a1b2c3d4e
creationTimestamp: "2026-05-07T10:02:15Z"
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
protocol: TCP
resources: {}
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-xxxxx
readOnly: true
nodeName: minikube
# ... багато інших полів
status:
phase: Running
podIP: 10.244.0.5
startTime: "2026-05-07T10:02:15Z"
# ... детальний статус контейнерів
Зверніть увагу на секцію status — вона не задається оператором, а заповнюється Kubernetes автоматично і відображає поточний стан ресурсу.
Розглянемо корисні команди для управління локальним кластером.
# Зупинити кластер (зберігає стан)
minikube stop
# Запустити знову
minikube start
Після minikube stop всі Podʼи зупиняються, але їхні дані зберігаються. При наступному minikube start кластер відновлюється у тому ж стані.
# Повністю видалити кластер
minikube delete
Kubernetes має вбудований веб-інтерфейс для перегляду ресурсів кластера:
minikube dashboard
Ця команда автоматично відкриє браузер з Dashboard. Там ви можете переглядати Podʼи, логи, події — все через графічний інтерфейс.
Іноді потрібно зайти всередину вузла кластера (наприклад, для діагностики мережі):
minikube ssh
Ви опинитесь у оболонці всередині Docker-контейнера, який є вузлом кластера.
Якщо щось йде не так з самим кластером (не з вашими Podʼами, а з компонентами Kubernetes):
minikube logs
Ми вже кілька разів згадували namespace. Настав час розглянути цю концепцію детальніше.
Namespace (простір імен) — це механізм логічної ізоляції ресурсів у кластері. Один кластер може містити кілька namespace, і ресурси в одному namespace не бачать ресурси в іншому (якщо це не налаштовано явно).
Kubernetes створює кілька namespace автоматично:
Переглянути всі namespace:
kubectl get namespaces
Створимо namespace для нашого проєкту:
kubectl create namespace myapp
Або через YAML-маніфест:
apiVersion: v1
kind: Namespace
metadata:
name: myapp
kubectl apply -f namespace.yaml
Створимо Pod у новому namespace:
kubectl apply -f nginx-pod.yaml -n myapp
Переглянути Podʼи у конкретному namespace:
kubectl get pods -n myapp
Переглянути Podʼи у всіх namespace:
kubectl get pods --all-namespaces
# або скорочено:
kubectl get pods -A
Щоб не вказувати -n myapp у кожній команді, можна змінити namespace за замовчуванням для поточного контексту:
kubectl config set-context --current --namespace=myapp
Тепер всі команди kubectl працюватимуть з namespace myapp за замовчуванням.
У цій статті ми перейшли від теорії до практики:
kubectl run) та декларативно (YAML-маніфест)Ключовий висновок: Kubernetes працює за принципом декларативної конфігурації. Ви описуєте бажаний стан у YAML-файлах, а система сама приводить реальний стан до бажаного через reconciliation loop.
У наступній статті ми детально розглянемо Pod — найменшу розгортану одиницю Kubernetes: його життєвий цикл, патерни використання (sidecar, init-контейнери) та обмеження, які призводять до необхідності вищих абстракцій.
Встановіть необхідні інструменти (minikube та kubectl) на вашій локальній машині, запустіть однонодовий кластер та перевірте його статус.
Вимоги:
kubectl та minikube відповідно до інструкцій для вашої операційної системи.Команди:
# Запуск кластера
minikube start
# Перевірка підключення та стану вузлів
kubectl get nodes
Завдання:
Ready.kubectl get nodes.Створіть свій перший Pod в імперативному стилі, перевірте його стан та налаштуйте локальний доступ до вебсервера всередині контейнера.
Вимоги:
apache-web та образом httpd:2.4 (Apache HTTP Server) за допомогою команди kubectl run.Running.kubectl port-forward.Команди:
# Імперативний запуск Pod'у
kubectl run apache-web --image=httpd:2.4
# Перевірка стану Pod'у
kubectl get pods
# Прокидання портів (локальний 8080 -> 80 всередині Pod'у)
kubectl port-forward pod/apache-web 8080:80
Завдання:
http://localhost:8080 та переконайтеся, що відображається стандартна сторінка Apache ("It works!").kubectl logs apache-web.Створіть декларативний опис (маніфест) для Pod'у з базою даних Redis, налаштуйте метадані (мітки) та застосуйте його до кластера.
Вимоги:
redis-pod.yaml з описом конфігурації Pod'у.redis-cache, образ redis:7 та мітку app: cache.redis-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: redis-cache
labels:
app: cache
spec:
containers:
- name: redis
image: redis:7
ports:
- containerPort: 6379
Команди:
# Застосування маніфесту
kubectl apply -f redis-pod.yaml
# Перевірка Pod'ів разом з їхніми мітками
kubectl get pods --show-labels
Завдання:
app=cache успішно присвоєна Pod'у.kubectl delete -f redis-pod.yaml.Створіть два ізольованих середовища за допомогою Namespaces та запустіть у них Pod'и з однаковими іменами без виникнення конфліктів.
Вимоги:
development та production.api (образ nginx:1.25) у кожному з цих просторів.Команди:
# Створення просторів назв
kubectl create namespace development
kubectl create namespace production
# Запуск Pod'ів у відповідних namespace
kubectl run api --image=nginx:1.25 -n development
kubectl run api --image=nginx:1.25 -n production
Завдання:
development.api працюють паралельно. Яка команда дозволяє це зробити?Запустіть службовий Pod в інтерактивному режимі, підключіться до нього та виконайте мережеву діагностику вбудованого DNS-сервісу Kubernetes.
Вимоги:
dns-tools на базі образу busybox:1.36.busybox одразу завершує роботу, передайте йому команду sleep 3600, щоб тримати контейнер активним.nslookup всередині контейнера для резолву внутрішнього сервісу kubernetes.default.Команди:
# Запуск Pod'у з передачею аргументів командного рядка
kubectl run dns-tools --image=busybox:1.36 -- sleep 3600
# Виконання команди nslookup всередині запущеного контейнера
kubectl exec dns-tools -- nslookup kubernetes.default
Питання:
nslookup для імені kubernetes.default? Що це за адреса та якому компоненту вона належить?Навчіться знаходити причини проблем у роботі ресурсів, навмисно створивши несправний Pod із некоректними параметрами.
Вимоги:
broken-pod з неіснуючим тегом образу, наприклад nginx:nonexistent-tag.Команди:
# Створення несправного Pod'у
kubectl run broken-pod --image=nginx:nonexistent-tag
# Перевірка статусу Pod'ів
kubectl get pods
# Отримання детальної інформації про Pod та його життєвий цикл
kubectl describe pod broken-pod
Питання:
broken-pod через кілька хвилин після створення?kubectl describe секцію Events. Які події (Events) вказують на конкретну помилку та що саме пішло не так?Дослідіть, як Kubernetes доповнює ваші декларативні маніфести службовою та системною інформацією після їх застосування в кластері.
Вимоги:
redis-cache з Завдання 3).Команди:
# Отримання повної живої специфікації Pod'у у форматі YAML
kubectl get pod redis-cache -o yaml
Питання:
metadata.uid, spec.nodeName, status.podIP або metadata.resourceVersion).Загляньте "під капот" локального Kubernetes-вузла, щоб побачити реальні контейнери, які запускаються низькорівневим рушієм (CRI).
Вимоги:
docker або crictl), щоб переглянути список запущених контейнерів на рівні ОС вузла.Команди:
# Підключення до оболонки вузла minikube
minikube ssh
# Всередині SSH-сесії вузла: перегляд процесів контейнерів
docker ps
# або якщо minikube використовує containerd:
sudo crictl ps
Питання:
docker ps / crictl ps значно більша, ніж кількість створених вами Pod'ів у кластері?Дослідіть структуру конфігураційного файлу, за допомогою якого kubectl автентифікується в API-сервері Kubernetes.
Вимоги:
config, який знаходиться в директорії .kube у вашій домашній директорії, у текстовому редакторі:
~/.kube/config (або /Users/<ім'я_користувача>/.kube/config)C:\Users\<ім'я_користувача>\.kube\config (або %USERPROFILE%\.kube\config)clusters, users та contexts.Команди:
# Перегляд поточної конфігурації через kubectl (безпечний спосіб без виводу приватних ключів)
kubectl config view
Питання:
clusters або users посилання на сертифікати (наприклад, certificate-authority або client-certificate). Навіщо вони потрібні?Реалізуйте патерн багатоконтейнерного Pod'у (Multi-container Pod) та перевірте, як контейнери всередині одного Pod'у взаємодіють між собою через локальну мережу.
Вимоги:
multi-container.yaml для Pod'у з двома контейнерами: вебсервером Nginx та утилітою Busybox.localhost.multi-container.yaml:
apiVersion: v1
kind: Pod
metadata:
name: multi-app
spec:
containers:
- name: web-server
image: nginx:1.25
ports:
- containerPort: 80
- name: helper-tools
image: busybox:1.36
command: ["sleep", "3600"]
Команди:
# Застосування маніфесту багатоконтейнерного Pod'у
kubectl apply -f multi-container.yaml
# Виконання запиту з контейнера helper-tools до сусіднього контейнера web-server
kubectl exec multi-app -c helper-tools -- wget -O- http://localhost:80
Питання:
helper-tools (Busybox) зміг успішно звернутися до Nginx через localhost:80, якщо це абсолютно різні, ізольовані контейнери з різними образами?kubectl та роботу з локальним середовищем Minikube, заклавши фундамент для глибшого вивчення ресурсів Kubernetes.Архітектура Kubernetes — анатомія кластера
Внутрішня будова Kubernetes-кластера — control plane, worker nodes, ключові компоненти та їхня взаємодія
Pod — атомарна одиниця Kubernetes
Глибоке розуміння Pod — від базових концепцій до повної специфікації YAML, життєвого циклу та практичних прикладів з .NET