https://github.com/yandex-cloud-examples/yc-mk8s-ha-todo-application
Пример развертывания отказоустойчивого окружения для простого прилложения `Заметки`.
https://github.com/yandex-cloud-examples/yc-mk8s-ha-todo-application
alb alb-ingress cert-manager kubernetes mdb mk8s postgresql terraform yandex-cloud
Last synced: 5 months ago
JSON representation
Пример развертывания отказоустойчивого окружения для простого прилложения `Заметки`.
- Host: GitHub
- URL: https://github.com/yandex-cloud-examples/yc-mk8s-ha-todo-application
- Owner: yandex-cloud-examples
- License: apache-2.0
- Created: 2025-06-27T17:00:57.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-10-17T17:56:45.000Z (8 months ago)
- Last Synced: 2025-10-18T20:01:48.891Z (8 months ago)
- Topics: alb, alb-ingress, cert-manager, kubernetes, mdb, mk8s, postgresql, terraform, yandex-cloud
- Language: HCL
- Homepage: https://yandex.cloud/ru/docs/architecture/app-in-k8s
- Size: 43 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Отказоуйстойчивое размещение приложения в Yandex Cloud
Этот репозиторий содержит демонстрационную сценарий для статьи [Развертывание веб-приложения в отказоустойчивой конфигурации в Yandex Cloud](https://yandex.cloud/ru/docs/architecture/app-in-k8s). В статье рассматривается вопрос создания отказоустойчивой инфраструктуры и развертывания в ней простого приложения todo ('Заметки') в отказоустойчивой конфигурации.
## Создание инфраструктуры и развертывание приложения
Все операции по развертыванию инфраструктуры и приложения выполняются с помощью манифестов terraform и helm чартов.
> [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE).
> Подробную информацию о ресурсах провайдера смотрите в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](https://terraform-provider.yandexcloud.net/).
> При изменении файлов конфигураций 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](https://cloud.yandex.ru/docs/tutorials/infrastructure-management/terraform-quickstart#install-terraform), [получите данные для аутентификации](https://cloud.yandex.ru/docs/tutorials/infrastructure-management/terraform-quickstart#get-credentials) и укажите источник для установки провайдера Yandex Cloud (раздел [Настройте провайдер](https://cloud.yandex.ru/docs/tutorials/infrastructure-management/terraform-quickstart#configure-provider), шаг 1).
1. Клонируйте этот репозиторий
```bash
git clone git@github.com:yandex-cloud-examples/yc-mk8s-ha-todo-application.git
```
и перейдите в созданный каталог с исходным кодом
```bash
cd yc-mk8s-ha-todo-application
```
1. В файле `terraform.tfvars` задайте пользовательские параметры:
* `folder_id` — [идентификатор каталога](https://cloud.yandex.ru/docs/resource-manager/operations/folder/get-id).
* `target_host` — доменное имя, на котором будет доступно развернутое приложение: допускается использование доменных имен уровней 2 и выше. Для успешного выполнения манифеста необходимо, чтобы доменное имя предыдущего уровня было [делегировано](https://yandex.cloud/ru/docs/troubleshooting/dns/how-to/delegate-public-zone) в [сервис Yandex Cloud DNS](https://yandex.cloud/ru/docs/dns/concepts/). Например, если для публикации приложения планируется домен todo.yc.example.com, в Yandex Cloud должна быть делегирована зона yc.example.com; если todo.example.com, то делегировать нужно example.com.
Пример файла `terrraform.tfvars`
```bash
folder_id = "b1g7on4b4nbec0rap1d42"
target_host = "todo.yc.example.com"
```
### Создание ресурсов
1. В терминале перейдите в каталог с исходным кодом репозитория
1. Проверьте корректность конфигурационного файла с помощью команды:
```bash
terraform validate
```
Если конфигурация является корректной, появится сообщение:
```text
Success! The configuration is valid.
```
1. Выполните команду:
```bash
terraform plan
```
В терминале будет выведен список запланированных на создание ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
1. Выполните команду создания новой конфигурации:
```bash
terraform apply
```
1. Подтвердите создание: введите в терминале слово `yes` и нажмите **Enter**.
1. Дождитесь завершения работы `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 =
db_user = "todo"
```
1. После создания инфраструктуры необходимо дождаться перехода ssl сертификата в состояние `issued` и создания Application Load Balancer - это может занять до 40 минут.
1. Проверьте работоспособность приложение: в браузере откройте сайт по адресу, который был указан в параметре `target_host`, например https://todo.yc.example.com.
### Освобождение ресурсов
1. В терминале перейдите в каталог с исходным кодом репозитория.
1. Выполните команду удаления созданных раннее ресурсов:
```bash
terraform destroy
```
1. Подтвердите удаление: введите в терминале слово `yes` и нажмите **Enter**.
1. Дождитесь завершения работы `terraform`. Об успешном завершении говорит отсутствие сообщений об ошибках и финальное уведомление:
```
Destroy complete! Resources: 85 destroyed.
```
1. В случае появления ошибок, подождите 5 минут и повторите пп 2 и 3.
После успешного удаления ресурсов в каталоге могут оставаться объекты ALB: HTTP-роутеры, Группы бэкендов и Целевые группы. Эти объекты не тарифицируются, их можно удалить вручную (удалять необходимо в перечисленном порядке).