Итоговый проект
О работе
Для выполнения лабораторной работы понадобятся:
- какой-нибудь ваш проект (например, курсова я по сетям, заготовки диплома или что-нибудь ещё);
- виртуальная машина с 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.
- 
В стадии 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запускались только по коммиту в мастер.к сведениюВыполнение по данный пункт достаточно для сдачи работы. Далее пункты выполняются на свое усмотрение. 
- 
Настройте запуск тестов по открытому запросу на слияние. 
- 
При желании и свободном времени, можно изучить пакетный менеджер Helm и заменить задачу deployнаhelm update.