コンテナ イメージのデプロイ

このページでは、Cloud Run for Anthos on Google Cloud に新しいサービスとリビジョンをデプロイする方法について説明します。

前提条件

gcloud コマンドライン ツールを使用するには、Cloud SDK をインストールして構成しておく必要があります。

デプロイに必要な権限

apiGroup serving.knative.dev と種類 Service での作成、更新、削除の権限に加えて、次のいずれかのロールが必要です。

  • オーナー
  • 編集者
  • GKE 管理者
  • GKE デベロッパー

デプロイできるイメージ

デプロイできるコンテナ イメージにはサイズ上限はありません。

Docker Hub など、任意のコンテナ レジストリのコンテナを使用できます。Container Registry や Artifact Registry とは異なるレジストリから非公開イメージをデプロイする方法については、他のコンテナ レジストリから非公開コンテナ イメージをデプロイするをご覧ください。

新しいサービスをデプロイする

タグ(たとえば、gcr.io/my-project/my-image:latest)または正確なダイジェスト(たとえば、gcr.io/my-project/my-image@sha256:41f34ab970ee...)でコンテナ イメージを指定できます。

サービスに初めてデプロイすると、最初のリビジョンが作成されます。リビジョンは変更されません。コンテナ イメージタグからデプロイすると、ダイジェストに解決され、リビジョンは常にこの特定のダイジェストを処理します。

コンテナをデプロイするには、Cloud Console、gcloud コマンドライン ツール、または YAML 構成ファイルを使用します。

タブをクリックして、使用するツールでの手順を確認してください。

デフォルトの gcloud のロケーション構成

Cloud SDK の default 構成でロケーションを構成した場合、gcloud コマンドはデフォルトで次の値を使用します。

  • compute/region
  • compute/zone
  • kuberun/cluster
  • kuberun/region
  • kuberun/cluster_location

次の gcloud config コマンドを実行して、default 構成の設定を表示します。

gcloud config configurations describe default

Console

コンテナ イメージをデプロイするには:

  1. Cloud Run for Anthos に移動します。

  2. [サービスを作成] をクリックして、[サービスの作成] ページを表示します。

    フォームで次の操作を行います。

    1. デプロイ先の Cloud Run for Anthos プラットフォームを選択します。

      • Cloud Run for Anthos(Cloud Run for Anthos を有効にした GKE または Anthos clusters on VMware クラスタにデプロイする場合)。
    2. プルダウン メニューから、サービスで使用可能な GKE クラスタのいずれかを選択します。

    3. 任意のサービス名を入力します。サービス名がリージョンとプロジェクトごと、またはクラスタごとに一意である必要があります。サービス名を後で変更することはできません。

    4. [接続] で次の操作を行います。

      • 他の Cloud Run for Anthos サービスまたは Istio を使用するクラスタ内のサービスへのアクセスのみを制限する場合は、[内部] を選択します。
      • サービスへの外部アクセスを許可するには、[外部] を選択します。

      サービスの接続設定の変更で説明されているように、接続オプションはいつでも変更できます。

    5. [次へ] をクリックして、サービス作成フォームの 2 ページ目に進みます。

      画像

      フォームで次の操作を行います。

      1. [コンテナ イメージの URL] テキスト ボックスで、サポートされているレジストリにあるイメージの URL を指定します。例: gcr.io/cloudrun/hello

        非公開のコンテナ イメージで Artifact Registry を使用するには、イメージ ダイジェストを使用する必要があります。非公開のコンテナ イメージのイメージタグを使用するには、既知の問題が解決されるまで、imagePullSecret を作成して使用する必要があります。

      2. 必要に応じて、[詳細設定を表示] をクリックし、次のタブを設定します。

      3. [作成] をクリックしてイメージを Cloud Run for Anthos にデプロイし、デプロイの完了を待ちます。

    Cloud Run for Anthos を有効にしたクラスタにサービスがデプロイされました。

コマンドライン

