Этот репозиторий содержит демонстрационную сценарий для статьи Развертывание веб-приложения в отказоустойчивой конфигурации в Yandex Cloud. В статье рассматривается вопрос создания отказоустойчивой инфраструктуры и развертывания в ней простого приложения todo ('Заметки') в отказоустойчивой конфигурации.
Все операции по развертыванию инфраструктуры и приложения выполняются с помощью манифестов terraform и helm чартов.
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Business Source License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Для развертывания инфраструктуры необходимы следующие квоты:
Application Load Balancer:
- Количество балансировщиков: 1
- Количество HTTP-роутеров: 2
- Количество групп бэкендов: 2
- Количество целевых групп: 2
Certificate Manager:
- Количество сертификатов: 1
Cloud DNS:
- Количество зон: 1
- Общее количество записей: 4
Compute Cloud:
- Количество групп виртуальных машин: 3
- Количество дисков: 3
- Количество vCPU виртуальных машин: 12
- Общий объём RAM виртуальных машин: 24GB
- Количество виртуальных машин: 3
- Общий объём нереплицируемых SSD-дисков: 279
Identity and Access Management:
- Количество сервисных аккаунтов: 3
- Количество авторизованных ключей: 1
Key Management Service:
- Количество симметричных ключей: 1
Managed Databases:
- Количество кластеров: 1
- Объём виртуальной памяти: 24
- Количество vCPU: 6
- Объём SSD-хранилищ: 99
Managed Service for Kubernetes:
- Количество кластеров Kubernetes: 1
- Количество групп узлов: 3
- Количество узлов: 3
- Суммарное количество vCPU для всех узлов: 12
- Суммарный объём RAM: 24
- Суммарный объём дисков: 279
- Суммарное количество vCPU для всех мастеров: 6
- Суммарный объём RAM для всех мастеров: 24
Virtual Private Cloud:
- Количество таблиц маршрутизации: 1
- Количество подсетей: 8
- Количество групп безопасности: 4
- Количество статических маршрутов: 1
- Количество NAT-шлюзов: 1
- Количество шлюзов: 1
- Количество облачных сетей: 1
- Количество статических публичных IP-адресов: 1
- Количество всех публичных IP-адресов: 1
Квоты подобраны таким образом, чтобы расход ресурсов при создании инфраструктуры укладывался в квоты пустого облака, поэтому рекомендуется применять этот манифест в специально созданном для этой цели облаке. Если планируется использование в уже существующем облаке, необходимо убедиться, что имеющиеся квоты достаточны для размещения ресурсов, иначе создание инфраструктуры завершится с ошибкой.
ВНИМАНИЕ! Для для создания инфраструктуры используются платные ресурсы! Примерная стоимость 1 часа эксплуатация такой инфраструктуры составляет около 100 рублей (по состоянию на 01.07.2025).
Сервис | Стоимость 1ч |
---|---|
VPC | 0,87 ₽ |
Compute Cloud | 26,59 ₽ |
Monitoring | 0,00 ₽ |
Managed Service for Kubernetes | 26,71 ₽ |
Cloud DNS | 0,07 ₽ |
Managed Service for PostgreSQL | 28,41 ₽ |
Yandex Cloud Logging | 0,00 ₽ |
Lockbox Service | 0,00 ₽ |
Key Management Service | 0,34 ₽ |
Application Load Balancer | 12,76 ₽ |
Итого | 95,75 ₽ |
Для выполнения сценария создания инфраструктуры с помощью Terraform необходимо выполнить следующие шаги:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Клонируйте этот репозиторий
git clone [email protected]:yandex-cloud-examples/yc-mk8s-ha-todo-application.git
и перейдите в созданный каталог с исходным кодом
cd yc-mk8s-ha-todo-application
-
В файле
terraform.tfvars
задайте пользовательские параметры:folder_id
— идентификатор каталога.target_host
— доменное имя, на котором будет доступно развернутое приложение: допускается использование доменных имен уровней 2 и выше. Для успешного выполнения манифеста необходимо, чтобы доменное имя предыдущего уровня было делегировано в сервис Yandex Cloud DNS. Например, если для публикации приложения планируется домен todo.yc.example.com, в Yandex Cloud должна быть делегирована зона yc.example.com; если todo.example.com, то делегировать нужно example.com.
Пример файла
terrraform.tfvars
folder_id = "b1g7on4b4nbec0rap1d42" target_host = "todo.yc.example.com"
-
В терминале перейдите в каталог с исходным кодом репозитория
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список запланированных на создание ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Выполните команду создания новой конфигурации:
terraform apply
-
Подтвердите создание: введите в терминале слово
yes
и нажмите Enter. -
Дождитесь завершения работы
terraform
. Об успешном завершении говорит отсутствие сообщений об ошибках и финальное уведомление:Apply complete! Resources: 85 added, 0 changed, 0 destroyed. Outputs: cluster_id = "cat....." db_database = "todo" db_master_fqdn = "c-c9q......rw.mdb.yandexcloud.net" db_password = <sensitive> db_user = "todo"
-
После создания инфраструктуры необходимо дождаться перехода ssl сертификата в состояние
issued
и создания Application Load Balancer - это может занять до 40 минут. -
Проверьте работоспособность приложение: в браузере откройте сайт по адресу, который был указан в параметре
target_host
, например https://todo.yc.example.com.
-
В терминале перейдите в каталог с исходным кодом репозитория.
-
Выполните команду удаления созданных раннее ресурсов:
terraform destroy
-
Подтвердите удаление: введите в терминале слово
yes
и нажмите Enter. -
Дождитесь завершения работы
terraform
. Об успешном завершении говорит отсутствие сообщений об ошибках и финальное уведомление:Destroy complete! Resources: 85 destroyed.
-
В случае появления ошибок, подождите 5 минут и повторите пп 2 и 3.
После успешного удаления ресурсов в каталоге могут оставаться объекты ALB: HTTP-роутеры, Группы бэкендов и Целевые группы. Эти объекты не тарифицируются, их можно удалить вручную (удалять необходимо в перечисленном порядке).