핵심 요약
플랫폼 팀이 사내 셀프 서비스를 만들려고 할 때 Crossplane은 K8s 네이티브, Pulumi는 범용 언어 기반. Crossplane 2의 Composition v2와 Pulumi 4의 새 어셈블리 모델 모두 큰 진화. 인프라가 K8s 중심이면 Crossplane, AWS·GCP·SaaS가 모두 섞이면 Pulumi.
1. 모델 차이
| Crossplane 2 | Pulumi 4 | |
|---|---|---|
| 핵심 | K8s CRD | 범용 SDK |
| 저장소 | etcd | state backend |
| 개발자 언어 | YAML/KCL | Python·TS·Go·C# |
| GitOps 친화 | 매우 강함 | 가능(Pulumi YAML) |
2. Crossplane 2 — Composition v2
apiVersion: apiextensions.crossplane.io/v2
kind: Composition
spec:
mode: Pipeline
pipeline:
- functionRef: { name: function-go-templating }
input:
template: |
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
...
Composition을 Go template·KCL·Starlark 등 함수로 작성. 기존 YAML patch 모델 대비 표현력 대폭 강화.
3. Pulumi 4 — 새 어셈블리
import * as aws from "@pulumi/aws";
import * as k8s from "@pulumi/kubernetes";
const cluster = new aws.eks.Cluster("prod", {...});
new k8s.helm.v4.Chart("monitoring", {
chart: "kube-prometheus-stack",
values: { ... },
}, { provider: cluster.provider });
v4의 helm v4 Chart는 진짜 helm install/upgrade를 수행, drift 검출 정확.
4. 셀프 서비스 — 사용자 경험
Crossplane: 개발자가 kubectl apply -f my-postgres.yaml 한 번이면 클라우드 RDS 프로비저닝. K8s 학습한 사용자에 친숙. Pulumi: PR로 코드 변경 → CI에서 preview → 머지 → 적용. 사용자가 IaC 코드를 직접 다룰 때 자연스럽다.
5. 다중 클라우드
두 도구 모두 잘 지원. Crossplane은 Provider 패키지(Upbound official) 품질이 AWS/GCP/Azure는 상, 나머지는 가변. Pulumi는 Terraform 프로바이더를 그대로 변환해 사용해 커버리지가 압도적.
6. 비용·상태 관리
Crossplane은 etcd에 모든 상태. 대규모 리소스(1만+)에서 etcd 압박 — sharding/외부 backend 검토. Pulumi는 S3/Pulumi Cloud로 state 분리, 상태 충돌 락 자동.
7. 결정 가이드
- 플랫폼이 K8s 중심, 개발자에 셀프 서비스 → Crossplane 2
- AWS+SaaS 다 혼재, 코드로 관리 → Pulumi 4
- Terraform 자산 큼 → Pulumi 4(import 가능)
- Argo CD/Flux 사용 중 → Crossplane 2 자연스러움
자주 묻는 질문
Q. Terraform/OpenTofu와 비교? 둘은 IaC 표준 출발점, Crossplane/Pulumi는 플랫폼/프로그램 친화. 셀프 서비스가 목적이면 Crossplane/Pulumi 우세.

댓글 0