Kubernetes (5)

Продолжение. 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 -
  1. Команда kubectl create service -o yaml --dry-run=client создает конфигурацию сервиса, но выводит stdout в виде YAML вместо того, чтобы послать его на сервер Kubernetes API.
  2. Команда kubectl set selector --local -f - -o yaml считывает конфигурацию из stdin, и записывает модифицированную конфигурацию в stdout в виде YAML.
  3. Команда kubectl create -f создаёт объект с использованием конфигурации, предоставленной в stdin.

Использование --edit для модификации объекта перед созданием

Команда kubectl createedit используется чтобы сделать выборочные изменения в объекте перед его созданием, например:

kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client > /tmp/srv.yaml
kubectl create --edit -f /tmp/srv.yaml
  1. Команда kubectl create service создает конфигурацию для сервиса и сохраняет его в /tmp/srv.yaml.
  2. Команда 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

Ограничения

Команды createreplace, и delete хорошо работают, когда в файле конфигурации определена полная информация об объекте. Однако, при модификации живого объекта, и эти изменения не отражаются в файле конфигурации, то при выполнении следующей команды replace эти модификации теряются. Это может случиться, если контроллер, например HorizontalPodAutoscaler, непосредственно изменяет живой объект. Например:

  1. Объект создаётся из файла конфигурации.
  2. Какое-то поле объекта модифицируется другим источником.
  3. При следующей замене объекта из файла конфигурации изменения из другого источника теряются.

Если нужно, чтобы несколько источников информации (multiple writers) поддерживались для одного объекта, можно использовать средство kubectl для управления объектом

Создание и редактирование объекта из URL без сохранения конфигурации

Если есть URL файла конфигурации объекта, то можно использовать команду kubectl createedit, чтобы сделать изменения в конфигурации объекта до создания объекта.

kubectl create -f <url> --edit

Миграция от императивных команд к императивной конфигурации объекта

Миграция от императивных команд к императивной конфигурации объекта предусматривает следующие ручные операции.

  1. Экспорт живого объекта в локальный файл конфигурации объекта
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"
 

Об авторе Алексей Шалагинов

Независимый эксперт
Запись опубликована в рубрике NFV, цифровая трансформация с метками , , . Добавьте в закладки постоянную ссылку.

1 отзыв на “Kubernetes (5)

  1. Уведомление: Kubernetes (6) | Telecom & IT

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.