Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.
Керування обʼєктами Kubernetes
1 - Керування обʼєктами Kubernetes за допомогою імперативних команд
Обʼєкти Kubernetes можна швидко створювати, оновлювати й видаляти безпосередньо за допомогою імперативних команд, вбудованих в інструмент командного рядка kubectl. У цьому документі пояснено, як організовано ці команди та як їх використовувати для керування живими обʼєктами.
Перш ніж ви розпочнете
Встановіть kubectl.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введіть kubectl version.
Компроміси
Інструмент kubectl підтримує три види керування обʼєктами:
- Імперативні команди
- Імперативне конфігурування обʼєктів
- Декларативна конфігурація обʼєктів
Переваги й недоліки кожного виду керування обʼєктами розглянуто в розділі Управління обʼєктами Kubernetes.
Як створювати обʼєкти
Інструмент kubectl підтримує команди на основі дієслів для створення деяких найпоширеніших типів обʼєктів. Команди названо так, щоб їх могли розпізнати користувачі, не знайомі з типами обʼєктів Kubernetes.
run: створює новий Pod для запуску контейнера.expose: створює новий обʼєкт Service для балансування трафіку між Podʼами.autoscale: створює новий обʼєкт Autoscaler для автоматичного горизонтального масштабування контролера, наприклад Deployment.
Інструмент kubectl також підтримує команди створення на основі типу обʼєкта. Ці команди підтримують більше типів обʼєктів і чіткіше виражають свій намір, але вимагають, щоб користувачі знали тип обʼєктів, які вони мають намір створити.
create <objecttype> [<subtype>] <instancename>
Деякі типи обʼєктів мають підтипи, які можна вказати в команді 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<field>: встановити аспект обʼєкта.
Примітка:
У версії Kubernetes 1.5 не кожна команда на основі дієслова має відповідну команду на основі аспекту.Інструмент kubectl підтримує ці додаткові способи безпосереднього оновлення живого обʼєкта, однак вони вимагають кращого розуміння схеми обʼєктів Kubernetes.
edit: безпосередньо редагувати необроблену конфігурацію живого обʼєкта, відкриваючи її в редакторі.patch: безпосередньо змінювати конкретні поля живого обʼєкта за допомогою рядка патча. Докладніше про рядки патча дивіться в розділі про патчі в API Conventions.
Як видаляти обʼєкти
Ви можете використовувати команду delete, щоб видалити обʼєкт з кластера:
delete <type>/<name>
Примітка:
Ви можете використовувати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відкриває файл конфігурації для редагування перед створенням обʼєкта.
Що далі
2 - Імперативне керування обʼєктами Kubernetes за допомогою файлів конфігурації
Обʼєкти Kubernetes можна створювати, оновлювати й видаляти за допомогою інструмента командного рядка kubectl разом із файлом конфігурації обʼєкта у форматі YAML або JSON. У цьому документі пояснено, як визначати обʼєкти й керувати ними за допомогою файлів конфігурації.
Перш ніж ви розпочнете
Встановіть kubectl.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введіть kubectl version.
Компроміси
Інструмент kubectl підтримує три види керування обʼєктами:
- Імперативні команди
- Імперативне конфігурування обʼєктів
- Декларативна конфігурація обʼєктів
Переваги й недоліки кожного виду керування обʼєктами розглянуто в розділі Управління обʼєктами Kubernetes.
Як створювати обʼєкти
Ви можете використовувати kubectl create -f, щоб створити обʼєкт з файлу конфігурації. Докладніше дивіться в довіднику API Kubernetes.
kubectl create -f <filename|url>
Як оновити обʼєкти
Попередження:
Оновлення обʼєктів за допомогою командиreplace вилучає всі частини специфікації, не вказані у файлі конфігурації. Цю команду не слід використовувати з обʼєктами, чиї специфікації частково керуються кластером, наприклад із Services типу LoadBalancer, де поле externalIPs керується незалежно від файлу конфігурації. Поля, що керуються незалежно, потрібно скопіювати у файл конфігурації, щоб replace не вилучив їх.Ви можете використовувати kubectl replace -f, щоб оновити живий обʼєкт відповідно до файлу конфігурації.
kubectl replace -f <filename|url>
Як видалити обʼєкти
Ви можете використовувати kubectl delete -f, щоб видалити обʼєкт, описаний у файлі конфігурації.
kubectl delete -f <filename|url>
Примітка:
Якщо файл конфігурації задає поле generateName у розділі metadata замість поля name, ви не можете видалити обʼєкт за допомогою kubectl delete -f <filename|url>. Для видалення обʼєкта доведеться використати інші прапорці. Наприклад:
kubectl delete <type> <name>
kubectl delete <type> -l <label>
Як переглянути обʼєкт
Ви можете використовувати kubectl get -f, щоб переглянути інформацію про обʼєкт, описаний у файлі конфігурації.
kubectl get -f <filename|url> -o yaml
Прапорець -o yaml вказує, що треба вивести повну конфігурацію обʼєкта. Використайте kubectl get -h, щоб побачити список параметрів.
Обмеження
Команди create, replace і delete добре працюють, коли конфігурація кожного обʼєкта повністю визначена й записана в його файлі конфігурації. Однак якщо живий обʼєкт оновлено, а оновлення не внесено до його файлу конфігурації, вони будуть втрачені під час наступного виконання replace. Це може статися, якщо контролер, як-от HorizontalPodAutoscaler, вносить оновлення безпосередньо в живий обʼєкт. Ось приклад:
- Ви створюєте обʼєкт з файлу конфігурації.
- Інше джерело оновлює обʼєкт, змінюючи якесь поле.
- Ви замінюєте обʼєкт з файлу конфігурації. Зміни, внесені іншим джерелом на кроці 2, втрачаються.
Якщо вам потрібна підтримка кількох записувачів для одного обʼєкта, можна використовувати kubectl apply для керування обʼєктом.
Створення та редагування обʼєкта за URL без збереження конфігурації
Припустимо, у вас є URL файлу конфігурації обʼєкта. Ви можете використати kubectl create --edit, щоб внести зміни до конфігурації перед створенням обʼєкта. Це особливо корисно для навчальних матеріалів і завдань, що вказують на файл конфігурації, який читач може змінити.
kubectl create -f <url> --edit
Міграція від імперативних команд до імперативного конфігурування обʼєктів
Міграція від імперативних команд до імперативного конфігурування обʼєктів складається з кількох кроків, які виконуються вручну.
Експортуйте живий обʼєкт у локальний файл конфігурації обʼєкта:
kubectl get <kind>/<name> -o yaml > <kind>_<name>.yamlВручну вилучіть поле status із файлу конфігурації обʼєкта.
Для подальшого керування обʼєктом використовуйте виключно
replace.kubectl replace -f <kind>_<name>.yaml
Визначення селекторів контролерів та міток PodTemplate
Попередження:
Оновлювати селектори контролерів категорично не рекомендовано.Рекомендований підхід — визначити одну незмінну мітку PodTemplate, яка використовується тільки селектором контролера без іншого семантичного значення.
Приклад мітки:
selector:
matchLabels:
controller-selector: "apps/v1/deployment/nginx"
template:
metadata:
labels:
controller-selector: "apps/v1/deployment/nginx"