コンテナ イメージをデプロイするには:

  1. gcloud kuberun core services create コマンドを実行します。

    gcloud kuberun core services create SERVICE --image IMAGE_URL

    • SERVICE は、デプロイするサービスの名前に置き換えます。指定されたサービスが存在しない場合、新しいサービスが作成されます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/myproject/my-image:latest など)に置き換えます。

    • その他のデプロイ オプション:

      • デフォルト以外の名前空間にデプロイする場合は、--namespace パラメータを使用して、その名前空間を指定する必要があります。

      • デフォルト構成以外のロケーションにデプロイする場合は、--cluster--cluster-location パラメータを使用して、クラスタの namelocation を指定する必要があります。

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 内部アクセスまたは外部アクセスを指定するには、サービスの接続設定を変更するの説明に沿って、--connectivity フラグに接続オプションを設定します。

      • Cloud Run for Anthos オンプレミスの場合は、--kubeconfig パラメータに構成ファイルを指定する必要があります。

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。

YAML

サービス仕様を YAML ファイルに保存し、gcloud コマンドライン ツールを使用してデプロイできます。

  1. 新しい service.yaml ファイルをこの内容で作成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    次のように置き換えます。

    • SERVICE は、Cloud Run for Anthos サービスの名前に置き換えます。
    • IMAGE は、コンテナ イメージの URL に置き換えます。非公開のコンテナ イメージで Artifact Registry を使用するには、イメージ ダイジェストを使用する必要があります。非公開のコンテナ イメージのイメージタグを使用するには、既知の問題が解決されるまで、imagePullSecret を作成して使用する必要があります。

    環境変数やメモリ上限など他の構成を指定することもできます。

  2. 次のコマンドを使用して新しいサービスをデプロイします。

    gcloud beta run services replace service.yaml

Cloud Code

Cloud Code を使用してデプロイする方法については、IntelliJVisual Studio Code のガイドをご覧ください。

既存のサービスの新しいリビジョンをデプロイする

Cloud Console、gcloud コマンドライン、または YAML 構成ファイルを使用して、新しいリビジョンをデプロイできます。

構成設定を変更すると、コンテナ イメージに変更がない場合でも、新しいリビジョンが作成されます。作成されたリビジョンは変更できません。

タブをクリックして、使用するツールでの手順を確認してください。

Console

既存のサービスの新しいリビジョンをデプロイするには:

  1. Cloud Run for Anthos に移動します。

  2. サービスリストで更新したいサービスをクリックして、サービスの詳細を表示します。

  3. [新しいリビジョンを編集してデプロイ] をクリックします。これにより、リビジョンのデプロイ フォームが表示されます。

    画像

  4. 必要に応じて、デプロイする新しいコンテナ イメージの URL を入力します。

  5. 必要に応じて、次のように設定します。

  6. すべてのトラフィックを新しいリビジョンに送信するには、[このリビジョンをすぐに利用する] のチェックボックスをオンにします。新しいリビジョンを段階的に展開するには、チェックボックスをオフにします。これにより新しいリビジョンにトラフィックが送信されないデプロイになります。デプロイ後に段階的な展開の手順に従ってください。

  7. [デプロイ] をクリックして、デプロイが完了するまで待ちます。

コマンドライン

コンテナ イメージをデプロイするには:

  1. gcloud kuberun core services update コマンドを実行します。

    gcloud kuberun core services update SERVICE --image IMAGE_URL

    • リビジョンごとにリビジョンのサフィックスが自動的に割り当てられます。独自のリビジョン サフィックスを指定するには、--revision-suffix パラメータを追加します。

    • SERVICE は、デプロイするサービスの名前に置き換えます。指定されたサービスが存在しない場合、新しいサービスが作成されます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/myproject/my-image:latest など)に置き換えます。

    • その他のデプロイ オプション:

      • デフォルト以外の名前空間にデプロイする場合は、--namespace パラメータを使用して、その名前空間を指定する必要があります。

      • デフォルト構成以外のロケーションにデプロイする場合は、--cluster--cluster-location パラメータを使用して、クラスタの namelocation を指定する必要があります。

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 内部アクセスまたは外部アクセスを指定するには、サービスの接続設定を変更するの説明に沿って、--connectivity フラグに接続オプションを設定します。

      • Cloud Run for Anthos オンプレミスの場合は、--kubeconfig パラメータに構成ファイルを指定する必要があります。

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。

YAML

YAML ファイルを使用して既存のサービスの構成を変更するには、現在の構成のコピーを取得し、その構成を変更してローカル ファイルに保存してから、これらの変更をサービスにデプロイします。

  1. YAML として表示し、サービスの構成をローカル ファイルにコピーします。例を示します。service.yaml:

    gcloud kuberun core services describe SERVICE --format yaml

    SERVICE は、Cloud Run for Anthos サービスの名前に置き換えます。

    1. ローカル ファイルの spec.template の子属性でリビジョン設定を更新します。

    2. 新しいリビジョンをデプロイします。

      gcloud beta run services replace service.yaml

