Продолжение. Kubernetes (4) — здесь.

Управление объектами Kubernetes с использованием императивных команд
Объекты Kubernetes могут быстро создаваться, модифицироваться и удаляться при помощи императивных команд непосредственно из командной строки kubectl
.
Сначала нужно установить kubectl
при помощи minikube, а также создать кластер можно при помощи лабораторных сред:
Проверить версию можно при помощи команды kubectl
version
.
В имеющемся кластере Kubernetes средство командной строки kubectl даёт возможность коммуницировать с кластером. Для данной лабораторной работы нужно иметь кластер по крайней мере с двумя нодами, которые не являются хостами control plane.
Сравнения
Средство kubectl
поддерживает три типа управления объектами:
- Императивные команды (Imperative commands)
- Императивная конфигурация объекта (Imperative object configuration)
- Декларативная конфигурация объекта (Declarative object configuration)
Создание объектов
Средство kubectl
позволяет создавать наиболее общие объекты при помощи веб-команд. Эти команды имеют интуитивно понятные названия, чтобы даже пользователь, незнакомый с объектами Kubernetes, мог их понять:
run
: Создаёт новый под (Pod) для работы контейнера (Container).expose
: Создаёт новый сервисный объект (Service object) для балансировки трафика между подами.autoscale
: Создаёт новый объект Autoscaler для автоматического горизонтального масштабирование контроллера, такого как деплоймент (Deployment).
Средство kubectl
также поддерживает команды создание объекта определённого типа. Эти команды поддерживают больше различные типы объектов с более явными намерениями (intent), но они требуют от пользователя хорошего знания типа объекта, который они намерены создать.
create <objecttype> [<subtype>] <instancename>
Некоторые типы объектов Some имеют суб-типы (subtypes), которые можно определить в команде create
. Например, сервисный объект имеет суб-типы включая ClusterIP, LoadBalancer и NodePort.
В данном примере показано, как создавать сервис с суб-типом NodePort:
kubectl create service nodeport <myservicename>
В предыдущем примере команда create
service
nodeport
называется суб-командой по отношению к команде create
service
.
Можно использовать флаг -
h
flag чтобы найти аргументы и флаги, поддерживаемые суб-командой:
kubectl create service nodeport -h
Модификация (update) объектов
Команда kubectl
поддерживает веб-команды для некоторых общих операций модификации (update operations). Эти команды названы так, чтобы дать возможность пользователям, незнакомым с объектами Kubernetes выполнять апдейты без знания специальных полей, которые должны быть установлены:
scale
: Горизонтальное масштабирование контроллера для добавления или удаления подов при помощи модификации числа репликаций (replica, копий) контроллераannotate
: Добавление или удаление аннотации с объекта.label
: Добавление или удаление метки с объекта.
Команда kubectl
также поддерживает команды модификации аспекта объекта. Установка аспекта может производиться в различных полях в различных типах объекта:
set
<
field
>
: установка аспекта объекта.
Примечание: В версии Kubernetes version 1.5 не каждая команда в виде глагола (verb-driven) ассоциирована с командами в виде установки аспекта (aspect-driven).
Средство kubectl
имеет дополнительные способы непосредственного апдейта живого объекта, однако, они требуют хорошего понимания устройства объектов Kubernetes.
edit
: непосредственное редактирование конфигурации живого объекта при открытии его конфигурации в редакторе.patch
: непосредственная модификация полей живого объекта при использовании строки патча (patch string). О patch strings можно прочитать в разделе patch здесь: API Conventions.
Удаление объектов
Удалить объекта из кластера можно командой delete
:
delete <type>/<name>
Примечание: Выражение kubectl
delete
можно использовать для удаления как императивных, так и декларативных команд конфигурации, с различением в аргументах команды.
Например, для удаления деплоймента объекта nginx:
kubectl delete deployment/nginx
Просмотр объекта
Некоторые команды для вывода информации объекта:
get
: выводит базовую информацию о соответствующих объектах. Для просмотра списка опций используется командаget
-
h
.describe
: выводит детальную информацию о соответствующих объектах.logs
: выводит информацию stdout и stderr для контейнеров работающих в подах.
Использование команд 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
создает конфигурацию сервиса, но выводит stdout в виде YAML вместо того, чтобы послать его на сервер Kubernetes API. - Команда
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
создает конфигурацию для сервиса и сохраняет его в/
tmp
/
srv
.
yaml
. - Команда
kubectl
create
--
edit
открывает файл конфигурации для редактирования перед созданием объекта.
Императивное управление объектами Kubernetes с использованием файлов конфигурации
Объекты Kubernetes могут создаваться, модифицироваться и удаляться при использовании средства командной строки kubectl
вместе с файлом конфигурации объекта в YAML или JSON.
Сначала нужно установить kubectl
и сконфигурировать его для коммуникации с кластером. Кластер можно создать с помощью minikube, либо использовать следующие учебные среды:
Чтобы проверить версию, ввести команду kubectl
version
.
Сравнение
Средство kubectl
поддерживает три типа управления объектами:
- Императивные команды (Imperative commands).
- Императивная конфигурация объекта (Imperative object configuration).
- Декларативная конфигурация объекта (Declarative object configuration).
Создание объекта
Создать объекта из конфигурационного файла можно с помощью команды kubectl
create
-
f
to. Подробная информация содержится здесь: kubernetes API reference.
kubectl create -f <filename|url>
Модификация объекта
Предупреждение: модификация объектов при помощи команды replace
сбрасывает все спецификации, не указанные в файле конфигурации. Она не должна использоваться с объектами, чьи спецификации частично управляются кластером, такими как сервис типа LoadBalancer
, где поле externalIPs
независимо управляется из файла конфигурации.
Можно использовать команду вида kubectl
replace
-
f
to для модификации живого объекта в соответствии с файлом конфигурации.
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 <filename|url> -o yaml
Флаг -
o
yaml
указывает, что должна выводится полная конфигурация объекта
Чтобы просмотреть список опций, нужно ввести команду:
kubectl get -h
Ограничения
Команды create
, replace
, и delete
хорошо работают, когда в файле конфигурации определена полная информация об объекте. Однако, при модификации живого объекта, и эти изменения не отражаются в файле конфигурации, то при выполнении следующей команды replace
эти модификации теряются. Это может случиться, если контроллер, например HorizontalPodAutoscaler, непосредственно изменяет живой объект. Например:
- Объект создаётся из файла конфигурации.
- Какое-то поле объекта модифицируется другим источником.
- При следующей замене объекта из файла конфигурации изменения из другого источника теряются.
Если нужно, чтобы несколько источников информации (multiple writers) поддерживались для одного объекта, можно использовать средство kubectl
для управления объектом
Создание и редактирование объекта из URL без сохранения конфигурации
Если есть URL файла конфигурации объекта, то можно использовать команду kubectl
create
–
edit
, чтобы сделать изменения в конфигурации объекта до создания объекта.
kubectl create -f <url> --edit
Миграция от императивных команд к императивной конфигурации объекта
Миграция от императивных команд к императивной конфигурации объекта предусматривает следующие ручные операции.
- Экспорт живого объекта в локальный файл конфигурации объекта
kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
- Ручное удаление поля состояния (status field) из файла конфигурации объекта.
- Для последующего управления объекта, нужно использовать команду
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"
Уведомление: Kubernetes (6) | Telecom & IT