crossplane

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

注意

相关命令

参考链接