Імперативне керування обʼєктами Kubernetes за допомогою файлів конфігурації
Обʼєкти Kubernetes можна створювати, оновлювати та видаляти за допомогою інструменту командного рядка kubectl
разом із файлом конфігурації обʼєкта, написаним у форматі YAML або JSON. У цьому документі пояснюється, як визначати та керувати обʼєктами за допомогою файлів конфігурації.
Перш ніж ви розпочнете
Встановіть kubectl
.
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Компроміси
Інструмент kubectl
підтримує три види управління обʼєктами:
- Імперативні команди
- Імперативне конфігурування обʼєктів
- Декларативне конфігурування обʼєктів
Див. Управління обʼєктами Kubernetes для обговорення переваг та недоліків кожного виду управління обʼєктами.
Як створювати обʼєкти
Ви можете використовувати kubectl create -f
для створення обʼєкта з файлу конфігурації. Дивіться Довідник API Kubernetes для отримання деталей.
kubectl create -f <filename|url>
Як оновити обʼєкти
Попередження:
Оновлення обʼєктів за допомогою командиreplace
призводить до видалення всіх частин специфікації, які не вказані в файлі конфігурації. Це не слід використовувати з обʼєктами, чиї специфікації частково керуються кластером, наприклад, Service типу 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 <тип> <імʼя>
kubectl delete <тип> -l <мітка>
Як переглянути обʼєкт
Ви можете використовувати 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
Ручне видалення поля стану з файлу конфігурації обʼєкта.
Для подальшого керування обʼєктом виключно використовуйте
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"