Kubernetes: scale deployment через API

Краткая заметка о том, что можно управлять сущностями в k8s не только посредством kubectl или dashboard, но и через API. Такой вариант использовать в повседневном администрировании не приходится – это скорее исключение для решения некоторых задач.

В моём случае необходимо было предоставить коллегам из мониторинга (которые не системные администраторы вовсе) возможность скейлить конкретный деплоймент, чтобы скрывать фронт приложения на время проведения технических работ.

Например, со стороны другой организации ,которая подключается к приложению, запланированы технические работы и соответственно даунтайм. Мне всегда ставят задачу скрыть наше приложение и вернуть по сигналу. То есть приходится вставать по ночам ради пары минут, лишая себя прекрасной возможности полноценно высыпаться. Такой вариант не очень удобен, а потому скрытие фронта приложения было делегировано дежурным сотрудникам.

Собственно, для простой реализации необходимо создать токен по пути /etc/kubernetes/token_auth.csv , настроить ABAC или RBAC и выполнить перезапуск API-сервера (можно на живую, приложения в проде продолжат работать) – systemctl restart kube-apiserver

И остаётся подготовить запрос:

PAYLOAD='[{"op":"replace","path":"/spec/replicas","value":0}]'

А потом выполнить через curl с указанием токена и пути в нужном namespace:

curl -k -X PATCH -d$PAYLOAD -H 'Authorization: Bearer YOUR_TOKEN' -H 'Content-Type: application/json-patch+json' https://K8S_API_URL/apis/extensions/v1beta1/namespaces/staging/deployments/stage-frontend

Перед выполнением также можно проверить, что указанный путь существует, для этого нужно replace заменить на test и снова выполнить запрос через curl:

PAYLOAD='[{"op":"test","path":"/spec/replicas","value":0}]'

Также хочу отметить, что нужно обращать внимание на значение кол-ва реплик в deployment – в моих примерах они без кавычек.

И ещё в примерах везде фигурирует пример, когда в конце запроса указан /scale https://K8S_API_URL/apis/extensions/v1beta1/namespaces/staging/deployments/stage-frontend/scale

При уменьшении кол-ва реплик до нуля с этим проблем нет, а вот при возвращении до иного состояния, отличного от нуля, возникает ошибка json “jsonpatch replace operation does not apply: doc is missing key: /spec/replicas“, поэтому scale нужно либо убрать вовсе, либо использовать осторожностью.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: