Представьте: ваша команда уже использует 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 и более базами данных.
Что входит в работу
- Аудит текущей инфраструктуры: инвентаризация облачных ресурсов, выбор приоритетных для миграции.
- Установка и настройка Crossplane, провайдеров и ProviderConfigs.
- Разработка Compositions под ваши потребности с учётом best practices.
- Интеграция с GitOps (ArgoCD/Flux) и настройка пайплайна.
- Импорт существующих ресурсов через
crossplane import. - Документация и обучение команды: как создавать Claims, workflow изменений.
- Сопровождение после внедрения (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?
- Установите Crossplane в кластер:
kubectl apply -f https://raw.githubusercontent.com/crossplane/crossplane/master/cluster/base/crossplane.yaml(или через Helm). - Настройте провайдер: создайте ProviderConfig с credentials облака.
- Создайте Composition: определите шаблон ресурса (например, PostgreSQL).
- Разработчик создаёт Claim:
kubectl apply -f postgres-claim.yaml— ресурс появится через секунды.
Полный пример доступен в официальной документации Crossplane.
Совет: для production используйте минимум 3 реплики Crossplane и RBAC с ограничениями.
Crossplane — критический компонент, поэтому обеспечьте отказоустойчивость и разграничение прав доступа.Оцените эффективность Crossplane на своем проекте — запишитесь на демонстрацию. Свяжитесь с нами для аудита вашей инфраструктуры и получите предложение по внедрению.







