diff --git a/readme.md b/readme.md index 05519ec..4bd1b61 100644 --- a/readme.md +++ b/readme.md @@ -30,3 +30,4 @@ * [6.4. PostgreSQL](/src/homework/06-database/6.4) * [6.5. Elasticsearch](/src/homework/06-database/6.5) * [6.6. Troubleshooting](/src/homework/06-database/6.6) +* [7.1. Инфраструктура как код](/src/homework/07-terraform/7.1) diff --git a/src/homework/07-terraform/7.1/readme.md b/src/homework/07-terraform/7.1/readme.md new file mode 100644 index 0000000..47c37ed --- /dev/null +++ b/src/homework/07-terraform/7.1/readme.md @@ -0,0 +1,111 @@ +Выполнение [домашнего задания](https://github.com/netology-code/virt-homeworks/blob/master/07-terraform-01-intro/README.md) +по теме "7.1. Инфраструктура как код". + +## Q/A + +### Задание 1 + +> #### Легенда +> +> Через час совещание на котором менеджер расскажет о новом проекте. Начать работу над которым надо будет уже сегодня. +> На данный момент известно, что это будет сервис, который ваша компания будет предоставлять внешним заказчикам. +> Первое время, скорее всего, будет один внешний клиент, со временем внешних клиентов станет больше. +> +> Так же по разговорам в компании есть вероятность, что техническое задание еще не четкое, что приведет к большому +> количеству небольших релизов, тестирований интеграций, откатов, доработок, то есть скучно не будет. +> +> Вам, как девопс инженеру, будет необходимо принять решение об инструментах для организации инфраструктуры. +> На данный момент в вашей компании уже используются следующие инструменты: +> - остатки Сloud Formation, +> - некоторые образы сделаны при помощи Packer, +> - год назад начали активно использовать Terraform, +> - разработчики привыкли использовать Docker, +> - уже есть большая база Kubernetes конфигураций, +> - для автоматизации процессов используется Teamcity, +> - также есть совсем немного Ansible скриптов, +> - и ряд bash скриптов для упрощения рутинных задач. +> +> Для этого в рамках совещания надо будет выяснить подробности о проекте, что бы в итоге определиться с инструментами: +> +> 1. Какой тип инфраструктуры будем использовать для этого проекта: изменяемый или не изменяемый? +> 1. Будет ли центральный сервер для управления инфраструктурой? +> 1. Будут ли агенты на серверах? +> 1. Будут ли использованы средства для управления конфигурацией или инициализации ресурсов? +> +> В связи с тем, что проект стартует уже сегодня, в рамках совещания надо будет определиться со всеми этими вопросами. +> +> #### В результате задачи необходимо +> +> 1. Ответить на четыре вопроса представленных в разделе "Легенда". +> 1. Какие инструменты из уже используемых вы хотели бы использовать для нового проекта? +> 1. Хотите ли рассмотреть возможность внедрения новых инструментов для этого проекта? +> +> Если для ответа на эти вопросы недостаточно информации, то напишите какие моменты уточните на совещании. + +* Ответить на четыре вопроса представленных в разделе "Легенда". + 1. Какой тип инфраструктуры будем использовать для этого проекта: изменяемый или не изменяемый? + + Для ответа на данный вопрос недостаточно данных о требованиях к новому проекту со стороны безопасности. + Если на совещании можно это выяснить, то будет два варианта: если требования к безопасности выставляются в рамках расширенных требований по типу `PCI DSS`, + то будет использоваться не изменяемый тип инфраструктуры, иначе - изменяемый. + + 2. Будет ли центральный сервер для управления инфраструктурой? + + Так как на текущий момент в инфраструктуре компании не используются решения на базе центрального сервера + для управления инфраструктурой, то внедрять данное решение смысла нет. Ответ: нет. + + 3. Будут ли агенты на серверах? + + Ответ вытекает из предыдущего вопроса. Если в новом проекте не используется центральный сервер управления, + то и в использовании агентов нет необходимости. Ответ: нет. + + 4. Будут ли использованы средства для управления конфигурацией или инициализации ресурсов? + + Да, средства будут использованы, так как планируется расширение и необходимо будет разворачивать инфраструктуру + для каждого нового внешнего клиента. Плюс, скорее всего, будет необходимость реплицирования + и горизонтального расширения сервисов в рамках существующей инфраструктуры. + + +* Какие инструменты из уже используемых вы хотели бы использовать для нового проекта? + + Точно стоит использовать `terraform` как средство инициализации ресурсов в совокупности с `ansible`. + Для стандартизации образов виртуальных машин стоит использовать `packer`. + Так как в разработке принято использовать образы `docker`, то для построения инфраструктуры можно задуматься + над использованием `kubernetes`. + + В данном случае стоит рассмотреть переход от bash-скриптов к плагинам `ansible` для автоматизации. + Либо перенос скриптов на другой, более поддерживаемый и принятый в компании скриптовый язык программирования. + +* Хотите ли рассмотреть возможность внедрения новых инструментов для этого проекта? + + В текущем стеке собраны все инструменты, которые представляют собой best-practice в построении инфраструктуры. + Дополнительно, увеличение количества используемых инструментов ведёт к "распылению" знаний, а значит невозможности + проведения более глубокой оптимизации процессов для достижения главной цели - уменьшения TTM. + +### Задание 2 + +> Официальный сайт: https://www.terraform.io/ +> +> Установите терраформ при помощи менеджера пакетов используемого в вашей операционной системе. +> В виде результата этой задачи приложите вывод команды `terraform --version`. + +```shell +terraform --version +Terraform v1.2.3 +on linux_amd64 +``` + +## Задача 3. Поддержка легаси кода. + +> В какой-то момент вы обновили терраформ до новой версии, например с 0.12 до 0.13. +> А код одного из проектов настолько устарел, что не может работать с версией 0.13. +> В связи с этим необходимо сделать так, чтобы вы могли одновременно использовать последнюю версию терраформа установленную при помощи +> штатного менеджера пакетов и устаревшую версию 0.12. +> +> В виде результата этой задачи приложите вывод `--version` двух версий терраформа доступных на вашем компьютере +> или виртуальной машине. + +Для примера были взяты актуальная версия `1.2.3` и последняя доступная на официальном сайте версия из линейки `1.0.x`: `1.0.11`. +Другие версии можно собрать из [source codes](https://github.com/hashicorp/terraform). + +![terraform_versions](./terraform_versions.png) diff --git a/src/homework/07-terraform/7.1/terraform_versions.png b/src/homework/07-terraform/7.1/terraform_versions.png new file mode 100644 index 0000000..7c8e083 Binary files /dev/null and b/src/homework/07-terraform/7.1/terraform_versions.png differ