Crossplane 云资源控制平面
Crossplane 把云厂商的数据库、对象存储、网络等资源抽象成 Kubernetes CRD,用 GitOps 的方式创建和管理外部基础设施。它由控制面、Provider、CompositeResourceDefinition(XRD)和 Composition 组成,适合平台团队为业务提供自服务的基础设施 API。
与 Terraform 的区别:Terraform 是执行式 IaC,Crossplane 是持续对账的控制器;Crossplane 更适合在集群内做自服务,Terraform 更适合一次性或复杂的编排。
安装 Crossplane:
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane crossplane-stable/crossplane \
--namespace crossplane-system --create-namespace
kubectl -n crossplane-system get pods
安装 Provider(以 AWS 为例):
kubectl apply -f - <<'EOF'
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws-s3
spec:
package: xpkg.upbound.io/upbound/provider-aws-s3:v1.18.0
EOF
kubectl get providers
配置 Provider 凭据:
kubectl create secret generic aws-creds \
-n crossplane-system \
--from-file=credentials=$HOME/.aws/credentials
kubectl apply -f - <<'EOF'
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds
key: credentials
EOF
直接创建托管资源:
kubectl apply -f - <<'EOF'
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
metadata:
name: demo-bucket
spec:
forProvider:
region: ap-east-1
providerConfigRef:
name: default
EOF
kubectl get bucket.s3.aws.upbound.io demo-bucket
定义平台 API(XRD):
kubectl apply -f - <<'EOF'
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: xbuckets.platform.example.com
spec:
group: platform.example.com
names:
kind: XBucket
plural: xbuckets
claimNames:
kind: BucketClaim
plural: bucketclaims
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
region:
type: string
EOF
编写 Composition:
kubectl apply -f - <<'EOF'
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: xbuckets.platform.example.com
spec:
compositeTypeRef:
apiVersion: platform.example.com/v1alpha1
kind: XBucket
resources:
- name: bucket
base:
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
spec:
forProvider:
region: ap-east-1
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.region
toFieldPath: spec.forProvider.region
EOF
业务创建 claim:
kubectl apply -f - <<'EOF'
apiVersion: platform.example.com/v1alpha1
kind: BucketClaim
metadata:
name: app-bucket
namespace: demo
spec:
region: ap-east-1
compositionRef:
name: xbuckets.platform.example.com
EOF
deletionPolicy。compositionRef 和 compositionSelector 二选一,选错会导致资源不渲染。kubectl get providers — 查看 Provider 状态kubectl get xrd — 查看平台 API 定义kubectl get compositions — 查看组合模板kubectl describe bucket — 查看托管资源事件crossplane — 控制面 CLI(如已安装)