Skip to content

Пример развертывания отказоустойчивого окружения для простого прилложения `Заметки`.

License

Notifications You must be signed in to change notification settings

yandex-cloud-examples/yc-mk8s-ha-todo-application

Repository files navigation

Отказоуйстойчивое размещение приложения в Yandex Cloud

Этот репозиторий содержит демонстрационную сценарий для статьи Развертывание веб-приложения в отказоустойчивой конфигурации в 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 необходимо выполнить следующие шаги:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Клонируйте этот репозиторий

    git clone [email protected]:yandex-cloud-examples/yc-mk8s-ha-todo-application.git

    и перейдите в созданный каталог с исходным кодом

    cd yc-mk8s-ha-todo-application
  3. В файле 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"

Создание ресурсов

  1. В терминале перейдите в каталог с исходным кодом репозитория

  2. Проверьте корректность конфигурационного файла с помощью команды:

    terraform validate

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  3. Выполните команду:

    terraform plan

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

  4. Выполните команду создания новой конфигурации:

    terraform apply
  5. Подтвердите создание: введите в терминале слово yes и нажмите Enter.

  6. Дождитесь завершения работы 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"
    
  7. После создания инфраструктуры необходимо дождаться перехода ssl сертификата в состояние issued и создания Application Load Balancer - это может занять до 40 минут.

  8. Проверьте работоспособность приложение: в браузере откройте сайт по адресу, который был указан в параметре target_host, например https://todo.yc.example.com.

Освобождение ресурсов

  1. В терминале перейдите в каталог с исходным кодом репозитория.

  2. Выполните команду удаления созданных раннее ресурсов:

    terraform destroy
  3. Подтвердите удаление: введите в терминале слово yes и нажмите Enter.

  4. Дождитесь завершения работы terraform. Об успешном завершении говорит отсутствие сообщений об ошибках и финальное уведомление:

    Destroy complete! Resources: 85 destroyed.
    
  5. В случае появления ошибок, подождите 5 минут и повторите пп 2 и 3.

После успешного удаления ресурсов в каталоге могут оставаться объекты ALB: HTTP-роутеры, Группы бэкендов и Целевые группы. Эти объекты не тарифицируются, их можно удалить вручную (удалять необходимо в перечисленном порядке).

About

Пример развертывания отказоустойчивого окружения для простого прилложения `Заметки`.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages