Керування обʼєктами 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відкриває файл конфігурації для редагування перед створенням обʼєкта.