K8s Autoscaler - это проект, который использует K3s, Terraform и Scala для автоматического масштабирования кластера Kubernetes в зависимости от потребности в ресурсах. В этом README приведены инструкции по настройке и запуску проекта.
Для начала работы с проектом необходимо склонировать репозиторий:
git clone https://gitlab.com/PotatoHD/k8s-autoscaler.git
Если вы хотите вносить изменения в проект, необходимо сделать форк репозитория и создать merge request (pull request) с вашими изменениями.
Перед началом работы убедитесь, что на вашей системе установлен Docker. Для установки Docker следуйте инструкциям для вашей операционной системы:
- Windows: Установка Docker Desktop для Windows
- macOS: Установка Docker Desktop для Mac
- Linux: Установка Docker Engine
-
Создайте файл
.env
в корневом каталоге проекта и укажите следующие переменные окружения:YC_TOKEN="your_yandex_cloud_token" YC_CLOUD_ID="your_yandex_cloud_id" YC_FOLDER_ID="your_yandex_folder_id" YC_ZONE="your_yandex_zone" K3S_TOKEN="your_k3s_token" S3_ACCESS_KEY="your_s3_access_key" S3_SECRET_KEY="your_s3_secret_key"
Замените значения на свои фактические данные.
-
Сгенерируйте пару SSH-ключей (приватный и публичный) и сохраните публичный ключ в файле
id_rsa.pub
в корневом каталоге проекта. Для генерации ключей выполните следующую команду:ssh-keygen -t rsa -b 4096 -C "[email protected]"
Замените
"[email protected]"
на ваш адрес электронной почты или любой другой идентификатор. Следуйте инструкциям для сохранения ключей.
Для запуска проекта с помощью Docker Compose используйте следующие команды:
-
Создание кластера:
docker-compose up cluster-creator
-
Удаление кластера:
docker-compose up cluster-destroyer
После успешного создания кластера будут выведены публичные и внутренние IP-адреса виртуальных машин. Вы можете использовать публичные IP-адреса для подключения к виртуальным машинам по SSH.
Для локальной сборки и запуска проекта убедитесь, что на вашей системе установлены следующие компоненты:
- Java Development Kit (JDK) 11 или выше
- Scala 2.13 или выше
- Scala Build Tool (SBT)
- IntelliJ IDEA (опционально, для локальной разработки)
-
Загрузите и установите Java Development Kit (JDK) 11 или выше с официального сайта Oracle или используйте менеджер пакетов для вашей операционной системы.
-
Установите Scala, следуя инструкциям на официальном сайте Scala.
-
Установите Scala Build Tool (SBT), следуя инструкциям на официальном сайте SBT.
Если вы предпочитаете разрабатывать локально с использованием IDE, вы можете установить IntelliJ IDEA, следуя этим шагам:
- Загрузите IntelliJ IDEA с официального сайта JetBrains.
- Следуйте инструкциям по установке для вашей операционной системы.
-
Соберите образ Docker для автоскейлера с помощью следующей команды:
docker build -t potatohd/autoscaler -f Dockerfile.autoscaler .
Если вы хотите использовать свое собственное имя образа, замените
potatohd/autoscaler
на желаемое имя. -
Соберите образ Docker для создателя кластера с помощью следующей команды:
docker build -t potatohd/cluster-creator -f Dockerfile.cluster-creator .
Если вы хотите использовать свое собственное имя образа, замените
potatohd/cluster-creator
на желаемое имя. -
Отправьте собранные образы в реестр контейнеров, например, Docker Hub:
docker push potatohd/autoscaler docker push potatohd/cluster-creator
Замените
potatohd
на ваше имя пользователя Docker Hub или другой реестр контейнеров.Если вы используете свои собственные имена образов, обязательно обновите
image
в файлеhelm/values.yaml
для автоскейлера иimage
в файлеdocker-compose.yml
для создателя кластера.
-
Перейдите в каталог
helm
:cd helm
-
Соберите Helm-чарт с помощью следующей команды:
helm package .
Будет создан архив с Helm-чартом, например,
k8s-autoscaler-0.1.0.tgz
. -
Отправьте собранный Helm-чарт в репозиторий Helm или разместите его в месте, доступном для установки.
-
Перейдите в корневой каталог проекта:
cd k8s-autoscaler
-
Соберите проект с помощью SBT:
sbt compile
-
Запустите класс
Main
в модулеautoscaler
:sbt "autoscaler/run"
Или откройте проект в IntelliJ IDEA, найдите класс
Main
в модулеautoscaler
и запустите его.
Перед запуском проекта необходимо настроить необходимые переменные окружения и файлы.
Создайте файл .env
в корневом каталоге проекта и укажите следующие переменные окружения:
YC_TOKEN="your_yandex_cloud_token"
YC_CLOUD_ID="your_yandex_cloud_id"
YC_FOLDER_ID="your_yandex_folder_id"
YC_ZONE="your_yandex_zone"
K3S_TOKEN="your_k3s_token"
S3_ACCESS_KEY="your_s3_access_key"
S3_SECRET_KEY="your_s3_secret_key"
Прежде чем заменять значения, убедитесь, что у вас есть аккаунт в Yandex Cloud и вы создали хотя бы одно облако и каталог в нем.
Замените значения на свои фактические данные:
YC_TOKEN
: Ваш API-токен Yandex Cloud. Вы можете получить его в консоли управления Yandex Cloud. Перейдите в раздел " Сервисные аккаунты", создайте сервисный аккаунт с ролью admin и создайте новый API-ключ.YC_CLOUD_ID
: Идентификатор вашего облака Yandex Cloud. Вы можете найти его в консоли управления Yandex Cloud сверху.YC_FOLDER_ID
: Идентификатор каталога в вашем облаке Yandex Cloud, где будут создаваться ресурсы. Вы можете найти его в консоли управления Yandex Cloud в разделе "Каталоги".YC_ZONE
: Зона Yandex Cloud, где будут создаваться ресурсы (например,ru-central1-a
). Вы можете выбрать подходящую зону в документации Yandex Cloud в разделе "Зоны доступности".K3S_TOKEN
: Токен, используемый для аутентификации в кластере K3s. Вы можете сгенерировать случайный токен или использовать существующий (например86cl4b19zfxrto2ybwnfi4nvqixfo1hqyyj77j9qiqetqr8k
).S3_ACCESS_KEY
: Ключ доступа для вашего S3-совместимого хранилища. Вы можете получить его в вашей консоли облака Yandex Cloud для сервисного аккаунта, который вы уже создали. Создайте для него новый ключ доступа, скопируйте публичную часть, а приватную оставьте для следующего пункта.S3_SECRET_KEY
: Секретный ключ для вашего S3-совместимого хранилища. Вставьте приватную часть полученную на предыдущем шаге.
Создайте файл с именем id_rsa.pub
в корневом каталоге проекта и вставьте в него ваш публичный SSH-ключ. Этот ключ
будет использоваться для подключения к виртуальным машинам в кластере.
Чтобы сгенерировать пару SSH-ключей (приватный и публичный), выполните следующие шаги:
- Откройте терминал или командную строку на вашей локальной машине.
- Выполните следующую команду для генерации пары SSH-ключей:
Замените
ssh-keygen -t rsa -b 4096 -C "[email protected]"
"[email protected]"
на ваш адрес электронной почты или любой другой идентификатор. - Когда будет предложено, нажмите Enter, чтобы принять расположение по умолчанию для сохранения пары
ключей (
~/.ssh/id_rsa
). - При желании вы можете ввести пароль для дополнительной безопасности. Если вы не хотите устанавливать пароль, оставьте его пустым и нажмите Enter.
- Пара SSH-ключей будет сгенерирована. У вас будет два файла:
~/.ssh/id_rsa
: Приватный ключ. Храните этот файл в безопасности и не передавайте его никому.~/.ssh/id_rsa.pub
: Публичный ключ. Этот файл можно передавать и использовать для аутентификации.
Скопируйте содержимое файла ~/.ssh/id_rsa.pub
и вставьте его в файл id_rsa.pub
в корневом каталоге проекта.
Если вы хотите внести свой вклад в проект, пожалуйста, следуйте стандартному рабочему процессу GitLab:
- Сделайте форк репозитория.
- Создайте новую ветку для вашей функциональности или исправления ошибки.
- Внесите изменения и зафиксируйте их с описательными сообщениями коммитов.
- Отправьте изменения в свой форк репозитория.
- Создайте merge request (pull request) в основной репозиторий.
Этот проект распространяется под лицензией MIT License.