クラウドリソースを組み合わせるためのKubernetesネイティブInfrastructure as Codeコントロールプレーン。
| コマンド | 説明 |
|---|
helm repo add crossplane-stable https://charts.crossplane.io/stable | Crossplane Helmリポジトリを追加 |
helm repo update | Helmリポジトリを更新 |
helm install crossplane crossplane-stable/crossplane -n crossplane-system --create-namespace | KubernetesにCrossplaneをインストール |
helm install crossplane crossplane-stable/crossplane -n crossplane-system --set args='{"--debug"}' | デバッグログ付きでインストール |
helm upgrade crossplane crossplane-stable/crossplane -n crossplane-system | Crossplaneをアップグレード |
helm uninstall crossplane -n crossplane-system | Crossplaneをアンインストール |
kubectl get pods -n crossplane-system | Crossplaneの実行状態を確認 |
kubectl get deployments -n crossplane-system | デプロイメントの状態を確認 |
| コマンド | 説明 |
|---|
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | sh | Crossplane CLIをインストール |
brew install crossplane/tap/crossplane | Homebrew経由でCLIをインストール |
crossplane --version | CLIバージョンを表示 |
| コマンド | 説明 |
|---|
crossplane xpkg init my-config configuration | 新しい設定パッケージを初期化 |
crossplane xpkg init my-provider provider | 新しいプロバイダーパッケージを初期化 |
crossplane xpkg build | Crossplaneパッケージをビルド |
crossplane xpkg build --package-root=./package --examples-root=./examples | 特定のディレクトリでビルド |
crossplane xpkg push index.docker.io/org/config:v1 | パッケージをレジストリにプッシュ |
crossplane xpkg install provider index.docker.io/org/provider:v1 | プロバイダーパッケージをインストール |
crossplane xpkg install configuration index.docker.io/org/config:v1 | 設定パッケージをインストール |
| コマンド | 説明 |
|---|
crossplane beta validate schema.yaml resources/ | スキーマに対してリソースを検証 |
crossplane beta trace kind/name | リソースの依存関係をトレース |
crossplane beta trace kind/name -o wide | 拡張出力でトレース |
crossplane beta convert composition comp.yaml | Compositionをパイプラインモードに変換 |
crossplane beta render xr.yaml composition.yaml functions.yaml | コンポーズドリソースをローカルでレンダリング |
| コマンド | 説明 |
|---|
kubectl apply -f provider-aws.yaml | AWSプロバイダーをインストール |
kubectl apply -f provider-gcp.yaml | GCPプロバイダーをインストール |
kubectl apply -f provider-azure.yaml | Azureプロバイダーをインストール |
kubectl apply -f provider-kubernetes.yaml | Kubernetesプロバイダーをインストール |
kubectl apply -f provider-helm.yaml | Helmプロバイダーをインストール |
kubectl get providers | インストール済みプロバイダーを一覧表示 |
kubectl get provider.pkg provider-aws -o yaml | プロバイダーの詳細を表示 |
kubectl describe providerrevision | プロバイダーリビジョンの状態を表示 |
kubectl get managed | すべてのマネージドクラウドリソースを一覧表示 |
kubectl get managed -o wide | マネージドリソースをステータス付きで一覧表示 |
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds
key: credentials
認証情報シークレットを作成:
kubectl create secret generic aws-creds \
-n crossplane-system \
--from-file=credentials=./aws-credentials.txt
apiVersion: gcp.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
projectID: my-gcp-project
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: gcp-creds
key: credentials
apiVersion: azure.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: azure-creds
key: credentials
| コマンド | 説明 |
|---|
kubectl apply -f xrd.yaml | CompositeResourceDefinitionを作成 |
kubectl get xrd | すべてのXRDを一覧表示 |
kubectl describe xrd xdatabases.custom.example.com | XRDの詳細を表示 |
kubectl get composite | すべてのコンポジットリソースを一覧表示 |
kubectl describe composite | コンポジットリソースの状態を表示 |
kubectl delete xrd xdatabases.custom.example.com | XRDを削除 |
XRDでspec.claimNamesを設定 | ネームスペーススコープのクレームを有効化 |
XRDでspec.versions[].schemaを設定 | XRDのOpenAPIスキーマを定義 |
XRDでspec.connectionSecretKeysを設定 | 公開する接続キーを定義 |
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: xdatabases.platform.example.com
spec:
group: platform.example.com
names:
kind: XDatabase
plural: xdatabases
claimNames:
kind: Database
plural: databases
connectionSecretKeys:
- endpoint
- port
- username
- password
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
parameters:
type: object
properties:
engine:
type: string
enum: ["postgres", "mysql", "mariadb"]
description: "Database engine type"
engineVersion:
type: string
description: "Engine version"
storageGB:
type: integer
default: 20
description: "Storage size in GB"
instanceSize:
type: string
enum: ["small", "medium", "large"]
default: "small"
required:
- engine
required:
- parameters
| コマンド | 説明 |
|---|
kubectl apply -f composition.yaml | Compositionを作成 |
kubectl get compositions | すべてのCompositionを一覧表示 |
kubectl describe composition | Compositionの詳細を表示 |
Compositionでspec.compositeTypeRefを設定 | XRDにリンク |
Compositionでspec.resources[]を設定 | コンポーズドリソースを定義 |
Compositionでpatchesを使用 | コンポジットとリソース間のフィールドをマッピング |
patch: { type: FromCompositeFieldPath } | コンポジットからリソースへパッチ |
patch: { type: ToCompositeFieldPath } | リソースからコンポジットへパッチ |
patch: { type: CombineFromComposite } | 複数のフィールドを1つに結合 |
Compositionでspec.mode: Pipelineを設定 | 関数パイプラインモードを使用 |
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: xdatabase-aws
labels:
provider: aws
engine: postgres
spec:
compositeTypeRef:
apiVersion: platform.example.com/v1alpha1
kind: XDatabase
resources:
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
engine: postgres
instanceClass: db.t3.micro
allocatedStorage: 20
publiclyAccessible: false
skipFinalSnapshot: true
region: us-east-1
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.engineVersion
toFieldPath: spec.forProvider.engineVersion
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.storageGB
toFieldPath: spec.forProvider.allocatedStorage
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.instanceSize
toFieldPath: spec.forProvider.instanceClass
transforms:
- type: map
map:
small: db.t3.micro
medium: db.t3.medium
large: db.t3.large
connectionDetails:
- type: FromFieldPath
name: endpoint
fromFieldPath: status.atProvider.endpoint
- type: FromFieldPath
name: port
fromFieldPath: status.atProvider.port
- name: subnet-group
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: SubnetGroup
spec:
forProvider:
region: us-east-1
description: "Managed by Crossplane"
writeConnectionSecretsToNamespace: crossplane-system
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: xdatabase-pipeline
spec:
compositeTypeRef:
apiVersion: platform.example.com/v1alpha1
kind: XDatabase
mode: Pipeline
pipeline:
- step: patch-and-transform
functionRef:
name: function-patch-and-transform
input:
apiVersion: pt.fn.crossplane.io/v1beta1
kind: Resources
resources:
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
engine: postgres
instanceClass: db.t3.micro
region: us-east-1
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.storageGB
toFieldPath: spec.forProvider.allocatedStorage
- step: auto-ready
functionRef:
name: function-auto-detect-ready
| コマンド | 説明 |
|---|
kubectl apply -f claim.yaml | リソースクレームを作成 |
kubectl get claim | ネームスペース内のすべてのクレームを一覧表示 |
kubectl get database | Database型のクレームを一覧表示 |
kubectl describe claim my-database | クレームの状態とイベントを表示 |
kubectl delete claim my-database | クレームとマネージドリソースを削除 |
クレームでspec.compositionRef.nameを設定 | 特定のCompositionを選択 |
クレームでspec.compositionSelector.matchLabelsを設定 | ラベルでCompositionを選択 |
kubectl get events --field-selector involvedObject.name=my-db | クレームイベントを表示 |
kubectl get secret my-db-conn -o jsonpath='{.data.endpoint}' | 接続詳細を読み取り |
apiVersion: platform.example.com/v1alpha1
kind: Database
metadata:
name: my-app-db
namespace: default
spec:
parameters:
engine: postgres
engineVersion: "15"
storageGB: 50
instanceSize: medium
compositionSelector:
matchLabels:
provider: aws
engine: postgres
writeConnectionSecretToRef:
name: my-app-db-conn
| コマンド | 説明 |
|---|
kubectl apply -f function.yaml | Composition関数をインストール |
kubectl get functions | インストール済み関数を一覧表示 |
kubectl describe function function-patch-and-transform | 関数の詳細を表示 |
crossplane beta render xr.yaml composition.yaml functions.yaml | パイプラインをローカルでテスト |
# function-patch-and-transformをインストール
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
name: function-patch-and-transform
spec:
package: xpkg.upbound.io/crossplane-contrib/function-patch-and-transform:v0.7.0
---
# function-auto-detect-readyをインストール
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
name: function-auto-detect-ready
spec:
package: xpkg.upbound.io/crossplane-contrib/function-auto-detect-ready:v0.2.1
---
# function-go-templatingをインストール
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
name: function-go-templating
spec:
package: xpkg.upbound.io/crossplane-contrib/function-go-templating:v0.6.0
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: EnvironmentConfig
metadata:
name: production
data:
region: us-east-1
environment: production
vpcId: vpc-0abc123def456
subnetIds:
- subnet-0abc123
- subnet-0def456
- subnet-0ghi789
tags:
team: platform
costCenter: engineering
| コマンド | 説明 |
|---|
kubectl create secret generic aws-creds -n crossplane-system --from-file=creds=./aws-creds.txt | プロバイダー認証情報シークレットを作成 |
ProviderConfigでspec.credentials.source: Secretを設定 | 認証情報シークレットを参照 |
kubectl apply -f environmentconfig.yaml | EnvironmentConfigを作成 |
kubectl get storeconfig | ストア設定を一覧表示 |
Compositionでspec.publishConnectionDetailsToを設定 | 接続シークレット公開を設定 |
クレームでspec.writeConnectionSecretToRefを設定 | 接続詳細をシークレットに書き込み |
kubectl get secrets -l crossplane.io/claim-name=my-db | クレームのシークレットを一覧表示 |
apiVersion: secrets.crossplane.io/v1alpha1
kind: StoreConfig
metadata:
name: vault
spec:
type: Vault
defaultScope: crossplane-system
vault:
mountPath: secret
version: v2
auth:
method: Token
token:
source: Secret
secretRef:
namespace: crossplane-system
name: vault-token
key: token
| コマンド | 説明 |
|---|
kubectl get managed -o wide | マネージドリソースをステータス付きで表示 |
kubectl describe managed | マネージドリソースの詳細情報を表示 |
kubectl logs -n crossplane-system deploy/crossplane | Crossplaneコントローラーログを表示 |
kubectl logs -n crossplane-system deploy/crossplane -f | コントローラーログをフォロー |
kubectl get events --sort-by='.lastTimestamp' | 最近のクラスターイベントを表示 |
crossplane beta trace xdatabase my-db | 完全なリソースツリーをトレース |
crossplane beta trace xdatabase my-db -o wide | 詳細ステータス付きでトレース |
kubectl get managed -l crossplane.io/composite=my-db | コンポジットのリソースを検索 |
kubectl annotate managed resource.api.example.com/name crossplane.io/paused=true | リソースの調整を一時停止 |
kubectl annotate managed resource.api.example.com/name crossplane.io/paused- | リソースの調整を再開 |
| コマンド | 説明 |
|---|
kubectl get providerrevision | プロバイダーが正常か確認 |
kubectl describe providerrevision | プロバイダーのインストールエラーを表示 |
kubectl get managed -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[*].reason}{"\n"}{end}' | すべてのマネージドリソースのクイックステータス |
kubectl patch managed resource.api.example.com/name --type merge -p '{"metadata":{"annotations":{"crossplane.io/paused":"true"}}}' | パッチで一時停止 |
kubectl delete managed --all | すべてのマネージドリソースを削除(注意して使用) |
-
直接Compositeの代わりにクレームを使用 — クレームはネームスペーススコープで、チーム間の適切なRBAC境界を提供します。
-
プロバイダーバージョンを固定 — アップグレード時の予期しない変更を防ぐため、常に正確なプロバイダーバージョンを指定します。
-
新しいCompositionにはパイプラインモードを使用 — 関数付きのパイプラインモードは、リソースモードよりも柔軟でテスト可能です。
-
EnvironmentConfigを実装 — VPC IDやサブネットリストなどの共有環境データを保存して、Composition間の重複を避けます。
-
接続シークレット公開を設定 — アプリケーションが接続詳細を利用できるよう、クレームには常にwriteConnectionSecretToRefを定義します。
-
crossplane beta traceを使用 — クレームからマネージドリソースまでのリソースツリー全体を可視化して、問題をデバッグする最速の方法です。
-
選択用にCompositionにラベルを付ける — provider: awsやengine: postgresなどのラベルを使用して、クレームが名前ではなくラベルでCompositionを選択できるようにします。
-
crossplane beta renderでローカルテスト — クラスターに適用する前にCompositionをローカルでレンダリングします。
-
レディネスチェックを実装 — function-auto-detect-readyまたはカスタムレディネスチェックを使用して、コンポジットリソースが正確なステータスを報告するようにします。
-
XRDをバージョニング — v1alpha1から始めて、APIが安定するにつれてv1beta1、v1へと昇格させます。