CrossplaneとIaCを使用して、クラウドとKubernetesをコーディファイする

組織がクラウドネイティブアプリケーション向けにKubernetesを採用するにつれて、インフラストラクチャを効率的に管理することが難しくなります。Terraform、Pulumiなどの従来のインフラストラクチャコード(IaC)ツールは宣言型の構成を提供しますが、Kubernetesネイティブのワークフローにシームレスに統合されていません。

Crossplaneは、このような状況でKubernetesとクラウドインフラストラクチャとの間のギャップを効果的に埋めるものです。このブログでは、CrossplaneがKubernetesおよびそれ以上のためにIaCをどのように可能にするかを探求します。

Crossplaneとは何か?

Crossplaneは、Kubernetesのオープンソースアドオンであり、KubernetesのCustom Resource Definitions(CRD)およびKubernetes APIを使用してクラウドインフラストラクチャをプロビジョニングおよび管理できるようにします。Terraformスクリプトが外部で実行されるように従来のIaCツールとは異なり、Crossplaneはインフラストラクチャ管理をKubernetesに埋め込んでいます。これにより、真に宣言型でGitOpsに対応しています。

ユースケース:Terraform vs. Crossplane

いつTerraformを使用するか?

  • Kubernetesの外でインフラストラクチャを管理するのに最適
  • 従来のマルチクラウド展開やVMに最適
  • 幅広いモジュールやプロバイダを備えた強力なエコシステム
  • Ansible、Packer、Vaultなどのツールとの組み合わせに適しています

Crossplaneの使用タイミング

  • Kubernetes中心の環境に最適
  • GitOpsワークフローに最適(ArgoCD、Flux)
  • Kubernetes CRDを介したセルフサービスプロビジョニングを可能にする
  • クラウドサービスをK8s API経由で管理するマルチクラウドKubernetes制御に適しています

Crossplaneを使用開始する方法

このサンプルでは、minikubeを使用します。ただし、同じ手順は任意のKubernetesに適用できます。

ステップ1:KubernetesでMySQLを展開する

1. Crossplaneを使用して構成するためのサービス付きのDeploymentとしてMySQLを展開します。別の場所から展開されたMySQLを使用することもできます。

2. MySQLデプロイメントを実行するには、シークレット、デプロイメント、およびサービスを作成するmysql-deployment.yamlを定義します。

YAML

 

3. YAMLファイルを適用するには、kubectl apply -f mysql-deployment.yamlコマンドを使用します。

4. ポッドが稼働していることを確認するには、kubectl get podsコマンドを使用します。

5. MySQLデプロイメントを確認するために一時的なSQLポッドを起動して、MySQL接続を確認します。クライアントを作成するには、kubectl run mysql-client --image=mysql:8.0 -it --rm -- bashコマンドを使用します。

6. ポッド内でMySQLに接続するには、mysql -h mysql-service.default.svc.cluster.local -uroot -ppasswordコマンドを使用します。

ステップ2: KubernetesにCrossplaneをインストールする

1. Helmを使用してCrossplaneをインストールします:

Shell

 

:Crossplaneの立ち上げに数分かかります。

2. 次のコマンドを使用して、Crossplaneのインストールを確認します:kubectl get pods -n crossplane-system

ステップ3: SQL用のCrossplaneプロバイダをインストールする

1. 以下のYAMLコンテンツを使用してMySQLプロバイダを定義します。

YAML

 

2. 次のコマンドを使用してプロバイダを作成します:kubectl apply -f provider.yaml

3. 次のコマンドを使用してプロバイダを確認します:kubectl get pods -n crossplane-systemおよびkubectl get providers

:SQLプロバイダの立ち上げに数分かかります。

ステップ4:Crossplane MySQLプロバイダを構成する

プロバイダ構成は、CrossplaneがMySQLと認証する方法を示します。プロバイダの使用のために作成されるシークレットを定義します。以下のYAML内のstringDataを適切に更新します。次のコマンドを使用してYAMLを適用します:kubectl apply -f mysql-secret.yaml

YAML

 

上記のシークレットを使用するCrossplaneのプロバイダ構成を適用します。次のコマンドを使用して適用します:kubectl apply -f providerconfig.yaml

YAML

 

