Итоговый проект
О работе
Для выполнения лабораторной работы понадобятся:
- какой-нибудь ваш проект (например, курсовая по сетям, заготовки диплома или что-нибудь ещё);
- виртуальная машина с Kubernetes (результат прошлых лабораторных работ, Kubernetes тоже оттуда).
В результате лабораторной работы предстоит:
- Запушить код вашего проекта в GitLab.
- Настроить GitLab CI/CD.
- На основе кода вашего проекта подготовить образ Docker.
- Создать
configmap,service,deploymentиingressв Kubernetes. - Настроить CI/CD для автоматического обновления.
Отчет
Отчет в формате docx. Обязательное содержимое отчета:
- Фамилия и инициалы студента, номер группы, номер варианта;
- План и задачи лабораторной работы;
- Краткое описание хода выполнения работы;
- Скриншоты результатов заданий.
Задание
-
Запушить ваш проект в собственный репозиторий на hub.mos.ru (в качестве альтернативы вы можете воспользоваться gitlab.com).
-
Включить CI/CD для вашего проекта.
-
Подключить Gitlab Runner к вашему проекту.
Чтобы протестировать работу CI/CD вы можете создать тестовый
.gitlab-ci.yml:job:
script:
- echo test -
Упакуйте ваш проект в контейнер Docker. Для этого создайте
Dockerfileи опишите подготовку вашего образа.Протестируйте сборку вашего проекта:
docker build -t myimage_name:mytag ... -
Сформируйте Pipeline CI/CD, состоящий из 3 стадий:
build,upload,deploy. В качестве места для деплоя можно выбрать свою собственную виртуальную машину. На этой виртуальной машине можно развернуть свой Gitlab Runner в конфигурацииshell. В качестве примера Pipeline вы можете использовать CI/CD, который используется для публикации данного руководства. -
В стадии
buildсоздайте задачуbuild, в которой собирается образ и присваивается ему тэг по хешу его коммита:docker build -t myimage_name:$CI_COMMIT_SHORT_SHA ...script:
- docker build -t myimage_name:$CI_COMMIT_SHORT_SHA ... -
В стадии
uploadсоздайте задачуuploadв которой загружаем наш образ вkind:script:
- kind load docker-image myapp:${CI_COMMIT_SHORT_SHA} -
В стадии
deployсоздайте задачуdeploy:environment:
name: production
script:
- kubectl get podsДеплой долж ен будет упасть, потому что не сообщили параметры подключения к кластеру. Откройте настройки проекта
Settigns -> CI/CD -> Variablesи создайте переменную с именемKUBECONFIGтипаFile, вenvironment scopeдолжен был появиться нашproduction, и включитьprotected variable. Скопируйте значение вашего конфига из/root/.kube/configи вставьте его в значение переменной.Перезапустите Pipeline. CI/CD должен пройти и в логах увидеть список подов.
-
Создайте папку
manifests, в ней либо одинmanifest.yml, либо несколькоservice.yml,deployment.yml,ingress.yml. Опишите манифесты дляservice,deploymentиingress. Также в корне проекта создайте папкуetcилиconfigsи скопируйте туда все конфиги приложения. -
Создайте
configmap:kubectl create configmap myapp-conf --from-file=< etc или config>/ --namespace=default -o yaml --dry-run=client | kubectl apply -f - -
Задеплойте вручную первоначальные манифесты:
kubectl apply -f manifests/ -
Обновите задачу
deploy, чтобы обновлять конфиги и образ автоматически:script:
- kubectl create configmap myapp-conf --from-file=< etc или config>/ --namespace=default -o yaml --dry-run=client | kubectl apply -f -
- kubectl set image deployment/my-deployment mycontainer=myapp:${CI_COMMIT_SHORT_SHA} -
Настройте CI/CD, чтобы задачи
build,upload,deployзапускались только по коммиту в мастер.infoВыполнение по данный пункт достаточно для сдачи работы. Далее пункты выполняются на свое усмотрение.
-
Настройте запуск тестов по открытому запросу на слияние.
-
При желании и свободном времени, можно изучить пакетный менеджер Helm и заменить задачу
deployнаhelm update.