フリート全体にリソースをデプロイする

このチュートリアルでは、フリート パッケージを使用して、クラスタのフリート全体に Kubernetes リソース マニフェストをデプロイする方法について説明します。Config Sync のフリート パッケージなどの GitOps ツールを使用すると、多数のクラスタにわたって構成管理をスケールアップできます。

このチュートリアルでは、次のタスクを行います。

  • Git リポジトリを Cloud Build に接続する
  • クラスタを作成してフリートに登録する
  • Config Sync をフリートのデフォルトとしてインストールする
  • リポジトリからクラスタのフリートへリソースをデプロイする

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To use a federated identity with the gcloud CLI, you must first configure the tool to use a federated identity.

    For more information, see Browser-based sign-in with the gcloud CLI.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE Enterprise, Config Delivery (fleet packages), Cloud Build, Developer Connect APIs:

    gcloud services enable anthos.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  8. Install the Google Cloud CLI.
  9. To use a federated identity with the gcloud CLI, you must first configure the tool to use a federated identity.

    For more information, see Browser-based sign-in with the gcloud CLI.

  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the GKE Enterprise, Config Delivery (fleet packages), Cloud Build, Developer Connect APIs:

    gcloud services enable anthos.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  14. GitHub アカウントを作成するか、アカウントへのアクセス権を取得します。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

Git に接続する

Git リポジトリには、フリート全体にデプロイするリソースが含まれています。これらのリソースをフリート パッケージでデプロイするには、Git リポジトリを Cloud Build に接続する必要があります。

Git リポジトリを作成する

このチュートリアルでは、Git プロバイダとして GitHub を使用します。新しい GitHub リポジトリを作成するには、次の操作を行います。

  1. ウェブブラウザで GitHub を開きます。

  2. 必要に応じて GitHub アカウントにログインします。GitHub で他の組織またはチームにアクセスできる場合は、個人アカウントでリポジトリを作成していることを確認してください。

  3. ツールバーで [追加] を選択し、[新しいリポジトリ] をクリックします。

  4. リポジトリの名前として fleet-package-tutorial と入力します。

  5. リポジトリの公開設定は [公開] のままにします。

  6. [リポジトリを作成] を選択します。

リポジトリを Cloud Build に接続する

Config Sync のフリート パッケージ サービスは、Cloud Build を使用して Git リポジトリから Kubernetes リソースを同期して取得します。

GitHub リポジトリを Cloud Build に接続するには、次の操作を行います。

  1. Google Cloud コンソールで Cloud Build ページを開き、[リポジトリ] を選択します。

    [リポジトリ] ページを開く

  2. 第 2 世代の [リポジトリ] ページに移動します。必要に応じて、[リポジトリ(第 2 世代)を表示] を選択します。

  3. [ホスト接続を作成] をクリックします。

  4. [リージョン] メニューで、リージョンとして [us-central1(アイオワ)] を選択します。

  5. [名前] フィールドに、接続の名前として「fleet-package-quickstart-connection」を入力します。

  6. [接続] をクリックします。

  7. Cloud Build を GitHub アカウントに初めて接続する場合は、次の操作を行います。

    1. GitHub OAuth トークンのリクエストを承認します。トークンは、Cloud Build GitHub 接続で使用するために Secret Manager に保存されます。[続行] をクリックします。
    2. GitHub リポジトリに Cloud Build をインストールします。[新しいアカウントでインストール] を選択します。
    3. 新しい GitHub ウィンドウが開きます。ここで、先ほど Cymbal Bank のフォークを作成した GitHub アカウントを選択します。本番環境では、アクセス権を委任された他のアカウントまたはリポジトリを選択できます。
    4. 認証プロンプトに従って、GitHub で本人確認を行います。
    5. Cloud Build リポジトリ アクセスの GitHub ウィンドウで、[Only select repositories] を選択します。
    6. リポジトリの一覧が表示されたプルダウン メニューから、fleet-package-tutorial リポジトリを選択します。
    7. [保存] をクリックします。
  8. Google Cloud コンソールの Cloud Build ページで、[リポジトリをリンク] をクリックして、新しい Git リポジトリを Cloud Build に接続します。

  9. [接続] メニューで、[fleet-package-quickstart-connection] を選択します。

  10. [リポジトリ] メニューで、fleet-package-tutorial リポジトリを選択します。

  11. [リンク] をクリックします。

フリートを設定する

このセクションでは、クラスタを作成してフリートに登録し、Config Sync をフリート パッケージとしてインストールして、フリートを設定します。

クラスタを作成する

このチュートリアルでは、フリート パッケージを使用して複数のクラスタにリソースをデプロイする方法を示します。そのために、2 つのクラスタを作成します。

2 つのクラスタを作成してプロジェクトのフリートに登録するには:

  1. 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. 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 を一度にインストールするには、次の操作を行います。

  1. Google Cloud コンソールで、[機能マネージャー] ページに移動します。

    機能マネージャーに移動

  2. [Config Sync] ペインで、[構成] をクリックします。

  3. [フリートの設定をカスタマイズ] をクリックします。表示されたダイアログで、[自動アップグレード] を選択します。この設定により、クラスタにフリート パッケージをサポートする Config Sync バージョンが確実にインストールされます。

  4. [変更を保存] をクリックします。

  5. [構成] をクリックします。

  6. [フリートの設定を構成] 確認ダイアログで、[確認] をクリックします。以前に Config Sync を有効にしていない場合は、[確認] をクリックして anthosconfigmanagement.googleapis.com API を有効にします。

  7. [フリート内のクラスタ] テーブルで、両方のクラスタを選択し、[フリートの設定に同期] をクリックします。これにより、構成した設定で両方のクラスタに Config Sync がインストールされます。

    クラスタの同期には数分かかることがあります。Config Sync が [インストール済み] と表示されたら、次のステップに進みます。

