Skip to content

Hellcrazyrabbit Infra repository

License

Notifications You must be signed in to change notification settings

otus-devops-2019-05/Hellcrazyrabbit_infra

Repository files navigation

Hellcrazyrabbit_infra

Домашнее задание Знакомство с облачной инфраструктурой GCP

  • Создание инфраструктуры и удаленное подключение
    • Самостоятельное задание
  • Создание VPN-сервера
    • Дополнительное задание

Самостоятельное задание

Для удобства сквозного подключения к внутреннему хосту через bastion следует использовать ~/.ssh/config настройки

Host bastion
        ForwardAgent yes
        Hostname host_ip
        User user_name
        IdentityFile ~/.ssh/vendikato

Host sih
        Hostname host_ip
        User user_name
        ProxyCommand ssh user_name@host_ip nc %h %p 2> /dev/null

Описание использования и доп. информацию можно подчерпнуть отсюда

Дополнительное задание

К серверу привязан SSL сертификат сгенерированный автоматически ботом Let`s encrypt Инструкции для настройки Так же был выделен домен 3го уровня и направлен DNS хостингом на IP VPN-сервера

Конфигурация VPN-сервера для проверки

bastion_IP = 35.232.76.112

someinternalhost_IP = 10.128.0.3

hostname - vpn
someinternalhost alias - sih

Домашнее задание Основные сервисы GCP

  • Настроить новый инстанс через GUI, развернуть приложение
  • Создать скрипты установок Ruby, MongoDB и развертывания приложения

Проверка ДЗ

testapp_IP = 34.83.160.205

testapp_port = 9292

Самостоятельная работа

  • Написать команду создания инстанса с использованием startup_script
gcloud compute instances create reddit-app \ 
--zone=us-west1-b \ 
--boot-disk-size=10GB \ 
--image-family ubuntu-1604-lts \ 
--image-project=ubuntu-os-cloud \ 
--machine-type=g1-small \ 
--tags puma-server \ 
--metadata startup-script='wget -O - https://gist.githubusercontent.com/Hellcrazyrabbit/50bea9ae44a994dbbea5cebd783f8e71/raw/88734dee34947de6d9cf4f1975e3e6e6daaaa66d/startupscript.sh | bash' \
--restart-on-failure
  • Написать команду создания правила приложения
gcloud compute firewall-rules create default-puma-server \ 
--direction=INGRESS \ 
--priority=1000 \ 
--network=default \ 
--action=ALLOW \ 
--rules=tcp:9292 \ 
--source-ranges=0.0.0.0/0 \
--target-tags=puma-server

Домашнее задание Сборка образа VM припомощи Packer

  • Установка Packer и сборка образа VM для GCP

Установка происходит путем скачивания дистра с сайта После распаковки нежно добавить приложение в PATH

ln -s /path/to/packer packer

Сборка VM происходит по инструкции задания

Самостоятельное задание

  • Создать файл переменных для сборки образа

Задание со *

  • "Запечь" полный образ VM, старт приложения производить через systemd. Создать shell-скрипт запуска VM для gcloud.

  • Реализовано путем запуска bash скрипта с EOF в сервис файл.

  • Shell-скрипт сохранен в config-scripts.

Домашнее задание Практика IaC с использованием Terraform

  • Установка Terraform и создание VM согласно описания

Установка проиcходит аналогично установке Packer.

Самостоятельное задание

  • Задать переменную для приватного ключа provisioner. Значение default зоны ресурса app. Отформатировать tf файлы. Создать examle переменных

Задание со *

  • Добавить ssh ключи пользователей в метаданные проекта

1й вариант

resource "google_compute_project_metadata" "ssh-keys" {
    metadata {
    ssh-keys = <<EOF
appuser:${file(var.public_key_path)}
appuser1:${file(var.public_key_path)}
appuser2:${file(var.public_key_path)}
EOF
  }
}

удаляет все метаданные проекта и устанавливает указанные, можно импортировать имеющиеся

terraform import google_compute_project_metadata.ssh-keys my-project-id

2й вариант

resource "google_compute_project_metadata_item" "appuser" {
  key = "appuser"
  value = "${file(var.public_key_path)}"
}

Создает отдельный экземпляр метаданных для проекта мануал

  • Создать балансировщик

Домашнее задание Принципы организации инфраструктурного кода и работа над инфраструктурой в команде на примере Terraform.

  • Разбить конфигурацию Terraform на модули

  • Создать Stage & Prod

Самостоятельные задания

  • Удалить ненужные файлы

  • Параметризировать конфиги модулей

  • Отформатировать файлы

  • Создать модуль storage-bucket

Примечания к выполненному

Для выполнения заданий и тестов может потребоваться экспорт аккаунта подключения к GCP

export GOOGLE_APPLICATION_CREDENTIALS="[acc_file_name].json"

Все переменные имеют значение по умолчанию.

Задание со *

  • Настроить GCS в качестве бэкенда
создано 2 бакета для stage & prod

Домашнее задание Управление конфигурацией.

  • Установить Ansible и настроить конфигурацию, инвентори, плейбук
  • Прогнать плэйбук

После выполнения плэйбука, Ansible уведомляет об отсутствии изменений на хосте

Причиной тому выполненная команда клонирования репозитория через модуль команды
ansible app -m git -a 'repo=https://github.com/express42/reddit.git dest=/home/appuser/reddit' 

Это подтверждает идемпотентность Ansible. Удаляем директорию с репой, запускаем плэйбук снова и получаем уже результат со статусом "changed"

Задание со *

-[x] Создан простой скрипт для загрузки инвентори динамически.

Выбран самый простой способ скриптового запроса к файлу, т.к. готовые решения намного больше охватывают этот вопрос,
изобретать велосипед - трата времени.
Настройки изменены и по дефолту вызывается как раз инвентори из скрипта.

Домашнее задание Управление настройками хостов и деплой приложения при помощи Ansible.

  • Создать единый плейбук настройки dbserver appserver и деплоя приложения
  • Изменить провижининг в Packer на ansible плайбуки

Проверка результата

  • Хост находится по адресу http://34.66.255.23:9292/
  • Билд производится из корня репы
При использовании Ubuntu 18 требуется указать в провижинере "user": "appuser"

Задание со *

  • Выбрать оптимальное решение Dynamic Inventory и прописать в конфиге и плейбуках
 Был выбран модуль gcp_compute
 Добавил yml файл инвентори в конфиги, расположение: ~/ansible/inv/inventory.gcp.yml

Домашнее задание Написание Ansible ролей для управления конфигурацией сервисов и настройками хостов.

  • Сконфигурировать роли и организовать файлы
  • Настроить окружения
  • Добавить Community роли
  • Настроить Ansible Vault

Самостоятельное задание

  • Настроить приложение на доступ с 80 порта

Проверка результатов

Задание со *

  • Использовать Dynamic Inventory
Использование того же модуля gcp_compute

Задание с **

  • [] TODO

Домашнее задание. Доработка имеющихся ролей локально с использование Vagrant. Тестирование конфигурации при помощи Molecule и TestInfra.

  • Локальная разработка при помощи Vagrant

  • Тестирование ролей при помощи Molecule и Testinfra

  • Переключение пакера на использование ролей

Самостоятельные задания

  • дописать тестирование БД на прослушивание порта
Использовался метод socket().is_listening
  • Перенастройка пакера на использование ролей, доступность ролей определяем дополнительными переменными ансибла

Нюансы Vagrant

Нужно тщательно проверять возможность использования NestedVirtualization на запускаемом хосте. При использовании драйвера Virtualbox для Vagranta лучше запускать проект на WMWare

About

Hellcrazyrabbit Infra repository

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published