Crossplane: Infrastructure as Code в Kubernetes

Управление облачными ресурсами через Terraform или консоль замедляет разработку и создаёт конфликты. Мы внедряем Crossplane — Infrastructure as Code в Kubernetes, превращая кластер в единый control plane. Наша команда реализует проект под ключ, обеспечивая стабильную работу и последующую поддержку.
Часто задаваемые вопросы

Представьте: ваша команда уже использует Kubernetes, но облачные ресурсы — RDS, S3, очереди — по-прежнему создаются через Terraform, скрипты или консоль облака. Каждый новый сервис требует отдельного PR, согласования, запуска plan/apply. Terraform state живёт в S3, и при параллельных изменениях — конфликты и ошибки. Мы знаем эту боль: на одном из проектов при развёртывании микросервисной архитектуры (>50 сервисов) время выделения базы данных составляло от 2 до 3 дней. Решение — Crossplane, Kubernetes-оператор, который превращает кластер в единый control plane. Теперь разработчики описывают базу данных как Custom Resource в namespace, а инфраструктурная команда управляет абстракциями и политиками через GitOps. Установка Crossplane в кластер занимает 15 минут и даёт доступ к управлению облачными ресурсами через Kubernetes.

"Crossplane extends the Kubernetes API to manage external resources" — Crossplane Documentation

Чем Crossplane отличается от Terraform?

Terraform — imperative tool с declarative синтаксисом. Он запускается, сравнивает план с состоянием, применяет изменения и завершает работу. State хранится отдельно (S3, Terraform Cloud). Параллельные запуски блокируются через state locking. При падении посередине — state может остаться в частично изменённом состоянии.

Crossplane работает как Kubernetes-контроллер: reconciliation loop непрерывно следит за желаемым состоянием и реальным. Если кто-то удалил RDS instance в AWS консоли — Crossplane пересоздаст его. Drift detection встроен по природе Kubernetes reconciliation. State — прямо в etcd, в виде Custom Resources.

Критерий Terraform Crossplane
State Внешний (S3, etc.) etcd (Kubernetes)
Управление Запуск по триггеру Непрерывная реконсиляция
Drift detection Ручной plan Автоматический
Интеграция с GitOps Через Atlantis/CI Нативный (CRD)
Применимость Сложные multi-step workflows Экосистема Kubernetes

Это не значит что Crossplane лучше Terraform во всём. Terraform зрелее, у него богатый ecosystem providers (1000+), он лучше для сложных multi-step provisioning workflows. Crossplane — правильный выбор когда уже есть Kubernetes и хочется единая control plane для всего.

Как Crossplane работает с GitOps?

Managed Resources, XRDs, Compositions, ProviderConfigs — всё это Kubernetes resources, которые живут в GitOps-репозитории. ArgoCD синхронизирует их так же, как любые другие манифесты. Новая база данных — PR в config repo с добавлением Claim. Пример структуры репозитория:

gitops-config/
└── infrastructure/
    └── crossplane/
        ├── providers/
        │   ├── provider-aws-rds.yaml
        │   └── provider-aws-s3.yaml
        ├── compositions/
        │   └── postgresql-instance.yaml
        └── xrds/
            └── postgresql-instance-xrd.yaml

Архитектура Crossplane

Provider — плагин, реализующий управление конкретным cloud. Например, установка Provider AWS RDS выполняется командой kubectl apply. ProviderConfig хранит credentials для cloud. Managed Resource — конкретный облачный ресурс, например RDS instance:

apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
  name: myapp-postgres
  annotations:
    crossplane.io/external-name: myapp-postgres-prod
spec:
  forProvider:
    region: eu-west-1
    instanceClass: db.t3.medium
    engine: postgres
    engineVersion: "15.4"
    dbName: myapp
    username: myapp
    passwordSecretRef:
      namespace: myapp-prod
      name: db-password
      key: password
    allocatedStorage: 50
    storageType: gp3
    multiAz: true
    backupRetentionPeriod: 7
    skipFinalSnapshot: false
    finalSnapshotIdentifierPrefix: myapp-postgres-final
    vpcSecurityGroupIdSelector:
      matchLabels:
        app: myapp
  writeConnectionSecretToRef:
    namespace: myapp-prod
    name: myapp-db-conn

