Как стать автором
Обновить

KubEnv — простое управление конфигами Kubernetes

Время на прочтение3 мин
Количество просмотров6.8K

Привет, Хабр!

На моей работе мы пользуемся Kubernetes, для наших задач это очень полезный инструмент, который снимает с DevOps-ов и разработчиков много головной боли (хотя про DevOps-ов не уверен, но в любом случае, мне с ним жить точно проще). Как и многие, мы используем микросерверный подход, наш продукт состоит из большого количества компонентов, и Kubernetes позволяет ими удобно управлять. К сожалению, специфика нашего продукта такова, что разворачивать приложение только на одном кластере не предоставляется возможным (данные пользователей обрабатываются на другом кластере). Я не уверен, насколько сильно я могу распространяться про нюансы, поэтому оставлю описание на этом уровне, хотя, конечно, хочу рассказать больше.

Исходя из этого, для запуска и работы приложения нам нужно 2 кластера. Сейчас мы на этапе создания MVP, поэтому пока что мы имеем только два набора кластеров:

  1. Dev - для разработчиков, чтобы можно было развернуть определённый коммит какого-то сервиса и проверить его.

  2. Stage - для демо, разработчиков и тестировщиков, на нём разворачиваются только последние коммиты из веток main.

Вскоре добавиться третий набор - production. И того получается 6 кластеров в сумме.

Для работы с кластерами я в основном использую 2 программы:

  1. kubectl

  2. k9s

Пока что мне их хватает, но в интернете можно найти намного больше приложений для работы с Kubernetes кластером. И все они для подключения к кластеру требуют один конфиг, который обычно находится в файле YAML формата$HOME/.kube/config

Соответственно, если вдруг вы захотите подключиться к другому кластеру, вам просто достаточно заменить этот конфиг на конфиг другого кластера. И вот уже на моменте взаимодействия с 4 кластерами я столкнулся с проблемой переключения между этими кластерами. В принципе, решение этой проблемы уже есть внутри команды - заранее готовый bash-скрипт, вызов которого позволяет менять местами конфиги. Я мог бы на этом и остановиться.

Но совсем недавно начал активно изучать Rust, и в качестве тестового проекта решил сделать замену внутреннему bash-скрипту - полноценное CLI приложение, которое управляет конфигами Kubernetes: KubEnv.

В общем-то вся это статья - это попытка рассказать о приложении и просьба о ревью. Ниже я распишу, как установить и взаимодействовать с приложением и как оно работает.

Установка

Установка возможна двумя способами:

  1. Сборка из исходников.

  2. Установка готового бинарника.

Готовый бинарник собирал и тестировал тольно на Linux Fedora 37, поэтому, если хотите попоробовать и у вас другая операционная система, то более правильным вариантом будет сборка из исходников.

Сборка из исходников

Для сборки на вашем компьютере должен быть доступ в Интернет и должен быть установлен Rust и Git.

git clone https://github.com/OlegYurchik/kubenv
cd kubenv
cargo build --release
sudo cp ./target/release/kubenv /usr/local/bin/kubenv

Бинарник

wget -c https://github.com/OlegYurchik/kubenv/releases/latest/download/kubenv.tar.gz -O - | tar -xz
sudo mv ./kubenv /usr/local/bin/kubenv

Быстрый старт

Сейчас приложение имеет небольшой набор стандартных команд:

  • list

  • apply

  • add

  • remove

  • show

  • export

С помощью list можно посмотреть список конфигов, которые доступны:

bash-5.2$ kubenv list
  dev-cp
  dev-dp
  keppel-dev-cp
  keppel-dev-dp
* stage-cp
bash-5.2$ 

С помощью apply можно применить определённый конфиг:

bash-5.2$ kubenv apply dev-cp
Apply config 'dev-cp' succesfully
bash-5.2$ kubenv list
* dev-cp
  dev-dp
  keppel-dev-cp
  keppel-dev-dp
  stage-cp
bash-5.2$ 

С помощью add можно добавить новый конфиг:

kubenv add --name tmp_config --file ~/kubeconfigs/tmp_config

С помощью remove - удалить конфиг:

kubenv remove tmp_config

С помощью show - вывести конфиг на экран:

kubenv show dev-cp

С помощью export - сохранить конфиг на жёстком диске:

kubenv export dev-cp --file /kubeconfigs/dev_cp

Как это работает

Все конфиги для KubEnv по умолчанию хранятся в папке $HOME/.kube/kubenv с именем файла name.kubeconfig, где name - это имя конфига. Это позволяет хранить все данные, связанные с Kubernetes в одном месте. То есть если вы решите переехать с одного компьютера на другой или переустановить систему, вам достаточно просто сделать бэкап папки .kube. Но если такой вариант не подходит, в приложении есть возможность задать свой путь для хранения конфигов с помощью параметра --dir.

Конфиги хранятся в оригинальном виде - это позволяет пользователю при необходимости безболезненно редактировать их.

Плагин для kubectl

Приложение можно настроить как плагин к kubectl. Для этого достаточно после установки выполнить команду:

sudo ln -sf /usr/local/bin/kubenv /usr/local/bin/kubectl-env

После этого приложением можно пользоваться, вызывая kubectl env вместо kubenv.

Например:

bash-5.2$ kubectl env list
* dev-cp
  dev-dp
  keppel-dev-cp
  keppel-dev-dp
  stage-cp
bash-5.2$ 

Под конец

Я буду очень рад, если это приложение будет решать не только мою боль, но и боль многих людей. Также буду благодарен за комментарии, за критику, за ревью и за найденные issues. Спасибо, что дочитали до конца.

Теги:
Хабы:
Всего голосов 16: ↑13 и ↓3+10
Комментарии16

Публикации