Cloud Code

Cloud Code を使用して既存のサービスの新しいリビジョンをデプロイする方法については、IntelliJVisual Studio Code のガイドをご覧ください。

他の Google Cloud プロジェクトからイメージをデプロイする

正しい IAM 権限を設定されている場合は、他の Google Cloud プロジェクトのコンテナ イメージをデプロイできます。

  1. Cloud Console で、Cloud Run for Anthos サービスのプロジェクトを開きます。

  2. IAM ページに移動します。

  3. デプロイ先に応じて、次の操作を行います。

  4. 使用するコンテナ レジストリを所有するプロジェクトを開きます。

  5. IAM ページに移動します。

  6. [追加] をクリックして、新しいメンバーを追加します。

  7. [新しいメンバー] テキスト ボックスに、先ほどコピーしたサービス アカウントのメールアドレスを貼り付けます。

  8. [ロールを選択] プルダウン リストで、ストレージ -> ストレージ オブジェクト閲覧者を選択します。

  9. Cloud Run for Anthos サービスを含むプロジェクトにコンテナ イメージをデプロイします。

他のコンテナ レジストリから非公開コンテナ イメージをデプロイする

このセクションでは、任意の非公開レジストリから Cloud Run for Anthos へのコンテナ イメージをデプロイするための適切な権限の設定について説明します。非公開コンテナ レジストリには、コンテナ イメージにアクセスするための認証情報が必要です。なお、クラスタと同じプロジェクト内の Container Registry または Artifact Registry から非公開コンテナ イメージをデプロイする場合は、この手順を行う必要はありません。

非公開コンテナ イメージをデプロイするには、imagePullSecret タイプの Kubernetes シークレットを作成し、それをサービス アカウントに関連付ける必要があります。

  1. container-registry と呼ばれる imagePullSecret Secret を作成します。

    kubectl create secret docker-registry container-registry \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-email=REGISTRY_EMAIL \
    --docker-username=REGISTRY_USER \
    --docker-password=REGISTRY_PASSWORD
    • DOCKER_REGISTRY_SERVER は非公開レジストリ FQDN に置き換えます(例: Container Registry の場合は https://gcr.io/、DockerHub の場合は https://hub.docker.com)。
    • REGISTRY_EMAIL はメールアドレスに置き換えます。
    • REGISTRY_USER はコンテナ レジストリのユーザー名に置き換えます。

      Container Registry または Artifact Registry を使用していて、有効期間が短いアクセス トークンではなく、有効期間が長い認証情報を格納および pull する場合は、認証方法: JSON キーファイルをご覧ください。

    • REGISTRY_PASSWORD をコンテナ レジストリのパスワードに置き換えます。

  2. デフォルトのサービス アカウントを開きます。

    kubectl edit serviceaccount default --namespace default

    Kubernetes クラスタ内のすべての名前空間には、default というデフォルトのサービス アカウントがあります。このデフォルトのサービス アカウントは、Cloud Run for Anthos サービスのデプロイ時に指定された場合を除き、コンテナ イメージを pull するために使用されます。

  3. 新しく作成した imagePullSecret シークレットをデフォルトのサービス アカウントに追加します。

    imagePullSecrets:
    - name: container-registry
    

    サービス アカウントは次のようになります。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

これで、現在の default 名前空間に作成された新しい Pod には、imagePullSecret Secret が定義されます。

自動 Istio サイドカー インジェクションを有効にしてデプロイする

自動 Istio サイドカー インジェクションを有効にして名前空間でサービスをデプロイするには、個別の Istio インストールを使用する必要があります。

内部ネットワークにサービスをデプロイする

内部ネットワークでのサービスのデプロイは、社内用アプリをスタッフに提供する企業や、Cloud Run for Anthos クラスタの外部で実行されるクライアントが使用するサービスにおいて便利です。

内部ネットワークにサービスをデプロイする方法については、プライベートな内部ネットワークの設定をご覧ください。

次のステップ

新しいサービスをデプロイしたら、次のことを行うことができます。

Cloud Build トリガーを使用して Cloud Run for Anthos サービスのビルドとデプロイを自動化できます。