bagart / localdev

Scripts for automating deployment of development environment on local minikube

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LocalDevEnv

Local Dev Env with Minikube for Gitlab Ci/Cd

Содержание

Описание

Localdev - интегрированный в Gitlab Ci/Cd dev envirement

Основная задача - локальная( разработка SOA App

Особенности:

Технические особенности

Межсервисное взаимодействие

Работает по коротким именам http://ext-api/... => http://service-bus/... => http://internal-service/... => odbc://postgres

Если скомого http-сервиса нет срабатывает failover http://ext-api/... => http://service-bus/... =>

  • => X http://internal-service/...
  • => http://internal-service.{LOCALDEV_FAILOVER_BRANCH}.{REMOTE_CLUSTER}/.... => openVPN => cloud env => http://internal-service/...

Powered By

  • Docker
  • Kubernetes
  • Minikube
  • Helm
  • Gitlab CiCd
  • OpenVPN
  • CoreDNS

Установка

Быстрый запуск

Тестирование проводилось на ОС Ubuntu 16.04.4 LTS (Xenial Xerus)

1. Установить driver виртуализации:

Linux:

https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#kvm2-driver

KVM2 for Ubuntu example

sudo apt install libvirt-bin qemu-kvm
curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 && chmod +x docker-machine-driver-kvm2 && sudo mv docker-machine-driver-kvm2 /usr/local/bin/

#check
sudo kvm-ok

Windows:

Hyperv + Ubuntu-Server + minukube

Set-VMProcessor -VMName minikube-1804 -ExposeVirtualizationExtensions $true

Hyperv + minukube native - не работает https://docs.microsoft.com/ru-ru/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

2. Cклонировать репозиторий:

git clone https://github.com/bagart/localdev.git
cd localdev

3. Установить конфиг для linux или windows

#cp config.windows config
cp config.linux config

4. Настроить конфиг

Указать пользователя гитлаб репозитория, почту, пароль и private docker registry server (см .Переменные).

vim config

5. В файле ./services/ext-api и отредактированть переменные (см. Определние сервисов для развертывания).

6. Положить в директорию secrets файл настрйоки vpn в облачную среду

для openvpn-client secrets/config.conf:

7. Установка minikube, kubectl, helm

$ ./install.sh

8. Поднять кубернетес кластер на миникубе + инициация helm

$ ./deploy.sh

Повторный запуск

На готовом кубернетес кластере можно отдельно запустить install_service.sh, в этом случае установка утилит будет пропущена, а развернутся только сервисы.

Требования

Перед запуском скрипта необходимо установить гипервизор, если в качестве гипервизора используется kvm, то необходимо так же установить драйвера.

Переменные

В файле config необходимо определить переменные:

Variable name Description Required Example
LOCALDEV_REGISTRY_USERNAME пользователь гитлаб репозитория Да user
LOCALDEV_REGISTRY_PASSWORD пароль пользователя гитлаб репозитория Да my_token
LOCALDEV_REGISTRY_SERVER private docker registry server, используется для создания секрета, и скачивания образов Да registry.gruzer.ru
GITLAB_EMAIL почта пользователя гитлаб репозитория Да @gmail.com
KUBECTL_VERSION желаямая версия kubectl Нет v1.9.3
MINIKUBE_VERSION желаемая версия minikube Нет latest
MINIKUBE_VM_DRIVER драйвер для виртуальной машины Нет virtualbox

Определние сервисов для развертывания

Для установки сервиса в локально развернутом кубернетесе, необходимо в директории services создать файл и определить в нем переменные:

Variable name Description Required Example
SERVICE_NAME Имя сервиса, который будет установлен (скрипт будет искать директорию с именем сервиса и helm чартом в ней) Да ext-api
GIT_REPO_PROJECT_BASE Если указано, сервис репозиторий будет склонирова по ссылке: <GIT_REPO_PROJECT_BASE>.<SERVICE_NAME>.git Нет git@gitlab.gruzer.ru:apps
LOCALDEV_BRANCH Ветвь, которая будет использована при клонировании локального репозитория, так же будет использована как часть FQDN, пространства имен Нет stage
LOCALDEV_USERNAME Имя пользователя, которое будет использовано в helm чарте, может быть необходимо какому-либо сервису Да yes
REMOTE_CLUSTER Доменное имя, куда трафик должен быть перенаправлен Нет cluster.local
LOCALDEV_FAILOVER_BRANCH То же самое что и LOCALDEV_BRANCH, но используется на удаленном кластере Если REMOTE_CLUSTER опеределен master

Монтирование

При запуске minikube содержимое папки ~/.localdev/services/ автоматически будет смонтировано на minikube в директорию /home/services/. Необходимые файлы приложений можно редактировать в папке ~/.localdev/services/.

Проверки

dig ext-api @10.96.0.10
curl http://ext-api.localdev.svc.dev.local/

Использование

Подключение IDE

WORK PATH: ~/.localdev/services/localdev/ext-api/

Подключение xdebug

Подключение GIT

Подключение к php console

#в директории с этим репозиторием
cmd/console.sh
    #localdev                  core-75cd69dd9c-pm6qz                      3/3       Running    0          4h
    #localdev                  ext-api-695f4cbf4d-944kh                   3/3       Running    0          14h
    #usage: cmd/console.sh ext-api

cmd/console.sh api
    #connect to ext-api-695f4cbf4d-944kh
    #root@ext-api-695f4cbf4d-944kh:/#

Пересобрать один сервис

на примере service-bus

helm delete --purge service-bus-localdev && ./install_services.sh

Проксирование local dev env наружу

sudo cp addons/nginx-external-localdev-proxy.conf /etc/nginx/sites-enabled/localdev
sudo chown root:root /etc/nginx/sites-enabled/localdev
sudo chmod 0664 /etc/nginx/sites-enabled/localdev

@todo

  • xdebug
  • .git
  • local/cloud db
  • hyper-v
напоминалки

маршрут

sudo ip r add 10.101.0.0/16 via $(minikube ip)
sudo ip r add 10.96.0.10 via $(minikube ip)
sudo ip r add 172.21.0.0/24 via $(minikube ip)

About

Scripts for automating deployment of development environment on local minikube


Languages

Language:Shell 100.0%