Привет, Хабр!
На моей работе мы пользуемся Kubernetes, для наших задач это очень полезный инструмент, который снимает с DevOps-ов и разработчиков много головной боли (хотя про DevOps-ов не уверен, но в любом случае, мне с ним жить точно проще). Как и многие, мы используем микросерверный подход, наш продукт состоит из большого количества компонентов, и Kubernetes позволяет ими удобно управлять. К сожалению, специфика нашего продукта такова, что разворачивать приложение только на одном кластере не предоставляется возможным (данные пользователей обрабатываются на другом кластере). Я не уверен, насколько сильно я могу распространяться про нюансы, поэтому оставлю описание на этом уровне, хотя, конечно, хочу рассказать больше.
Исходя из этого, для запуска и работы приложения нам нужно 2 кластера. Сейчас мы на этапе создания MVP, поэтому пока что мы имеем только два набора кластеров:
-
Dev — для разработчиков, чтобы можно было развернуть определённый коммит какого-то сервиса и проверить его.
-
Stage — для демо, разработчиков и тестировщиков, на нём разворачиваются только последние коммиты из веток main.
Вскоре добавиться третий набор — production. И того получается 6 кластеров в сумме.
Для работы с кластерами я в основном использую 2 программы:
Пока что мне их хватает, но в интернете можно найти намного больше приложений для работы с Kubernetes кластером. И все они для подключения к кластеру требуют один конфиг, который обычно находится в файле YAML формата$HOME/.kube/config
Соответственно, если вдруг вы захотите подключиться к другому кластеру, вам просто достаточно заменить этот конфиг на конфиг другого кластера. И вот уже на моменте взаимодействия с 4 кластерами я столкнулся с проблемой переключения между этими кластерами. В принципе, решение этой проблемы уже есть внутри команды — заранее готовый bash-скрипт, вызов которого позволяет менять местами конфиги. Я мог бы на этом и остановиться.
Но совсем недавно начал активно изучать Rust, и в качестве тестового проекта решил сделать замену внутреннему bash-скрипту — полноценное CLI приложение, которое управляет конфигами Kubernetes: KubEnv.
В общем-то вся это статья — это попытка рассказать о приложении и просьба о ревью. Ниже я распишу, как установить и взаимодействовать с приложением и как оно работает.
Установка
Установка возможна двумя способами:
-
Сборка из исходников.
-
Установка готового бинарника.
Готовый бинарник собирал и тестировал тольно на 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. Спасибо, что дочитали до конца.
ссылка на оригинал статьи https://habr.com/ru/post/713172/
Добавить комментарий