- Репозиторий с конфигурационными файлами Terraform и готовность >продемонстрировать создание всех ресурсов с нуля.
- Пример pull request с комментариями созданными atlantis'ом или снимки >экрана из Terraform Cloud.
- Репозиторий с конфигурацией ansible, если был выбран способ создания >Kubernetes кластера при помощи ansible.
- Репозиторий с Dockerfile тестового приложения и ссылка на собранный docker image.
- Репозиторий с конфигурацией Kubernetes кластера.
- Ссылка на тестовое приложение и веб интерфейс Grafana с данными доступа.
- Подготовить облачную инфраструктуру на базе облачного провайдера Яндекс.>Облако.
- Запустить и сконфигурировать Kubernetes кластер.
- Установить и настроить систему мониторинга.
- Настроить и автоматизировать сборку тестового приложения с использованием >Docker-контейнеров.
- Настроить CI для автоматической сборки и тестирования.
- Настроить CD для автоматического развёртывания приложения.
Для начала необходимо подготовить облачную инфраструктуру в ЯО при помощи >Terraform.
Особенности выполнения:
- Бюджет купона ограничен, что следует иметь в виду при проектировании >инфраструктуры и использовании ресурсов;
- Следует использовать последнюю стабильную версию Terraform.
Предварительная подготовка к установке и запуску Kubernetes кластера.
- Создайте сервисный аккаунт, который будет в дальнейшем использоваться >Terraform для работы с инфраструктурой с необходимыми и достаточными правами. >Не стоит использовать права суперпользователя
- Подготовьте backend для Terraform:
а. Рекомендуемый вариант: Terraform Cloud
б. Альтернативный вариант: S3 bucket в созданном ЯО аккаунте- Настройте workspaces
а. Рекомендуемый вариант: создайте два workspace: stage и prod. В >случае выбора этого варианта все последующие шаги должны учитывать факт >существования нескольких workspace.
б. Альтернативный вариант: используйте один workspace, назвав его stage. >Пожалуйста, не используйте workspace, создаваемый Terraform-ом по-умолчанию >(default).- Создайте VPC с подсетями в разных зонах доступности.
- Убедитесь, что теперь вы можете выполнить команды
terraform destroy
и >terraform apply
без дополнительных ручных действий.- В случае использования Terraform Cloud в >качестве backend убедитесь, что применение изменений успешно проходит, используя >web-интерфейс Terraform cloud.
Ожидаемые результаты:
- Terraform сконфигурирован и создание инфраструктуры посредством Terraform >возможно без дополнительных ручных действий.
- Полученная конфигурация инфраструктуры является предварительной, поэтому в >ходе дальнейшего выполнения задания возможны изменения.
На этом этапе необходимо создать Kubernetes кластер на базе предварительно >созданной инфраструктуры. Требуется обеспечить доступ к ресурсам из >Интернета.
Это можно сделать двумя способами:
- Рекомендуемый вариант: самостоятельная установка Kubernetes кластера.
а. При помощи Terraform подготовить как минимум 3 виртуальных машины >Compute Cloud для создания Kubernetes-кластера. Тип виртуальной машины >следует выбрать самостоятельно с учётом требовании к производительности и >стоимости. Если в дальнейшем поймете, что необходимо сменить тип инстанса, >используйте Terraform для внесения изменений.
б. Подготовить ansible конфигурации, можно >воспользоваться, например Kubespray
в. Задеплоить Kubernetes на подготовленные ранее инстансы, в случае >нехватки каких-либо ресурсов вы всегда можете создать их при помощи >Terraform.- Альтернативный вариант: воспользуйтесь сервисом Yandex Managed Service >for Kubernetes
а. С помощью terraform resource для kubernetes >создать региональный мастер kubernetes с размещением нод в разных 3 >подсетях
б. С помощью terraform resource для kubernetes node groupОжидаемый результат:
- Работоспособный Kubernetes кластер.
- В файле
~/.kube/config
находятся данные для доступа к кластеру.- Команда
kubectl get pods --all-namespaces
отрабатывает без ошибок.
Для перехода к следующему этапу необходимо подготовить тестовое приложение, >эмулирующее основное приложение разрабатываемое вашей компанией.
Способ подготовки:
- Рекомендуемый вариант:
а. Создайте отдельный git репозиторий с простым nginx конфигом, который >будет отдавать статические данные.
б. Подготовьте Dockerfile для создания образа приложения.- Альтернативный вариант:
а. Используйте любой другой код, главное, чтобы был самостоятельно создан >Dockerfile.Ожидаемый результат:
- Git репозиторий с тестовым приложением и Dockerfile.
- Регистр с собранным docker image. В качестве регистра может быть DockerHub >или Yandex Container Registry, созданный также с помощью terraform.
Уже должны быть готовы конфигурации для автоматического создания облачной >инфраструктуры и поднятия Kubernetes кластера.
Теперь необходимо подготовить конфигурационные файлы для настройки нашего >Kubernetes кластера.Цель:
- Задеплоить в кластер prometheus, grafana, alertmanager, >экспортер основных метрик >Kubernetes.
- Задеплоить тестовое приложение, например, nginx >сервер отдающий статическую страницу.
Рекомендуемый способ выполнения:
- Воспользовать пакетом kube-prometheus, который уже включает в себя Kubernetes >оператор для grafana, >prometheus, alertmanager и node_exporter. При желании можете собрать все эти приложения отдельно.
- Для организации конфигурации использовать qbec, >основанный на jsonnet. Обратите внимание на имеющиеся >функции для интеграции helm конфигов и helm charts
- Если на первом этапе вы не воспользовались Terraform Cloud, то задеплойте в кластер atlantis для отслеживания изменений инфраструктуры.
Альтернативный вариант:
- Для организации конфигурации можно использовать helm charts
Ожидаемый результат:
- Git репозиторий с конфигурационными файлами для настройки Kubernetes.
- Http доступ к web интерфейсу grafana.
- Дашборды в grafana отображающие состояние Kubernetes кластера.
- Http доступ к тестовому приложению.
Осталось настроить ci/cd систему для автоматической сборки docker image и >деплоя приложения при изменении кода.
Цель:
- Автоматическая сборка docker образа при коммите в репозиторий с тестовым >приложением.
- Автоматический деплой нового docker образа.
Можно использовать teamcity, >jenkins либо gitlab ci
Ожидаемый результат:
- Интерфейс ci/cd сервиса доступен по http.
- При любом коммите в репозиторие с тестовым приложением происходит сборка и >отправка в регистр Docker образа.
- При создании тега (например, v1.0.0) происходит сборка и отправка с >соответствующим label в регистр, а также деплой соответствующего Docker образа >в кластер Kubernetes.