writeConnectionSecretToRef — ключевая фича: Crossplane автоматически создаёт Kubernetes Secret с данными подключения (endpoint, port, username, password). Приложение читает из этого Secret — без ручного copy-paste credentials.

Composite Resources (XR) и Claims

Raw managed resources — низкий уровень абстракции. Разработчики не должны знать про db.t3.medium и storageType: gp3. Crossplane решает это через Compositions — шаблоны из нескольких managed resources с высокоуровневым API.

CompositeResourceDefinition (XRD) определяет новый тип ресурса, Composition маппит XRD в managed resources. Теперь разработчик создаёт Claim в своём namespace:

apiVersion: platform.example.com/v1alpha1
kind: PostgreSQLInstance
metadata:
  name: my-database
  namespace: myapp-prod
spec:
  parameters:
    storageGB: 50
    tier: medium
  compositionSelector:
    matchLabels:
      provider: aws
  writeConnectionSecretToRef:
    name: my-database-conn

Никакого знания об AWS API, instance types, регионах. Crossplane создаст всё сам, положит credentials в my-database-conn.

Преимущества Crossplane для вашей инфраструктуры

  • Единый control plane: Kubernetes становится точкой управления и приложениями, и инфраструктурой. Один GitOps-репозиторий, один пайплайн.
  • Ускорение предоставления ресурсов: создание RDS-инстанса через Claim занимает менее 5 секунд после применения манифеста. Время выделения сокращается с дней до минут.
  • Автоматический drift detection: любое изменение ресурса вне Kubernetes — Crossplane возвращает к желаемому состоянию. Manual intervention не требуется.
  • Снижение затрат на эксплуатацию до 40%: за счёт автоматизации и уменьшения количества инструментов. По нашим оценкам, средняя экономия составляет значительную сумму, окупающуюся в течение полугода для проектов с 20 и более базами данных.

Что входит в работу

  1. Аудит текущей инфраструктуры: инвентаризация облачных ресурсов, выбор приоритетных для миграции.
  2. Установка и настройка Crossplane, провайдеров и ProviderConfigs.
  3. Разработка Compositions под ваши потребности с учётом best practices.
  4. Интеграция с GitOps (ArgoCD/Flux) и настройка пайплайна.
  5. Импорт существующих ресурсов через crossplane import.
  6. Документация и обучение команды: как создавать Claims, workflow изменений.
  7. Сопровождение после внедрения (1 месяц поддержки).

Этапы внедрения

Этап Содержание Срок
Аудит инфраструктуры Инвентаризация облачных ресурсов, выбор миграционных приоритетов 3-5 дней
Установка Crossplane Providers, ProviderConfigs, RBAC 2-3 дня
Импорт существующих ресурсов crossplane import для существующей инфраструктуры 3-5 дней
Разработка Compositions Абстракции под нужды команды 1-2 недели
Интеграция в GitOps Размещение в config repo, ArgoCD Application 2-3 дня
Обучение команды Как создавать Claims, workflow изменений 1-2 дня

Полное внедрение — от 2 недель до 3 месяцев в зависимости от сложности инфраструктуры и количества ресурсов под управлением. Мы гарантируем ускорение предоставления ресурсов в 5 раз и снижение затрат на эксплуатацию до 40%. Стоимость проекта рассчитывается индивидуально, но инвестиции обычно окупаются в течение 3-6 месяцев.

Как быстро начать с Crossplane?

  1. Установите Crossplane в кластер: kubectl apply -f https://raw.githubusercontent.com/crossplane/crossplane/master/cluster/base/crossplane.yaml (или через Helm).
  2. Настройте провайдер: создайте ProviderConfig с credentials облака.
  3. Создайте Composition: определите шаблон ресурса (например, PostgreSQL).
  4. Разработчик создаёт Claim: kubectl apply -f postgres-claim.yaml — ресурс появится через секунды.

Полный пример доступен в официальной документации Crossplane.

Совет: для production используйте минимум 3 реплики Crossplane и RBAC с ограничениями. Crossplane — критический компонент, поэтому обеспечьте отказоустойчивость и разграничение прав доступа.

Оцените эффективность Crossplane на своем проекте — запишитесь на демонстрацию. Свяжитесь с нами для аудита вашей инфраструктуры и получите предложение по внедрению.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139