コンテンツに移動
Anthos

Anthos on GKE を Terraform でデプロイする パート 3: クラウド リソースのプロビジョニングの有効化

2021年10月20日
https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_Anthos_A.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2021 年 10 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。

本シリーズではこれまで 2 回に分けて(12)、GCP 向け Terraform プロバイダの新機能により、プラットフォーム管理者が Terraform の自動化機能を拡張し、Anthos Config Management(ACM)機能を GKE クラスタへ追加することを容易に実現できるようになる仕組みを説明しました。使い慣れた Terraform リソースの構文を使用して、google_gke_hub_feature および google_gke_hub_feature_membership リソースを追加し、後者に configmanagement セクションを含めることで、GitOps 統合用の Config Sync、ポリシー検証用の policy_controller セクションを指定することができるようになります。

読み込んでいます...

このシリーズで扱ってきたサンプル クラスタは、Kubernetes ネイティブのリソースである、クラスタ内 MySQL データベースをバックエンドとしたコンテナ化 Wordpress アプリケーションからなる構成をホストするためのみに使用されていました。Kubernetes のメリットである、継続的な調整、構成ブレ補正、結果整合性、順序非依存性、べき等性のすべてを活用しています。また、リポジトリを信頼できる情報源として使用し、確認可能でバージョン管理されたワークフローを可能にすることで、GitOps のアプローチのメリットも享受しています。

これを次のステップへと高めましょう。同じモデルを拡張して、ネイティブの Kubernetes リソース(Kubernetes サービス アカウント、Pod、Deployment)だけでなく、GCP クラウド リソース、つまり Cloud デーベース、ストレージ バケット、VM インスタンスなど、その他多くの GCP リソースの作成と管理も可能であることを実証していきます。Config Connector が 2020 年にリリースされてから、多くの Kubernetes ショップはこの便利な GCP リソースの管理方法を採用しています。ここまでに Terraform の Anthos 機能サポートを有効化したことに加え、クラスタで Config Connector をインストールするための Terraform 構成オプションを設定することで、ネイティブとクラウドのリソースにまたがる完全な GitOps ワークフローと Kubernetes ライフサイクルを、クラスタ作成中に有効化できるようになりました。

このサンプルでは、gke Terraform モジュール内の config_connector 設定を使用して Config Connector を有効化しています。また、workload-identity モジュールを使用して、K8s リソースに変更を加えて Kubernetes サービス アカウント(cnrm-system namespace の cnrm-controller-manager)にバインディングするために使用される、GCP サービス アカウントを作成します。GCP サービス アカウントには適切な権限を選択できます。このサンプルでは、わかりやすくするために オーナーのロールを付与しています。

読み込んでいます...

Config Sync を介してクラスタと同期された、リポジトリ内の今回分の変更点を確認しましょう。パート 1 では、すべてが Kubernetes ネイティブ オブジェクトである構成の集合を追加しました。これらの構成により、クラスタ内 Wordpress アプリケーションと、クラスタ内 MySQL データベースがプロビジョニングされました。パート 2 では、クラスタの監査のために PolicyController が使用する一連のルールを追加しました。今回は、まず Config Connector を設定して Cloud SQL データベースと他の GCP リソースを作成します。最初に、Config Connector アドオンのインスタンスを表す構成を追加します。クラスタでアドオンを有効化する際、この構成インスタンスが必要になります。mode(cluster または namespace)と GCP サービス アカウントなどの設定を指定し、先ほど workload-identity モジュールを使用して作成した cnrmsa アカウントにリンクします。

読み込んでいます...

これで、クラスタ内のネイティブ リソースに加えて、K8s 構成に直接、GCP リソースを作成できるようになりました。SQLDatabaseSQLInstance リソースを構成します。

読み込んでいます...

SQLUserIAMPolicyIAMPolicyMemberこちらでサンプル全体を確認)も同様です。全体として、Config Connector で 130 種類以上のリソースがサポートされ、最も一般的な GCP 構成パターンの多くに対応できます。

この構成は、この特定のプロジェクト向けに拡張およびパラメータ化されているのがわかります。パラメータ値はどのようにして指定したでしょうか。HelmKustomize などの多くのツールが使用でき、一部は組み合わせて使用しますが、configuration-as-data の原理を全面的に採用した Kpt をおすすめします。このサンプルでは、set-project-id kpt 機能を使用して、Git に変更を送信する前に config-root ディレクトリでプロジェクト ID を指定しました。
読み込んでいます...

このリポジトリは、今回は GCP MySQL データベースを活用した、WordPress 構成を含むリポジトリと同期したクラスタをプロビジョニングする、完全な例を示しています。

この記事は、ACM 機能の Terraform サポートについてと、それがプラットフォーム管理者によるクラスタのプロビジョニングをどのように簡素化できるのかを紹介した、3 部作の最後となる第 3 部です。

- エンジニアリング マネージャー Alex Bulankou

- エンジニアリング マネージャー Steven Linde

投稿先