プロバイダ構成の作成を確認するために、次のコマンドを使用します — kubectl get providerconfigs.mysql.sql.crossplane.ioおよびkubectl get crds | grep providerconfig

ステップ5. Crossplaneを使用してMySQLデータベースを作成する

Crossplaneを使用して新しいデータベースをプロビジョニングします。以下のYAMLを使用して、kubectl apply -f mysqlinstance.yamlを適用してください。

YAML

 

ステップ6: データベースの作成を確認する

コマンドkubectl get database.mysql.sql.crossplane.io/my-databaseを使用してデータベースの作成を確認してください。

データベースの作成を確認するためにMySQLに接続するためのステップ1で述べられた同じ確認手順を使用してください。

上記の手順で、Crossplaneをインストールし、MySQLプロバイダを構成し、Crossplaneを使用してデータベースをプロビジョニングしました。

TerraformとCrossplaneは一緒に動作できますか?

TerraformとCrossplaneは多くのシナリオで一緒に使用できます。

シナリオ1

完全なIaCシナリオでは、Terraformを使用してKubernetesクラスタをブートストラップし、その後、Crossplaneを使用してKubernetes内からクラウドリソースを管理できます。 TerraformはCrossplane自体をデプロイすることもできます。このハイブリッドワークフローの例は

シナリオ2

CrossplaneはTerraformプロバイダーもサポートしており、CrossplaneのIaCモデルの一部としてTerraformスクリプトを実行するために使用できます。 Crossplaneのネイティブプロバイダーがまだ特定のクラウドリソースや機能をサポートしていないシナリオでは、CrossplaneのためにTerraformプロバイダーを実行することが役立ちます。 CrossplaneのTerraformプロバイダーを実行する理由は以下の通りです:

  • Terraformには多くのクラウドサービスをサポートするプロバイダーの生態系があり、Crossplaneがまだネイティブプロバイダーを持っていないクラウドサービスをサポートしています。
  • 組織が既にインフラ管理のためにTerraformを使用している場合、すべてをCrossplane CRDで書き直す必要はありません。
  • Crossplaneはマルチクラウド管理をサポートしていますが、ネイティブプロバイダーがすべてのオンプレミスやSaaS統合をカバーしていないかもしれません。
  • TerraformからCrossplaneに徐々に移行する組織にとって、Crossplane内でTerraformプロバイダーを使用することは完全な移行前のハイブリッドソリューションとして機能する可能性があります。
  • Crossplane内でTerraformを実行することで、TerraformをKubernetesの宣言型GitOpsモデルの下にもたらすことができます。

Crossplaneを使用してIBM Cloud Cloudant DBを作成する手順

ステップ1. Terraformプロバイダーを定義します。

YAML

 

ステップ2. プロバイダーを構成します。

YAML

 

ステップ3. Crossplaneの一部としてTerraformスクリプトを使用してIBM CloudでCloudant DBをプロビジョニングします。

YAML

 

これにより、IBM Cloudでcrossplanecloudantという名前のCloudant DBがプロビジョニングされます。

Crossplaneがプラットフォームエンジニアリングにどのように適合するか

プラットフォームエンジニアリングは、インフラストラクチャ管理やアプリケーション展開を簡素化する内部開発者プラットフォーム(IDP)の構築と維持に焦点を当てています。Crossplaneは、Kubernetesネイティブアプローチを可能にすることで、これに大きな役割を果たしています。

Crossplaneは、クラウドリソースの宣言的、セルフサービス、ポリシードリブンなプロビジョニングを保証します。K8s APIを使用した宣言的インフラストラクチャ、インフラとアプリケーションのためのカスタム抽象化、セキュリティおよびコンプライアンスの保護、バージョン管理された自動デプロイメント、および継続的なドリフト修正などのCrossplaneの機能がプラットフォームエンジニアリングを支援します。

結論

Crossplaneは、IaCをKubernetesエコシステムに取り込むことで、クラウドインフラストラクチャの管理方法を変革します。Kubernetes APIは、クラウドリソースのプロビジョニングと管理に対して真に宣言的でGitOps駆動のアプローチを可能にします。既にKubernetesを使用しており、IaC戦略を現代化したい場合は、Crossplaneを是非探ってみる価倀があります。

Source:
https://dzone.com/articles/codify-cloud-kubernetes-crossplane-iac