Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dbykovski/momo-store-infrastructure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

13 Commits

Repository files navigation

🏗️ Momo Store Infrastructure

Инфраструктура для учебного проекта Momo Store — пельменной по курсу "DevOps для эксплуатации и разработки".
Проект демонстрирует применение Terraform, GitLab CI, Helm и GitOps-подхода при развёртывании приложения в Яндекс Облаке.


☁️ Архитектура инфраструктуры

Инфраструктура создаётся полностью с помощью Terraform и включает:

Компонент Назначение
VPC (сеть + подсеть) Виртуальная частная сеть для компонентов Kubernetes
Service Accounts (4) Для доступа S3 бакет, создания инфраструктуры, SA для master и worker-нод
IAM роли Доступ к VPC, Compute, Registry и управлению кластером
Kubernetes Cluster Managed Service for Kubernetes (STABLE release channel)
Node Group Группа нод с авто-масштабированием (1–3 ноды)
S3 Bucket Object Storage для хранения изображений и Terraform state
Static Upload Автоматическая загрузка файлов из ./images в бакет
Outputs Вывод cluster_id Managed Kubernetes Cluster

⚙️ Стек технологий

  • Terraform — инфраструктура как код
  • Yandex Cloud — облачная платформа (Managed K8s, Object Storage, IAM)

📦 Структура репозитория

momo-store-infrastructure/
├── Terraform/
├──── backend.tf # Настройки удалённого хранения state в Object Storage
├──── k8s.tf # Создание Kubernetes кластера и node group
├──── main.tf # Определение провайдеров Terraform
├──── network.tf # Создание VPC и подсети
├──── outputs.tf # Вывод полезных данных
├──── providers.tf # Подключение Yandex Cloud провайдера
├──── service_accounts.tf # Сервисные аккаунты и IAM роли
├──── static-backet.tf # Создание S3-бакета и загрузка изображений
├──── terraform.tfvars # Значения переменных
├──── variables.tf # Переменные Terraform
└──── images/ # Локальные файлы для загрузки в Object Storage

🚀 Развёртывание инфраструктуры

1. Подготовка окружения

Установить зависимости (Устанавливаем утилиты yc, terraform):

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash source ~/.bashrc
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

2. Создание сервисных аккаунтов и ключей доступа

Перед запуском Terraform необходимо создать два сервисных аккаунта (SA):

Сервисный аккаунт Назначение Необходимые роли
terraform-admin используется Terraform для создания ресурсов (VPC, кластер, сервисные аккаунты и т.д.) editor, vpc.admin, compute.admin, iam.admin, k8s.clusters.admin, storage.admin
terraform-state-sa используется Terraform для доступа к Object Storage (S3 backend) storage.admin

🔹 Шаг 1. Создание SA и выдача ролей

# Авторизация в облаке (если не выполнена)
yc init
# Создаём SA для Terraform
yc iam service-account create --name tf-admin --description "Admin SA for Terraform"
# Создаём SA для хранения state
yc iam service-account create --name terraform-backend-sa --description "SA for Terraform S3 backend"
# Назначаем роли (замените <FOLDER_ID> на ваш)
FOLDER_ID=<your-folder-id>
# Terraform backend SA
yc resource-manager folder add-access-binding $FOLDER_ID \
 --role storage.admin \
 --subject serviceAccount:$(yc iam service-account get terraform-backend-sa --format json | jq -r .id)
# Terraform admin SA
yc resource-manager folder add-access-binding $FOLDER_ID \
 --role admin \
 --subject serviceAccount:$(yc iam service-account get tf-admin --format json | jq -r .id)

🔹 Шаг 2. Создание ключей доступа для S3 backend

yc iam access-key create --service-account-name terraform-backend-sa

В ответе появятся поля access_key.id и secret, сохраните их в переменные окружения:

export AWS_ACCESS_KEY_ID="<идентификатор_ключа>"
export AWS_SECRET_ACCESS_KEY="<секретный_ключ>"

🔹 Шаг 3. Создание JSON-ключа для Terraform

yc iam key create \
 --service-account-name terraform-admin \
 --output key.json

Файл key.json должен находиться в корне проекта и добавлен в .gitignore.


3. Инициализация Terraform

Клонируйте репозиторий и перейдите в директорию с кодом:

git clone https://gitlab.praktikum-services.ru/std-ext-019-01/momo-store-infrastructure.git
cd momo-store-infrastructure/terraform

Инициализируйте и примените конфигурацию:

terraform init
terraform plan
terraform apply

После успешного выполнения Terraform создаст:

  • сеть и подсеть VPC;
  • сервисные аккаунты с нужными IAM-ролями;
  • Managed Kubernetes-кластер с нод-группой;
  • публичный бакет для статики (dbykovski-momo-storage).

🧩 Переменные Terraform

Переменная Описание Default
cloud_id ID облака Yandex Cloud
folder_id ID каталога
sa_key_file Путь к JSON-ключу сервисного аккаунта
default_zone Зона размещения ресурсов ru-central1-a
network_name Имя VPC сети momo-network
subnet_a_cidr CIDR подсети 10.128.0.0/24
cluster_name Имя Kubernetes кластера momo-k8s
node_group_name Имя группы нод momo-nodes
node_vm_type Тип ВМ для нод standard-v2
node_cores Количество CPU на ноду 2
node_memory Количество памяти (ГБ) 2
node_disk_size Размер диска (ГБ) 64
node_count_min Минимум нод 1
node_count_max Максимум нод 3
static_bucket_name Имя Object Storage бакета dbykovski-momo-storage

🪣 Object Storage

После выполнения terraform apply создаётся публичный бакет:

https://storage.yandexcloud.net/dbykovski-momo-storage/

куда автоматически загружаются файлы из папки ./images.

Права доступа:

  • ✅ чтение — публичное
  • 🚫 листинг содержимого — запрещён

☸️ Kubernetes Cluster

  • Тип: Managed Service for Kubernetes

  • Release Channel: STABLE

  • Master — публичный доступ

  • Node Group:

    • Автомасштабирование: 1–3 ноды
    • Тип: standard-v2
    • 2 CPU, 2 GB RAM, 64 GB HDD
  • Автоматически создаются:

    • Service Accounts для Master и Nodes
    • IAM роли (editor, compute.admin, container-registry.images.puller, vpc.publicAdmin)

🔐 Безопасность

  • JSON-ключ сервисного аккаунта не хранится в Git, путь задаётся переменной sa_key_file
  • Доступы к Terraform backend через IAM и GitLab CI/CD Variables (если автоматизация)
  • Object Storage настроен на публичное чтение только статических файлов

📘 Полезные команды

# Проверить текущее состояние
terraform state list
# Удалить инфраструктуру
terraform destroy
# Получить kubeconfig повторно
yc managed-kubernetes cluster get-credentials momo-k8s --external --force

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

После успешного развёртывания инфраструктуры и деплоя приложения
проект доступен по адресу:
🔗 https://momo.dbykovski.ru


👨‍💻 Автор

  • Дмитрий Быковский, std-ext-019-01
  • Проект по курсу «DevOps для эксплуатации и разработки»
  • Ноябрь 2025

About

Дипломный проект. Инфраструктура. Яндекс. Практикум по курсу DevOps для эксплуатации и разработки: расширенная версия

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /