アプリケーションとインフラを統合管理できるCrossPlaneを使ってみた

Cross Plane について

Crossplane はオープン ソースの CNCF プロジェクトです。

Kubernetes API を使用して、任意のクラウド サービス プロバイダーでインフラストラクチャをプロビジョニング、構成、および使用できます。

CrossPlane を使うメリット

  1. GitOps ベースで管理できる。
  2. アプリケーションとインフラストラクチャの構成を共存させることができ、CI/CD の複雑さを軽減できる。

minikube x CrossPlane を使って実際に GCP リソースを作成してみる。

minikube を起動させる。

minikube start

minikube addons enable ingress

CrossPlane のインストールを Helm 経由で行う。

kubectl create namespace crossplane-system
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update

helm install crossplane --namespace crossplane-system crossplane-stable/crossplane

ProviderConfig の設定を行う。

kubectl create secret generic gcp-creds -n crossplane-system --from-file=creds=./creds.json

provider.ymal

PROJECT_ID=my-project
echo "apiVersion: gcp.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  projectID: ${PROJECT_ID}
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: gcp-creds
      key: creds" | kubectl apply -f -

GCP の SA を作成する。

sa.yaml

apiVersion: iam.gcp.crossplane.io/v1alpha1
kind: ServiceAccount
metadata:
  name: perfect-test-sa
spec:
  forProvider:
    displayName: "a beautiful service account test2"
    description: "perfection"
  deletionPolicy: Delete
  providerConfigRef:
    name: default

リソースを作成する。

kubectl apply -f sa.yaml

今回はリソース単体を作成しただけですが、ArgoCD だったり、既存 terraform を組み込める provider を使うことでより移行コスト、効果を得られます。