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/...
- Docker
- Kubernetes
- Minikube
- Helm
- Gitlab CiCd
- OpenVPN
- CoreDNS
Тестирование проводилось на ОС Ubuntu 16.04.4 LTS (Xenial Xerus)
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
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
git clone https://github.com/bagart/localdev.git
cd localdev
#cp config.windows config
cp config.linux config
Указать пользователя гитлаб репозитория, почту, пароль и private docker registry server (см .Переменные).
vim config
5. В файле ./services/ext-api
и отредактированть переменные (см. Определние сервисов для развертывания).
для openvpn-client secrets/config.conf
:
$ ./install.sh
$ ./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/
WORK PATH: ~/.localdev/services/localdev/ext-api/
#в директории с этим репозиторием
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
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
- 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)