フリート全体にリソースをデプロイする
このチュートリアルでは、フリート パッケージを使用して、クラスタのフリート全体に Kubernetes リソース マニフェストをデプロイする方法について説明します。Config Sync のフリート パッケージなどの GitOps ツールを使用すると、多数のクラスタにわたって構成管理をスケールアップできます。
このチュートリアルでは、次のタスクを行います。
- Git リポジトリを Cloud Build に接続する
- クラスタを作成してフリートに登録する
- Config Sync をフリートのデフォルトとしてインストールする
- リポジトリからクラスタのフリートにリソースをデプロイする
始める前に
-
Google Cloud CLI をインストールします。
-
フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。
詳細については、連携 ID を使用して gcloud CLI にログインするをご覧ください。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクトを作成します。 Google Cloud
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
GKE、Config Delivery(フリート パッケージ)、Cloud Build、Developer Connect API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。gcloud services enable container.googleapis.com
configdelivery.googleapis.com cloudbuild.googleapis.com developerconnect.googleapis.com - GitHub アカウントを作成するか、アカウントへのアクセス権を取得します。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
Git に接続する
Git リポジトリには、フリート全体にデプロイするリソースが含まれています。フリート パッケージを使用してこうしたリソースをデプロイするには、Git リポジトリを Cloud Build に接続する必要があります。
Git リポジトリを作成する
このチュートリアルでは、Git プロバイダとして GitHub を使用します。新しい GitHub リポジトリを作成する手順は次のとおりです。
ウェブブラウザで GitHub を開きます。
必要に応じて GitHub アカウントにログインします。GitHub で他の組織またはチームにアクセスできる場合は、個人アカウントでリポジトリを作成していることを確認してください。
ツールバーから、[Create new...] add ボタンを選択し、 [New repository] をクリックします。
リポジトリの名前として「
fleet-package-tutorial」と入力します。リポジトリの公開設定として [公開] を選択したままにします。
[リポジトリを作成] を選択します。
リポジトリを Cloud Build に接続する
Config Sync のフリート パッケージ サービスは、Cloud Build を使用して Git リポジトリから Kubernetes リソースを同期して取得します。
GitHub リポジトリを Cloud Build に接続するには、次の手順を行います。
Google Cloud コンソールで Cloud Build ページを開き、[リポジトリ] を選択します。
第 2 世代の [リポジトリ] ページに移動します。必要に応じて、[リポジトリ(第 2 世代)を表示] を選択します。
[ホスト接続を作成] をクリックします。
[リージョン] メニューで、リージョンとして [us-central1(アイオワ)] を選択します。
[名前] フィールドに、接続の名前として「
fleet-package-quickstart-connection」を入力します。[接続] をクリックします。
Cloud Build を GitHub アカウントに初めて接続する場合は、次の操作を行います。
- GitHub OAuth トークンのリクエストを承認します。トークンは、Cloud Build GitHub 接続で使用するために Secret Manager に保存されます。[続行] をクリックします。
- GitHub リポジトリに Cloud Build をインストールします。[新しいアカウントでインストール] を選択します。
- 新しい GitHub ウィンドウが開きます。ここで、先ほど Cymbal Bank のフォークを作成した GitHub アカウントを選択します。本番環境では、アクセス権を委任された他のアカウントまたはリポジトリを選択できます。
- 認証プロンプトに従って、GitHub で本人確認を行います。
- Cloud Build リポジトリ アクセスの GitHub ウィンドウで、[Only select repositories] を選択します。
- リポジトリが一覧表示されたプルダウン メニューから、
fleet-package-tutorialリポジトリを選択します。 - [保存] をクリックします。
Google Cloud コンソールの Cloud Build ページで、[リポジトリをリンク] をクリックして、新しい Git リポジトリを Cloud Build に接続します。
[接続] メニューで、[
fleet-package-quickstart-connection] を選択します。[リポジトリ] メニューで、
fleet-package-tutorialリポジトリを選択します。[リンク] をクリックします。
フリートを設定する
このセクションでは、クラスタを作成してフリートに登録し、Config Sync をフリート パッケージとしてインストールすることで、フリートを設定します。
クラスタを作成する
このチュートリアルでは、フリート パッケージを使用して複数のクラスタにリソースをデプロイする方法を示すために、2 つのクラスタを作成する方法について説明します。
2 つのクラスタを作成してプロジェクトのフリートに登録するには:
GKE クラスタを作成します。
gcloud container clusters create-auto cluster1 \ --project=PROJECT_ID \ --region=REGION \ --fleet-project=PROJECT_ID \ --release-channel=rapid次のように置き換えます。
PROJECT_ID: プロジェクト ID。REGIONは、クラスタを作成するリージョン(us-central1など)に置き換えます。
2 番目の GKE クラスタを作成します。
gcloud container clusters create-auto cluster2 \ --project=PROJECT_ID \ --region=REGION \ --fleet-project=PROJECT_ID \ --release-channel=rapid
Config Sync をフリートのデフォルトとしてインストールする
フリート パッケージ サービスを使用するには、両方のクラスタに Config Sync がインストールされている必要があります。次の手順を行うと、Config Sync を複数のクラスタに一度にインストールできます。また、今後フリートに登録されるクラスタにもインストールできます。
Google Cloud コンソールで、[機能マネージャー] ページに移動します。
[Config Sync] ペインで、[構成] をクリックします。
[フリートの設定をカスタマイズ] をクリックします。表示されるダイアログで、インストールする Config Sync のバージョンを選択します。
[構成] をクリックします。
[フリートの設定を構成] 確認ダイアログで、[確認] をクリックします。以前に Config Sync を有効にしていない場合は、[確認] をクリックして
anthosconfigmanagement.googleapis.comAPI を有効にします。[フリート内のクラスタ] テーブルで、両方のクラスタを選択し、[フリートの設定に同期] をクリックします。これにより、構成した設定で両方のクラスタに Config Sync がインストールされます。
クラスタの同期には数分かかることがあります。Config Sync が [インストール済み] と表示されたら、次の手順に進みます。
Cloud Build のサービス アカウントを設定する
サービス アカウントを作成して Cloud Build に必要な権限を付与する手順は次のとおりです。
サービス アカウントを作成します。
gcloud iam service-accounts create "quickstart-service-account"リソース バンドル パブリッシャー ロールの IAM ポリシー バインディングを追加して、Git リポジトリからリソースを取得する権限をサービス アカウントに付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:quickstart-service-account@PROJECT_ID." \ --role='roles/configdelivery.resourceBundlePublisher'メッセージが表示されたら、ポリシーの条件として
Noneを選択します。ログ書き込みロールの IAM ポリシー バインディングを追加して、サービス アカウントにログの書き込み権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:quickstart-service-account@PROJECT_ID." \ --role='roles/logging.logWriter'メッセージが表示されたら、ポリシーの条件として
Noneを選択します。Artifact Registry 書き込みロールの IAM ポリシー バインディングを追加します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:quickstart-service-account@PROJECT_ID." \ --role='roles/artifactregistry.writer'メッセージが表示されたら、ポリシーの条件として
Noneを選択します。
フリート全体にリソースをデプロイする
このチュートリアルでは、nginx デプロイを含む Kubernetes マニフェストを Git リポジトリに追加し、リリースを公開してから、nginx アプリケーションをデプロイするフリート パッケージを作成します。
Kubernetes マニフェストをリポジトリに commit する
リソースを GitHub に追加してリリースを公開する手順は次のとおりです。
GitHub リポジトリのウェブブラウザ ウィンドウで、[Add file]、[Create new file] の順にクリックします。
ファイルに
deployment.yamlという名前を付け、次のコンテンツを貼り付けます。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:1.14.2 name: nginx ports: - containerPort: 80[Commit changes...] をクリックします。
確認ダイアログで、[Commit directly to the
mainbranch] を選択したままにして、[Commit changes] をクリックします。リポジトリのメインページで、サイドバーから [Releases] を選択します。
ページの上部で [Draft a new release] を選択します。
[Choose a tag] メニューを選択し、タグとして「
v1.0.0」と入力します。[Create new tag] をクリックします。[Publish release] をクリックします。
フリート パッケージを使用してリソースをクラスタにデプロイする
新しいリソースをデプロイするには、新しいフリート パッケージを作成します。
このフリート パッケージは、クラスタ セレクタ(
target.fleetセクション)を定義していないため、フリート内のすべてのクラスタをターゲットにします。デプロイ バリアント(deployment.yamlファイルから派生)をこれらのすべてのクラスタにデプロイするように構成されています。Cloud Shell で、次の内容を含むファイルを
fleet-package.yamlという名前で作成します。resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/fleet-package-quickstart-connection/repositories/REPOSITORY_NAME tag: v1.0.0 serviceAccount: projects/PROJECT_ID/serviceAccounts/quickstart-service-account@PROJECT_ID. path: # Match all files (including deployment.yaml) to generate variants variantsPattern: "*.yaml" target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: 1 variantSelector: # Explicitly match the variant generated from "deployment.yaml" variantNameTemplate: "deployment"REPOSITORY_NAMEは、Cloud Build のリポジトリ名に置き換えます。通常はUSERNAME-REPOSITORY_NAME形式です。フリート パッケージを作成して、ロールアウトを開始します。
gcloud container fleet packages create fp-nginx \ --source=fleet-package.yaml \ --project=PROJECT_IDフリート パッケージが作成されたことを確認します。
gcloud container fleet packages list表示されたリンクをクリックすると、Cloud Build ジョブのストリーミング ログを表示できます。
フリート パッケージが、フリート全体で Kubernetes リソースのロールアウトを開始します。
Google Cloud コンソールの [Google Kubernetes Engine] ページで、[ワークロード] ページに移動すると、すべての GKE クラスタにデプロイされているワークロードの集約ビューが表示されます。
ワークロードが使用可能になるまでに数分かかることがあります。Autopilot が新しいデプロイのリソース リクエストを調整しているときに、可用性エラーが発生することもあります。
フリート パッケージ定義で
maxConcurrent:が1に設定されているため、フリート パッケージ API は、1 つのクラスタにnginx-deploymentが完全にデプロイされるまで待機してから、2 番目のクラスタへのデプロイを開始します。ロールアウト戦略をmaxConcurrent: 2以上に変更した場合、リソースは両方のクラスタに同時にデプロイされます。数分後、両方のクラスタの
nginx-deploymentに 2 つの新しいワークロードが表示されます。ページの更新が必要になる場合があります。
フリート パッケージを使用した別のデプロイ戦略も考えてみましょう。たとえば、フリートに新しいクラスタを追加して、ワークロードがその新しいクラスタに自動的にデプロイされることを確認できます。デプロイ戦略とバリエーションの詳細については、フリート パッケージをデプロイするをご覧ください。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。
- コンソール Google Cloud で [**リソースの管理**] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
リポジトリを削除するには、次の操作を行います。
GitHub リポジトリのウェブブラウザ ウィンドウで、リポジトリ名の下にある [Settings] をクリックします。
[General settings] ページ(デフォルトで選択されています)で、[Danger Zone] セクションに移動し、[Delete this repository] をクリックします。
[I want to delete this repository] をクリックします。
警告を読み、[I have read and understand these effects] をクリックします。
削除されるリポジトリが正しいことを確認するには、テキスト フィールドに、リポジトリの名前を入力します。
[Delete this repository] をクリックします。
次のステップ
- フリート パッケージの詳細を確認する。
- フリート パッケージをデプロイする方法の詳細を確認する。
- スケーラビリティが高いアプリのチュートリアルを試す。これは、GKE で最新のアプリケーション環境のデプロイ、実行、管理を行う方法を学ぶ一連のチュートリアルです。これには、フリート パッケージを使用して構成変更をスケールアップする方法を説明するチェンジ マネジメントを一元化するチュートリアルが含まれています。