- Регистрируемся в Mail.ru Cloud Solutions
- Заходим в личный кабинет MCS и создаем кластер Kubernetes. В предустановленных сервисах оставляем Nginx Ingress Controller
- После создания скачиваем kubeconfig файл и экспортируем его
export KUBECONFIG=<path to downloaded kubeconfig>
- Пока создается кластер, создадим базу данных
- Выбираем PostgreSQL
- На этапе создания пользователя, жмем автосгенерировать пароль и сохраняем его, он нам понадобится в дальнейшем
- Регистрируемся на Gitlab.com
- После регистрации создаем новый пустой проект с именем mcs-kubernetes-project
- Клонируем его себе
- Копируем содержимое директории app из текущего репозитория в репозиторий гитлаба
- Пушим изменения
- Добавляем хелм репозиторий гитлаба
helm repo add gitlab https://charts.gitlab.io
- Ставим раннер
kubectl create namespace gitlab
helm install --namespace gitlab gitlab-runner gitlab/gitlab-runner \
--set rbac.create=true \
--set runners.privileged=true \
--set gitlabUrl=https://gitlab.com/ \
--set runnerRegistrationToken=<token from project settings/CI/CD/Runners>
- Выключаем шаренные раннеры в Settings/CI/CD/Runners
- Копируем файл .gitlab-ci.yml из текущего репозитория в репозиторий на гитлабе и пушим изменения
- Смотрим за пайплайном в интерфейсе гитлаба. Шаг деплоя на данном этапе должен падать, так и задумано
- Создаем неймспейс для приложения
kubectl create ns mcs-kubernetes-project
- Создаем RBAC объекты для доступа раннера к API Kubernetes
kubectl create sa deploy -n mcs-kubernetes-project
kubectl create rolebinding deploy \
-n mcs-kubernetes-project \
--clusterrole edit \
--serviceaccount mcs-kubernetes-project:deploy
- Получам токен от созданного сервисаккаунта
kubectl get secret -n mcs-kubernetes-project \
$(kubectl get sa -n mcs-kubernetes-project deploy \
-o jsonpath='{.secrets[].name}') \
-o jsonpath='{.data.token}'
- Переходим в интерфейс гитлаба. В левом меню находим Settings, далее CI/CD и далее Variables и нажимаем Expand В левое поле вводим имя переменной K8S_CI_TOKEN В правое поле вводим скопированный токен из вывода команды setup.sh Protected выключаем! Masked включаем!
- Далее в том же левом меню в Settings > Repository находим Deploy tokens и нажимаем Expand. В поле Name вводим k8s-pull-token И ставим галочку рядом с read_registry. Все остальные поля оставляем пустыми. Нажимаем Create deploy token. НЕ ЗАКРЫВАЕМ ОКНО БРАУЗЕРА!
- Возвращаемся в консоль. Создаем image pull secret для того чтобы кубернетис мог пулить имаджи из гитлаба
kubectl create secret docker-registry mcs-kubernetes-project-image-pull \
--docker-server registry.gitlab.com \
--docker-email 'admin@mycompany.com' \
--docker-username '<первая строчка из окна создания токена в gitlab>' \
--docker-password '<вторая строчка из окна создания токена в gitlab>' \
--namespace mcs-kubernetes-project
Соответсвенно подставляя на место <> нужные параметры.
- Создаем секрет с паролем к БД
kubectl create secret generic mcs-kubernetes-project \
-n mcs-kubernetes-project \
--from-literal db-password=<сохраненный ранее пароль от БД>
- Копируем директорию .kube из текущего репозитория в репозиторий проекта на гитлабе
- Проставляем в файле deployment.yaml параметры подключения к БД
- Пушим изменения, ждем окончания деплоя
- По IP адресу балансировщика созданного облаком проверяем работу приложения. Его можно получить с помощью команды
kubectl get svc -n ingress-nginx nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[].ip}'
- Выполняем пару запросов для проверки
curl -k https://<INGRESS IP>/users -X POST -H "Content-Type: application/json" --data '{"name":"test","location":"asdf","age":12}'
curl -k https://<INGRESS IP>/users