Cloud Build のサービス アカウントを設定する

サービス アカウントを作成して Cloud Build に必要な権限を付与する手順は次のとおりです。

  1. サービス アカウントを作成します。

    gcloud iam service-accounts create "quickstart-service-account"
    
  2. リソース バンドル パブリッシャー ロールの IAM ポリシー バインディングを追加して、Git リポジトリからリソースを取得する権限をサービス アカウントに付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/configdelivery.resourceBundlePublisher'
    

    メッセージが表示されたら、ポリシーの条件として None を選択します。

  3. ログ書き込みロールの IAM ポリシー バインディングを追加して、サービス アカウントにログの書き込み権限を付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/logging.logWriter'
    

    メッセージが表示されたら、ポリシーの条件として None を選択します。

フリート全体にリソースをデプロイする

このチュートリアルでは、nginx Deployment を含む Kubernetes マニフェストを Git リポジトリに追加し、リリースを公開してから、フリート パッケージを作成して nginx アプリケーションをデプロイします。

Kubernetes マニフェストをリポジトリに commit する

リソースを GitHub に追加してリリースを公開する手順は次のとおりです。

  1. GitHub リポジトリのウェブブラウザ ウィンドウで、[Add file]、[Create new file] の順にクリックします。

  2. ファイルに 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
    
  3. [Commit changes...] をクリックします。

  4. 確認ダイアログで、[Commit directly to the main branch] を選択したままにして、[Commit changes] をクリックします。

  5. リポジトリのメインページで、サイドバーから [Releases] を選択します。

  6. ページの上部で [Draft a new release] を選択します。

  7. [Choose a tag] メニューを選択し、タグとして「v1.0.0」と入力します。[Create new tag] をクリックします。

  8. [Publish release] をクリックします。

フリート パッケージを使用してリソースをクラスタにデプロイする

新しいリソースをデプロイするには、新しいフリート パッケージを作成します。

  1. このフリート パッケージにはセレクタ フィールドがないため、フリート内のすべてのクラスタがターゲットになります。また、フリートに追加されるクラスタには、nginx Deployment が自動的に追加されます。

    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.iam.gserviceaccount.com
        path:
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    

    REPOSITORY_NAME は、Cloud Build のリポジトリ名に置き換えます。通常は USERNAME-REPOSITORY_NAME の形式です。

  2. フリート パッケージを作成して、ロールアウトを開始します。

    gcloud alpha container fleet packages create fp-nginx.yaml \
       --source=fleet-package.yaml \
       --project=PROJECT_ID
    
  3. フリート パッケージが作成されたことを確認します。

    gcloud alpha container fleet packages list
    

    表示されたリンクをクリックすると、Cloud Build ジョブのストリーミング ログを表示できます。

    フリート パッケージが、フリート全体で Kubernetes リソースのロールアウトを開始します。

  4. Google Cloud コンソールの Google Kubernetes Engine ページで、[ワークロード] ページに移動すると、すべての GKE クラスタにデプロイされているワークロードの集約ビューが表示されます。

    [ワークロード] ページを開く

    ワークロードが使用可能になるまで数分かかることがあります。Autopilot が新しいデプロイメントのリソース リクエストを調整するときに、可用性エラーが発生することもあります。

    フリート パッケージ定義で maxConcurrent:1 に設定されているため、フリート パッケージ API は、nginx-deployment が 1 つのクラスタに完全にデプロイされるまで待ってから、2 番目のクラスタへのデプロイを開始します。ロールアウト戦略を maxConcurrent: 2 以上に変更すると、リソースは両方のクラスタに同時にデプロイされます。

    数分後、両方のクラスタに nginx-deployment の新しいワークロードが 2 つ表示されます。ページの更新が必要になる場合があります。

フリート パッケージを使用した別のデプロイ戦略も考えてみましょう。たとえば、フリートに新しいクラスタを追加して、ワークロードがその新しいクラスタに自動的にデプロイされることを確認できます。デプロイ戦略とバリエーションの詳細については、フリート パッケージをデプロイするをご覧ください。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。

このチュートリアルで使用したリソースに対して Google Cloud アカウントに課金されないようにするには、作成したプロジェクトを削除します。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

リポジトリを削除する手順は次のとおりです。

  1. Cymbal Bank の GitHub フォークのウェブブラウザ ウィンドウで、リポジトリ名の下にある [Settings] をクリックします。

  2. [General settings] ページ(デフォルトで選択されています)で、[Danger Zone] セクションに移動し、[Delete this repository] をクリックします。

  3. [I want to delete this repository] をクリックします。

  4. 警告を読み、[I have read and understand these effects] をクリックします。

  5. 削除されるリポジトリが正しいことを確認するには、テキスト フィールドに、リポジトリの名前を入力します。

  6. [Delete this repository] をクリックします。

次のステップ