mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
gw: add graduate work task description
This commit is contained in:
13
readme.md
13
readme.md
@@ -74,3 +74,16 @@
|
|||||||
* [14.5. SecurityContext, NetworkPolicies](/src/homework/14-kubernetes-security/14.5)
|
* [14.5. SecurityContext, NetworkPolicies](/src/homework/14-kubernetes-security/14.5)
|
||||||
* [15.1. Организация сети](/src/homework/15-cloud-providers/15.1)
|
* [15.1. Организация сети](/src/homework/15-cloud-providers/15.1)
|
||||||
* [15.2. Вычислительные мощности. Балансировщики нагрузки](/src/homework/15-cloud-providers/15.2)
|
* [15.2. Вычислительные мощности. Балансировщики нагрузки](/src/homework/15-cloud-providers/15.2)
|
||||||
|
* [15.3. Безопасность в облачных провайдерах](/src/homework/15-cloud-providers/15.3)
|
||||||
|
|
||||||
|
## Graduate work
|
||||||
|
|
||||||
|
[**Дипломная работа**](/src/graduate_work)
|
||||||
|
|
||||||
|
## Related repositories
|
||||||
|
|
||||||
|
* [Dannecron/netology-devops-ansible-lighthouse](https://github.com/Dannecron/netology-devops-ansible-lighthouse)
|
||||||
|
* [Dannecron/netology-devops-ansible-yandex-cloud-cvl](https://github.com/Dannecron/netology-devops-ansible-yandex-cloud-cvl)
|
||||||
|
* [Dannecron/netology-devops-ansible-vector](https://github.com/Dannecron/netology-devops-ansible-vector)
|
||||||
|
* [Dannecron/netology-devops-teamcity-example](https://github.com/Dannecron/netology-devops-teamcity-example)
|
||||||
|
* [Dannecron/netology-devops-gitlab](https://github.com/Dannecron/netology-devops-gitlab)
|
||||||
|
|||||||
45
src/graduate_work/readme.md
Normal file
45
src/graduate_work/readme.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
## Дипломная работа
|
||||||
|
|
||||||
|
Выполнение дипломной работы курса netology DevOps инженер. Оригинал задания доступен по [ссылке](https://github.com/netology-code/devops-diplom-yandexcloud/blob/main/README.md).
|
||||||
|
|
||||||
|
### Создание облачной инфраструктуры
|
||||||
|
|
||||||
|
[Задание](./tasks.md#создание-облачной-инфраструктуры).
|
||||||
|
|
||||||
|
/// todo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Создание Kubernetes кластера
|
||||||
|
|
||||||
|
[Задание](./tasks.md#создание-Kubernetes-кластера).
|
||||||
|
|
||||||
|
/// todo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Создание тестового приложения
|
||||||
|
|
||||||
|
[Задание](./tasks.md#создание-тестового-приложения).
|
||||||
|
|
||||||
|
[Репозиторий тестового приложения](https://github.com/Dannecron/parcel-example-neko)
|
||||||
|
|
||||||
|
/// todo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Подготовка cистемы мониторинга и деплой приложения
|
||||||
|
|
||||||
|
[Задание](./tasks.md#подготовка-cистемы-мониторинга-и-деплой-приложения).
|
||||||
|
|
||||||
|
/// todo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Установка и настройка CI/CD
|
||||||
|
|
||||||
|
[Задание](./tasks.md#установка-и-настройка-CI/CD).
|
||||||
|
|
||||||
|
/// todo
|
||||||
|
|
||||||
|
---
|
||||||
136
src/graduate_work/tasks.md
Normal file
136
src/graduate_work/tasks.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
## Цели
|
||||||
|
|
||||||
|
* [Цели](#цели)
|
||||||
|
* [Этапы выполнения](#этапы-выполнения)
|
||||||
|
* [Создание облачной инфраструктуры](#создание-облачной-инфраструктуры)
|
||||||
|
* [Создание Kubernetes кластера](#создание-Kubernetes-кластера)
|
||||||
|
* [Создание тестового приложения](#создание-тестового-приложения)
|
||||||
|
* [Подготовка cистемы мониторинга и деплой приложения](#подготовка-cистемы-мониторинга-и-деплой-приложения)
|
||||||
|
* [Установка и настройка CI/CD](#установка-и-настройка-CI/CD)
|
||||||
|
* [Что необходимо для сдачи задания?](#что-необходимо-для-сдачи-задания)
|
||||||
|
|
||||||
|
## Этапы выполнения
|
||||||
|
|
||||||
|
### Создание облачной инфраструктуры
|
||||||
|
|
||||||
|
Для начала необходимо подготовить облачную инфраструктуру в ЯО при помощи [Terraform](https://www.terraform.io/).
|
||||||
|
|
||||||
|
Особенности выполнения:
|
||||||
|
|
||||||
|
- Бюджет купона ограничен, что следует иметь в виду при проектировании инфраструктуры и использовании ресурсов;
|
||||||
|
- Следует использовать последнюю стабильную версию [Terraform](https://www.terraform.io/).
|
||||||
|
|
||||||
|
Предварительная подготовка к установке и запуску Kubernetes кластера.
|
||||||
|
|
||||||
|
1. Создайте сервисный аккаунт, который будет в дальнейшем использоваться Terraform для работы с инфраструктурой с необходимыми и достаточными правами. Не стоит использовать права суперпользователя
|
||||||
|
2. Подготовьте [backend](https://www.terraform.io/docs/language/settings/backends/index.html) для Terraform:
|
||||||
|
а. Рекомендуемый вариант: [Terraform Cloud](https://app.terraform.io/)
|
||||||
|
б. Альтернативный вариант: S3 bucket в созданном ЯО аккаунте
|
||||||
|
3. Настройте [workspaces](https://www.terraform.io/docs/language/state/workspaces.html)
|
||||||
|
а. Рекомендуемый вариант: создайте два workspace: *stage* и *prod*. В случае выбора этого варианта все последующие шаги должны учитывать факт существования нескольких workspace.
|
||||||
|
б. Альтернативный вариант: используйте один workspace, назвав его *stage*. Пожалуйста, не используйте workspace, создаваемый Terraform-ом по-умолчанию (*default*).
|
||||||
|
4. Создайте VPC с подсетями в разных зонах доступности.
|
||||||
|
5. Убедитесь, что теперь вы можете выполнить команды `terraform destroy` и `terraform apply` без дополнительных ручных действий.
|
||||||
|
6. В случае использования [Terraform Cloud](https://app.terraform.io/) в качестве [backend](https://www.terraform.io/docs/language/settings/backends/index.html) убедитесь, что применение изменений успешно проходит, используя web-интерфейс Terraform cloud.
|
||||||
|
|
||||||
|
Ожидаемые результаты:
|
||||||
|
|
||||||
|
1. Terraform сконфигурирован и создание инфраструктуры посредством Terraform возможно без дополнительных ручных действий.
|
||||||
|
2. Полученная конфигурация инфраструктуры является предварительной, поэтому в ходе дальнейшего выполнения задания возможны изменения.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Создание Kubernetes кластера
|
||||||
|
|
||||||
|
На этом этапе необходимо создать [Kubernetes](https://kubernetes.io/ru/docs/concepts/overview/what-is-kubernetes/) кластер на базе предварительно созданной инфраструктуры. Требуется обеспечить доступ к ресурсам из Интернета.
|
||||||
|
|
||||||
|
Это можно сделать двумя способами:
|
||||||
|
|
||||||
|
1. Рекомендуемый вариант: самостоятельная установка Kubernetes кластера.
|
||||||
|
а. При помощи Terraform подготовить как минимум 3 виртуальных машины Compute Cloud для создания Kubernetes-кластера. Тип виртуальной машины следует выбрать самостоятельно с учётом требовании к производительности и стоимости. Если в дальнейшем поймете, что необходимо сменить тип инстанса, используйте Terraform для внесения изменений.
|
||||||
|
б. Подготовить [ansible](https://www.ansible.com/) конфигурации, можно воспользоваться, например [Kubespray](https://kubernetes.io/docs/setup/production-environment/tools/kubespray/)
|
||||||
|
в. Задеплоить Kubernetes на подготовленные ранее инстансы, в случае нехватки каких-либо ресурсов вы всегда можете создать их при помощи Terraform.
|
||||||
|
2. Альтернативный вариант: воспользуйтесь сервисом [Yandex Managed Service for Kubernetes](https://cloud.yandex.ru/services/managed-kubernetes)
|
||||||
|
а. С помощью terraform resource для [kubernetes](https://registry.terraform.io/providers/yandex-cloud/yandex/latest/docs/resources/kubernetes_cluster) создать региональный мастер kubernetes с размещением нод в разных 3 подсетях
|
||||||
|
б. С помощью terraform resource для [kubernetes node group](https://registry.terraform.io/providers/yandex-cloud/yandex/latest/docs/resources/kubernetes_node_group)
|
||||||
|
|
||||||
|
Ожидаемый результат:
|
||||||
|
|
||||||
|
1. Работоспособный Kubernetes кластер.
|
||||||
|
2. В файле `~/.kube/config` находятся данные для доступа к кластеру.
|
||||||
|
3. Команда `kubectl get pods --all-namespaces` отрабатывает без ошибок.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Создание тестового приложения
|
||||||
|
|
||||||
|
Для перехода к следующему этапу необходимо подготовить тестовое приложение, эмулирующее основное приложение разрабатываемое вашей компанией.
|
||||||
|
|
||||||
|
Способ подготовки:
|
||||||
|
|
||||||
|
1. Рекомендуемый вариант:
|
||||||
|
а. Создайте отдельный git репозиторий с простым nginx конфигом, который будет отдавать статические данные.
|
||||||
|
б. Подготовьте Dockerfile для создания образа приложения.
|
||||||
|
2. Альтернативный вариант:
|
||||||
|
а. Используйте любой другой код, главное, чтобы был самостоятельно создан Dockerfile.
|
||||||
|
|
||||||
|
Ожидаемый результат:
|
||||||
|
|
||||||
|
1. Git репозиторий с тестовым приложением и Dockerfile.
|
||||||
|
2. Регистр с собранным docker image. В качестве регистра может быть DockerHub или [Yandex Container Registry](https://cloud.yandex.ru/services/container-registry), созданный также с помощью terraform.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Подготовка cистемы мониторинга и деплой приложения
|
||||||
|
|
||||||
|
Уже должны быть готовы конфигурации для автоматического создания облачной инфраструктуры и поднятия Kubernetes кластера.
|
||||||
|
Теперь необходимо подготовить конфигурационные файлы для настройки нашего Kubernetes кластера.
|
||||||
|
|
||||||
|
Цель:
|
||||||
|
1. Задеплоить в кластер [prometheus](https://prometheus.io/), [grafana](https://grafana.com/), [alertmanager](https://github.com/prometheus/alertmanager), [экспортер](https://github.com/prometheus/node_exporter) основных метрик Kubernetes.
|
||||||
|
2. Задеплоить тестовое приложение, например, [nginx](https://www.nginx.com/) сервер отдающий статическую страницу.
|
||||||
|
|
||||||
|
Рекомендуемый способ выполнения:
|
||||||
|
1. Воспользовать пакетом [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus), который уже включает в себя [Kubernetes оператор](https://operatorhub.io/) для [grafana](https://grafana.com/), [prometheus](https://prometheus.io/), [alertmanager](https://github.com/prometheus/alertmanager) и [node_exporter](https://github.com/prometheus/node_exporter). При желании можете собрать все эти приложения отдельно.
|
||||||
|
2. Для организации конфигурации использовать [qbec](https://qbec.io/), основанный на [jsonnet](https://jsonnet.org/). Обратите внимание на имеющиеся функции для интеграции helm конфигов и [helm charts](https://helm.sh/)
|
||||||
|
3. Если на первом этапе вы не воспользовались [Terraform Cloud](https://app.terraform.io/), то задеплойте в кластер [atlantis](https://www.runatlantis.io/) для отслеживания изменений инфраструктуры.
|
||||||
|
|
||||||
|
Альтернативный вариант:
|
||||||
|
1. Для организации конфигурации можно использовать [helm charts](https://helm.sh/)
|
||||||
|
|
||||||
|
Ожидаемый результат:
|
||||||
|
1. Git репозиторий с конфигурационными файлами для настройки Kubernetes.
|
||||||
|
2. Http доступ к web интерфейсу grafana.
|
||||||
|
3. Дашборды в grafana отображающие состояние Kubernetes кластера.
|
||||||
|
4. Http доступ к тестовому приложению.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Установка и настройка CI/CD
|
||||||
|
|
||||||
|
Осталось настроить ci/cd систему для автоматической сборки docker image и деплоя приложения при изменении кода.
|
||||||
|
|
||||||
|
Цель:
|
||||||
|
|
||||||
|
1. Автоматическая сборка docker образа при коммите в репозиторий с тестовым приложением.
|
||||||
|
2. Автоматический деплой нового docker образа.
|
||||||
|
|
||||||
|
Можно использовать [teamcity](https://www.jetbrains.com/ru-ru/teamcity/), [jenkins](https://www.jenkins.io/) либо [gitlab ci](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
|
||||||
|
|
||||||
|
Ожидаемый результат:
|
||||||
|
|
||||||
|
1. Интерфейс ci/cd сервиса доступен по http.
|
||||||
|
2. При любом коммите в репозиторие с тестовым приложением происходит сборка и отправка в регистр Docker образа.
|
||||||
|
3. При создании тега (например, v1.0.0) происходит сборка и отправка с соответствующим label в регистр, а также деплой соответствующего Docker образа в кластер Kubernetes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что необходимо для сдачи задания?
|
||||||
|
|
||||||
|
1. Репозиторий с конфигурационными файлами Terraform и готовность продемонстрировать создание всех ресурсов с нуля.
|
||||||
|
2. Пример pull request с комментариями созданными atlantis'ом или снимки экрана из Terraform Cloud.
|
||||||
|
3. Репозиторий с конфигурацией ansible, если был выбран способ создания Kubernetes кластера при помощи ansible.
|
||||||
|
4. Репозиторий с Dockerfile тестового приложения и ссылка на собранный docker image.
|
||||||
|
5. Репозиторий с конфигурацией Kubernetes кластера.
|
||||||
|
6. Ссылка на тестовое приложение и веб интерфейс Grafana с данными доступа.
|
||||||
|
7. Все репозитории рекомендуется хранить на одном ресурсе (github, gitlab)
|
||||||
Reference in New Issue
Block a user