У нас неограниченный бюджет. Новый проект. Во что форматировать тачки?

«У нас неограниченный бюджет. Новый проект. Во что форматировать тачки?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

С неограниченным бюджетом фокус смещается с экономии на надежность, масштабируемость и скорость развертывания. Я бы строил инфраструктуру на принципах Infrastructure as Code (IaC) и имплементации через облачные сервисы.

Мой стек и подход:

  1. Provisioning (Terraform): Полное описание всей инфраструктуры в коде — VPC, сети, security groups, инстансы, балансировщики, базы данных.
  2. Контейнеризация (Docker): Все приложения упаковываются в минимальные образы.
  3. Оркестрация (Kubernetes): Использую managed-сервисы (EKS, GKE, AKS) для автоматического масштабирования, self-healing и управления конфигурацией.
  4. Immutable-инфраструктура (Packer): Базовые образы для инстансов (например, для bastion-хостов) создаются автоматически и никогда не модифицируются вручную после запуска.

Пример архитектуры в AWS:

# main.tf
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"
  name    = "prod-vpc"
  cidr    = "10.0.0.0/16"
  azs     = ["us-east-1a", "us-east-1b", "us-east-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
}

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 19.0"
  cluster_name    = "prod-cluster"
  cluster_version = "1.28"
  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets
  node_groups = {
    main = {
      instance_types = ["m5.2xlarge", "m5.4xlarge"]
      min_size     = 3
      max_size     = 10
      desired_size = 3
    }
  }
}

Ключевые преимущества: Воспроизводимость, версионность, быстрое развертывание идентичных сред (dev/stage/prod) и возможность реализации стратегии multi-region для максимальной отказоустойчивости.