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

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

始める前に

Google Cloud CLI を使用するには、まずコマンドライン ツールを設定する必要があります。

GKE クラスタへの接続

Knative serving にサービスをデプロイするには、まずログインして GKE クラスタに接続する必要があります。

追加のオプションを含む、GKE クラスタへの接続の詳細については、以下をご覧ください。

デプロイに必要な権限

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

デプロイできるイメージ

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

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

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

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

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

コンテナをデプロイするには、Google Cloud コンソール、Google Cloud CLI、または YAML 構成ファイルを使用します。

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

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

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

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

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

gcloud config configurations describe default

Console

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

  1. Google Cloud コンソールで Knative serving に移動します。

    Knative serving に移動

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

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

    1. プルダウン メニューから、サービスで使用可能な GKE クラスタのいずれかを選択します。

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

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

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

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

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

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

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

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

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

    Knative serving が有効になっているクラスタにサービスがデプロイされました。

コマンドライン

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

  1. gcloud run deploy コマンドを実行します。

    gcloud run deploy SERVICE --image IMAGE_URL

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

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

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

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

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

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

      • Knative serving on VMware の場合は、--kubeconfig パラメータを含め、構成ファイルを指定する必要があります。

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

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

YAML

サービス仕様を YAML ファイルに保管してから、Google Cloud CLI を使用してデプロイできます。

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

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

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

    • SERVICE は、Knative serving サービスの名前に置き換えます。
    • IMAGE は、コンテナ イメージの URL に置き換えます。

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

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

    gcloud run services replace service.yaml

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

新しいリビジョンをデプロイするには、Google Cloud コンソール、gcloud コマンドライン、または YAML 構成ファイルを使用します。

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

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

コンソール

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

  1. Google Cloud コンソールで Knative serving に移動します。

    Knative serving に移動

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

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

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

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

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

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

コマンドライン

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

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

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

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

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

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

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

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

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

      • Knative serving on VMware の場合は、--kubeconfig パラメータを含め、構成ファイルを指定する必要があります。

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

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

YAML

--format=export フラグを使用して、gcloud run services describe コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。

  1. ローカル ワークスペースの service.yaml という名前のファイルにサービスの構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE は、Knative serving サービスの名前に置き換えます。

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

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

      gcloud run services replace service.yaml

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

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

  1. Google Cloud コンソールで、Knative serving サービスのプロジェクトを開きます。

  2. [IAM] ページに移動

  3. サービス アカウント情報を取得します。

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

  5. [IAM] ページに移動

  6. [追加] をクリックして、新しいプリンシパルを追加します。

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

  8. [ロールを選択] プルダウン リストで、レジストリから読み取るロールを選択します。

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

セキュリティを強化するため、付与するアクセス権を制限できます。

  • Artifact Registry: コンテナ イメージを格納するリポジトリに対してロールを付与します。
  • Container Registry: コンテナ イメージを保存する Cloud Storage バケットに対してロールを付与します。

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

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

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

  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 というデフォルトのサービス アカウントがあります。このデフォルトのサービス アカウントは、Knative serving サービスのデプロイ時に指定された場合を除き、コンテナ イメージを pull するために使用されます。

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

    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 Namespace に作成された新しい Pod には、imagePullSecret Secret が定義されます。

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

Istio サイドカー インジェクションを有効にしてサービスをデプロイするには、Cloud Service Mesh ドキュメントの自動サイドカー インジェクションを有効にするをご覧ください。

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

内部ネットワークにサービスをデプロイするには、プライベートな内部ネットワークを設定する必要があります。

次のステップ

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

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