Керування обʼєктами Kubernetes за допомогою імперативних команд
Обʼєкти Kubernetes можна швидко створювати, оновлювати та видаляти безпосередньо за допомогою імперативних команд, вбудованих в інструмент командного рядка kubectl
. Цей документ пояснює, як організовано ці команди та як їх використовувати для керування поточними обʼєктами.
Перш ніж ви розпочнете
Встановіть kubectl
.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Компроміси
Інструмент kubectl
підтримує три види управління обʼєктами:
- Імперативні команди
- Імперативне конфігурування обʼєктів
- Декларативне конфігурування обʼєктів
Див. Управління обʼєктами Kubernetes для обговорення переваг та недоліків кожного виду управління обʼєктами.
Як створювати обʼєкти
Інструмент kubectl
підтримує команди, що базуються на дії, для створення деяких найпоширеніших типів обʼєктів. Команди названі так, щоб їх можна було впізнати користувачам, що не знайомі з типами обʼєктів Kubernetes.
run
: Створює новий Pod для запуску контейнера.expose
: Створює новий обʼєкт Service для балансування трафіку між Pod.autoscale
: Створює новий обʼєкт Autoscaler для автоматичного горизонтального масштабування контролера, наприклад, Deployment.
Інструмент kubectl
також підтримує команди створення, що базуються на типі обʼєкта. Ці команди підтримують більше типів обʼєктів і більш явно вказують на їх наміри, але вимагають, щоб користувачі знали типи обʼєктів, які вони мають намір створити.
create <типобʼєкта> [<підтип>] <імʼяекземпляра>
Деякі типи обʼєктів мають підтипи, які можна вказати в команді create
. Наприклад, обʼєкт Service має кілька підтипів, включаючи ClusterIP, LoadBalancer та NodePort. Ось приклад створення Service з підтипом NodePort:
kubectl create service nodeport <myservicename>
У попередньому прикладі команда create service nodeport
викликається як підкоманда команди create service
.
Ви можете використовувати прапорець -h
, щоб знайти аргументи та прапорці, які підтримуються підкомандою:
kubectl create service nodeport -h
Як оновлювати обʼєкти
Команда kubectl
підтримує команди, що базуються на дії, для деяких загальних операцій оновлення. Ці команди названі так, щоб користувачі, які не знайомі з обʼєктами Kubernetes, могли виконувати оновлення, не знаючи конкретних полів, які потрібно встановити:
scale
: Горизонтально масштабувати контролер для додавання або видалення Podʼів шляхом оновлення кількості реплік контролера.annotate
: Додати або видалити анотацію з обʼєкта.label
: Додати або видалити мітку з обʼєкта.
Команда kubectl
також підтримує команди оновлення, що базуються на аспекті обʼєкта. Встановлення цього аспекту може встановлювати різні поля для різних типів обʼєктів:
set
<поле>
: Встановити аспект обʼєкта.
Примітка:
У версії Kubernetes 1.5 не кожна команда, що базується на дії, має повʼязану команду, що базується на аспекті.Інструмент kubectl
підтримує ці додаткові способи оновлення поточного обʼєкта безпосередньо, однак вони вимагають кращого розуміння схеми обʼєктів Kubernetes.
edit
: Безпосередньо редагувати сирі конфігурації поточного обʼєкта, відкриваючи його конфігурацію в редакторі.patch
: Безпосередньо модифікувати конкретні поля поточного обʼєкта, використовуючи рядок патча. Докладніше про рядки патча див. розділ патча в Конвенціях API.
Як видаляти обʼєкти
Ви можете використовувати команду delete
, щоб видалити обʼєкт з кластера:
delete <тип>/<імʼя>
Примітка:
Ви можете використовуватиkubectl delete
як для імперативних команд, так і для імперативного конфігурування обʼєкта. Різниця полягає в аргументах, переданих команді. Щоб використовувати kubectl delete
як імперативну команду, передайте обʼєкт для видалення як аргумент. Ось приклад, який передає обʼєкт Deployment з іменем nginx:kubectl delete deployment/nginx
Як переглянути обʼєкт
Існують кілька команд для виведення інформації про обʼєкт:
get
: Виводить базову інформацію про відповідні обʼєкти. Використовуйтеget -h
, щоб побачити список опцій.describe
: Виводить агреговану детальну інформацію про відповідні обʼєкти.logs
: Виводить stdout та stderr для контейнера, що працює в Pod.
Використання команд set
для модифікації обʼєктів перед створенням
Є деякі поля обʼєктів, для яких не існує прапорця, який можна використовувати в команді create
. У деяких з цих випадків ви можете використовувати комбінацію set
та create
, щоб вказати значення для поля перед створенням обʼєкта. Це робиться за допомогою перенаправлення виводу команди create
на команду set
, а потім назад на команду create
. Ось приклад:
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
- Команда
kubectl create service -o yaml --dry-run=client
створює конфігурацію для Service, але виводить її на stdout у форматі YAML замість надсилання до сервера API Kubernetes. - Команда
kubectl set selector --local -f - -o yaml
читає конфігурацію з stdin і записує оновлену конфігурацію на stdout у форматі YAML. - Команда
kubectl create -f -
створює обʼєкт, використовуючи надану конфігурацію через stdin.
Використання --edit
для модифікації обʼєктів перед створенням
Можна використовувати kubectl create --edit
, щоб зробити довільні зміни обʼєкта перед його створенням. Ось приклад:
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client > /tmp/srv.yaml
kubectl create --edit -f /tmp/srv.yaml
- Команда
kubectl create service
створює конфігурацію для Service та зберігає її у/tmp/srv.yaml
. - Команда
kubectl create --edit
відкриває файл конфігурації для редагування перед створенням обʼєкта.