フリート パッケージについて

このページでは、フリート パッケージ、FleetPackage API、およびそれらが Config Sync とどのように関連しているかについて説明します。

FleetPackage は、フリート全体でパッケージを管理できる宣言型 API です。フリート パッケージは、クラスタ構成を定義する Kubernetes YAML マニフェストのセットです。フリート パッケージを使用すると、フリートに登録されているクラスタに、一括ロールアウトまたは段階的なロールアウトでパッケージをデプロイできます。

FleetPackage オブジェクトを 1 回定義すると、そのパッケージを新しいリビジョンで更新できます。新しいリビジョンを適用すると、フリート パッケージ サービスがこれらの変更を取得し、クラスタにデプロイします。

利点

フリート パッケージを使用して、フリートに登録されているクラスタに Kubernetes リソースをデプロイします。フリート パッケージを作成して適用すると、フリート パッケージは Git リポジトリ内の Kubernetes 構成ファイルを新しいクラスタに自動的にデプロイします。フリート パッケージは、ドリフトの自動修正などの Config Sync のメリットを基盤とし、次のような独自のメリットを提供します。

  • リソースのロールアウトを自動化: フリート パッケージを設定すると、フリート パッケージ サービスによって、フリート パッケージが参照する Kubernetes リソースがすべてのクラスタに自動的にデプロイされます。

  • 新しいクラスタを自動的に構成する: フリート パッケージを構成してから、後でフリートに新しいクラスタを追加すると、フリート パッケージで定義されたリソースが新しいクラスタに自動的にデプロイされます。

  • Kubernetes 構成を大規模に管理する: クラスタを 1 つずつ管理するのではなく、フリート パッケージを使用して、クラスタのフリート全体にリソースをデプロイします。

  • 不適切な変更の影響を最小限に抑える: リソースを一度にデプロイするクラスタの最大数を選択します。各クラスタの変更を綿密にモニタリングして、誤った変更がフリート全体に影響しないようにします。

  • Config Sync の構成を簡素化: フリート パッケージは Cloud Build を使用して Git の認証を行うため、RootSync オブジェクトまたは RepoSync オブジェクトごとに 1 回ではなく、プロジェクトごとに 1 回認証を行う必要があります。

次のいずれかのシナリオに該当する場合は、フリート パッケージではなく、RootSync オブジェクトまたは RepoSync オブジェクトで Config Sync を使用することをおすすめします。

  • 管理するクラスタが少ない。

  • フリート パッケージ API がラベルとバリアントを使用して提供する以上の方法で、リソースをクラスタにデプロイする方法を制御する必要がある。

要件と制限事項

  • フリート パッケージを構成する場合、信頼できる情報源としてサポートされるのは Git リポジトリのみです。

  • Git に保存されている Kubernetes リソースは、リソースの最終状態を表す必要があります。Git に保存されているリソースを変換する追加のオーバーレイはサポートされていません。これらのリソースの違いの詳細については、ベスト プラクティス: WET リポジトリを作成するをご覧ください。

  • FleetPackage API は us-central1 リージョンでのみ使用できます。異なるリージョンのクラスタにデプロイすることはできますが、Cloud Build を設定し、us-central1 で gcloud CLI を構成する必要があります。

アーキテクチャ

FleetPackage API を使用して、Kubernetes マニフェストをクラスタのフリート全体にデプロイできます。FleetPackage API は、Cloud Build を使用して Git リポジトリから Kubernetes リソースを同期して取得します。フリート パッケージ サービスは、これらのリソースをクラスタにデプロイします。

Git で Kubernetes リソースがクラスタのフリートと同期されるフローを示した図

サンプル ユースケース

フリート パッケージを使用すると、Git リポジトリからクラスタのフリート全体にリソースをデプロイできます。フリート パッケージを構成して、デプロイするリソースの種類、方法、場所を制御することもできます。

次のセクションでは、さまざまな FleetPackage 構成の例を示します。フリート パッケージの適用の詳細については、フリート パッケージをデプロイするをご覧ください。

フリート内のすべてのクラスタへのデプロイ

次の FleetPackage は、ローリング ストラテジーを使用して、Kubernetes リソースを一度に 3 つのクラスタにデプロイし、フリート内のすべてのクラスタをターゲットにします。

resourceBundleSelector:
  cloudBuildRepository:
    name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
    tag: v1.0.0
    serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
  fleet:
    project: projects/my-project
rolloutStrategy:
  rolling:
    maxConcurrent: 3

クラスタのサブセットへのデプロイ

次の FleetPackage は、ラベルセレクタを使用して、フリート内の "us" と一致するメンバーシップ ラベル country を持つクラスタにのみ Kubernetes リソースをデプロイします。

resourceBundleSelector:
  cloudBuildRepository:
    name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
    tag: v1.0.0
    serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
  fleet:
    project: projects/my-project
    selector:
      matchLabels:
        country: "us"
rolloutStrategy:
  rolling:
    maxConcurrent: 3

クラスタへのバリアント リソースのデプロイ

この例では、Git リポジトリに「deployments」という名前のフォルダがあり、そこに 2 つの異なるデプロイ仕様が含まれています。

レプリカ: 3

    # small.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    

レプリカ: 10

    # large.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 10
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    

バリアントを使用すると、「small」または「large」のデプロイを異なるクラスタにデプロイできます。各クラスタには nginx-size=small または nginx-size=large のラベルがあります。

この例の FleetPackage は次のようになります。

resourceBundleSelector:
  cloudBuildRepository:
    name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
    tag: v1.0.0
    serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
    path: deployments
    variantsPattern: "*.yaml"
rolloutStrategy:
  rolling:
    maxConcurrent: 2
target:
  fleet:
    project: projects/my-project
variantSelector:
  variantNameTemplate: ${membership.labels['nginx-size']}

次のステップ

フリート パッケージをデプロイする