Google Kubernetes Engine クラスタにデプロイする

このドキュメントでは、アプリケーションを Google Kubernetes Engine クラスタにデプロイする方法について説明します。

Cloud Deploy を使用すると、コンテナベースのワークロードを任意の Google Kubernetes Engine クラスタにデプロイできます。GKE ターゲットにデプロイする場合、Cloud Deploy のすべての機能がサポートされます。

始める前に

この skaffold.yaml ファイルの deploy スタンザには kubectl が含まれています。これは、Skaffold が Kubernetes(GKE)用にレンダリングしてデプロイすることを示します。このアプリケーションで使用するマニフェストは、その下に表示されます。

ターゲット構成を作成する

各ターゲットは、デリバリー パイプライン YAML で構成することも、別のファイルで構成することもできます。また、同じファイルで複数のターゲットを構成できますが、異なる kind: Target スタンザに配置する必要があります。

ターゲットは、デリバリー パイプラインと同じプロジェクトとリージョンで定義する必要があります。ただし、ターゲットのデプロイ先となるクラスタは、サービス アカウントがこれらのプロジェクトにアクセスできる限り、異なるプロジェクトとリージョンに配置できます。

ターゲット定義で、GKE クラスタを指す gke スタンザを作成します。

gke:
 cluster: projects/[project_name]/locations/[location]/clusters/[cluster_name]

この GKE リソース ID には次の要素が使用されます。

  • [project_name] は、このクラスタを実行している Google Cloud プロジェクトの名前です。

    デプロイするクラスタは、デリバリー パイプラインと同じプロジェクトにある必要はありません

  • [location] は、クラスタが作成されたリージョンです。

  • [cluster_name] は、クラスタの作成時に付けられた名前です。

    この名前は、Google Cloud コンソールのプロジェクトのクラスタのリストで確認できます。

     Google Cloud コンソールのクラスタのリスト

次に、GKE クラスタを指すターゲット構成の例を示します。

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development cluster
      gke:
       cluster: projects/my-app/locations/us-central1/clusters/my-app-dev-cluster

Skaffold 構成を作成する

このセクションでは、GKE クラスタにデプロイするときに使用する簡単な Skaffold 構成の例を示し、説明します。

GKE クラスタにデプロイする skaffold.yaml ファイルのを次に示します。

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: gke-application
manifests:
  rawYaml:
  - deployment.yaml
deploy:
  kubectl: {}

Cloud Deploy で Skaffold を使用するでは、デリバリー パイプラインで Skaffold を使用する方法について詳しく説明します。

Kubernetes マニフェストを準備する

アプリケーションを GKE にデプロイするには、Cloud Deploy に 1 つ以上の Kubernetes マニフェストを指定します。このマニフェストをレンダリングしてから、アプリケーションをデプロイするターゲット クラスタに適用します。

これらのマニフェストがない場合は、Cloud Deploy 配信パイプラインを使用してデプロイする前に作成します。

Kustomize または Helm を使用して、マニフェストを作成できます。マニフェストがテンプレート化されていてレンダリングする必要がある場合は、Kustomize または Helm を使用することもできます。

すべてを組み合わせる

Kubernetes マニフェスト、skaffold.yaml 構成、Cloud Deploy ターゲット定義を作成し、Cloud Deploy リソースとしてターゲットを登録したため、デリバリー パイプラインを呼び出して、リリースを作成し、パイプラインで定義されたターゲットの進行状況に沿って進めることができます。

プロキシを使用してデプロイする

ターゲット GKE クラスタのプロキシを指定できます。これは、HTTP プロキシ経由でのみクラスタにアクセスするように設定されている組織を対象としています。

これを行うには、ターゲット構成の gke スタンザに proxyUrl プロパティを追加します。

gke:
 cluster: projects/my-app/locations/us-central1/clusters/my-app-dev-cluster
 proxyUrl: [URL]

ここで、URL はプロキシの URL です。

限定公開クラスタにデプロイする

次の 3 つのオプションのいずれかを使用して、限定公開 GKE クラスタにアプリケーションをデプロイできます。

DNS エンドポイントを使用する

これは、プライベート クラスタに接続する最も簡単な方法です。

  1. クラスタで DNS ベースのエンドポイントを有効にします

  2. ターゲット構成gkednsEndpointtrue に設定します。

    クラスタに IP ベースのエンドポイントが構成されていない場合は、この手順をスキップできます。Cloud Deploy は、コントロール プレーンの唯一のエンドポイントである DNS エンドポイントにデフォルトで接続します。

Virtual Private Cloud ネットワークを使用する

Virtual Private Cloud ネットワークに接続されたプライベート GKE クラスタにデプロイするようにターゲットを構成できます。

  1. プライベート クラスタを作成する

    限定公開クラスタは、ノードと Pod がデフォルトで公共のインターネットから隔離されている VPC ネイティブ クラスタです。

    限定公開クラスタ ターゲットの内部 IP を使用する場合は、ターゲット構成gkeinternalIptrue に設定します。

  2. Cloud Build で、このプライベート クラスタへのデプロイに使用できるプライベート ワーカープールを作成します。

  3. そのプライベート プールを使用するように実行環境を構成します

    このプールは RENDER に使用する必要があります。DEPLOYVERIFY にも使用できます。RENDERDEPLOY を使用した例を次に示します。

    executionConfigs:
    - usages:
      - RENDER
      - DEPLOY
      workerPool: "projects/p123/locations/us-central1/workerPools/wp123"
    

詳細は、GKE 用 Identity Service を使用して Cloud Build プライベート プールから限定公開 GKE クラスタにアクセスするおよび Cloud Build プライベート プールで限定公開 GKE クラスタにアクセスするをご覧ください。

プロジェクトと権限に関する考慮事項

限定公開クラスタにデプロイできるプライベート ワーカープールを使用するようにターゲットを構成できます。ただし、リソースが異なるプロジェクトにある場合は、注意すべき点があります。

  • Cloud Deploy とワーカープールが別々のプロジェクトにある場合

VPC にアクセスでき、ターゲットとは異なるプロジェクトにあるプライベート プールと通信するには、Cloud Deploy サービス エージェントに通信するための十分な権限が必要です。

実行サービス アカウントにも、Cloud Storage バケットにアクセスする権限が必要です。

  • ワーカー プールとクラスタが別々のプロジェクトにある場合

限定公開 GKE クラスタが限定公開のワーカープールとは異なるプロジェクトにある場合、実行サービス アカウントには、クラスタが存在するプロジェクトと通信するための十分な権限が必要です。

GKE 接続クラスタのターゲットと Connect Gateway を使用する

GKE 接続クラスタConnect Gateway を使用するターゲットを使用して、限定公開 GKE クラスタにデプロイするターゲットを構成できます。

このアプローチでは、Virtual Private Cloud または仮想プライベート ネットワーク接続を使用する必要はありません。

次のステップ