このページでは、新しいサービスと新しいリビジョンを 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
コンテナ イメージをデプロイするには:
Google Cloud コンソールで Knative serving に移動します。
[サービスを作成] をクリックして、[サービスの作成] ページを表示します。
フォームで次の操作を行います。
プルダウン メニューから、サービスで使用可能な GKE クラスタのいずれかを選択します。
任意のサービス名を入力します。サービス名がリージョンとプロジェクトごと、またはクラスタごとに一意である必要があります。サービス名を後で変更することはできません。
[接続] で次の操作を行います。
- 他の Knative serving サービスまたは Istio を使用するクラスタ内のサービスへのアクセスのみを制限する場合は、[内部] を選択します。
- サービスへの外部アクセスを許可するには、[外部] を選択します。
サービスの接続設定の変更で説明されているように、接続オプションはいつでも変更できます。
[次へ] をクリックして、サービス作成フォームの 2 ページ目に進みます。
フォームで次の操作を行います。
Knative serving が有効になっているクラスタにサービスがデプロイされました。
コマンドライン
コンテナ イメージをデプロイするには:
gcloud run deploy
コマンドを実行します。gcloud run deploy SERVICE --image IMAGE_URL
SERVICE は、デプロイするサービスの名前に置き換えます。指定されたサービスが存在しない場合、新しいサービスが作成されます。
IMAGE_URL は、コンテナ イメージへの参照(
gcr.io/cloudrun/hello
など)に置き換えます。その他のデプロイ オプション:
デフォルト以外の名前空間にデプロイする場合は、
--namespace
パラメータを使用して、その名前空間を指定する必要があります。デフォルト構成以外のロケーションにデプロイする場合は、
--cluster
と--cluster-location
パラメータを使用して、クラスタのname
とlocation
を指定する必要があります。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
デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。
YAML
サービス仕様を YAML
ファイルに保管してから、Google Cloud CLI を使用してデプロイできます。
新しい
service.yaml
ファイルをこの内容で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
次のように置き換えます。
- SERVICE は、Knative serving サービスの名前に置き換えます。
- IMAGE は、コンテナ イメージの URL に置き換えます。
環境変数やメモリ上限など他の構成を指定することもできます。
次のコマンドを使用して新しいサービスをデプロイします。
gcloud run services replace service.yaml
既存のサービスの新しいリビジョンをデプロイする
新しいリビジョンをデプロイするには、Google Cloud コンソール、gcloud
コマンドライン、または YAML 構成ファイルを使用します。
構成設定を変更すると、コンテナ イメージに変更がない場合でも、新しいリビジョンが作成されます。作成されたリビジョンは変更できません。
タブをクリックして、使用するツールでの手順を確認してください。
コンソール
既存のサービスの新しいリビジョンをデプロイするには:
Google Cloud コンソールで Knative serving に移動します。
サービスリストで更新したいサービスをクリックして、サービスの詳細を表示します。
[新しいリビジョンを編集してデプロイ] をクリックします。これにより、リビジョンのデプロイ フォームが表示されます。
必要に応じて、デプロイする新しいコンテナ イメージの URL を入力します。
必要に応じて、次のように設定します。
すべてのトラフィックを新しいリビジョンに送信するには、[このリビジョンをすぐに利用する] のチェックボックスをオンにします。新しいリビジョンを段階的に展開するには、チェックボックスをオフにします。これにより新しいリビジョンにトラフィックが送信されないデプロイになります。デプロイ後に段階的な展開の手順に従ってください。
[デプロイ] をクリックして、デプロイが完了するまで待ちます。
コマンドライン
コンテナ イメージをデプロイするには:
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
パラメータを使用して、クラスタのname
とlocation
を指定する必要があります。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
デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。
YAML
--format=export
フラグを使用して、gcloud run services describe
コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace
コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。
ローカル ワークスペースの
service.yaml
という名前のファイルにサービスの構成をダウンロードします。gcloud run services describe SERVICE --format export > service.yaml
SERVICE は、Knative serving サービスの名前に置き換えます。
ローカル ファイルの
spec.template
の子属性でリビジョン設定を更新します。新しいリビジョンをデプロイします。
gcloud run services replace service.yaml
他の Google Cloud プロジェクトからイメージをデプロイする
正しい IAM 権限を設定されている場合は、他の Google Cloud プロジェクトのコンテナ イメージをデプロイできます。
Google Cloud コンソールで、Knative serving サービスのプロジェクトを開きます。
サービス アカウント情報を取得します。
Google Cloud のクラスタの場合は、Compute Engine のデフォルトのサービス アカウントのメールアドレスをコピーします。接尾辞 @developer.gserviceaccount.com が付いています。
他のクラスタの場合は、Google Cloud サービス アカウントを作成し、認証情報をダウンロードします。これらの認証情報を Kubernetes サービス アカウントのデフォルト
imagePullSecrets
として追加します。
使用するコンテナ レジストリを所有するプロジェクトを開きます。
[追加] をクリックして、新しいプリンシパルを追加します。
[新しいプリンシパル] テキスト ボックスに、先ほどコピーしたサービス アカウントのメールアドレスを貼り付けます。
[ロールを選択] プルダウン リストで、レジストリから読み取るロールを選択します。
- Artifact Registry の gcr.io リポジトリを含む Artifact Registry: Artifact Registry -> Artifact Registry リーダー
- Container Registry: Storage -> Storage オブジェクト閲覧者
Knative serving サービスを含むプロジェクトにコンテナ イメージをデプロイします。
セキュリティを強化するため、付与するアクセス権を制限できます。
- Artifact Registry: コンテナ イメージを格納するリポジトリに対してロールを付与します。
- Container Registry: コンテナ イメージを保存する Cloud Storage バケットに対してロールを付与します。
他のコンテナ レジストリから非公開コンテナ イメージをデプロイする
このセクションでは、任意の非公開レジストリから Knative serving にコンテナ イメージをデプロイするための適切な権限の設定について説明します。非公開コンテナ レジストリには、コンテナ イメージにアクセスするための認証情報が必要です。なお、クラスタと同じプロジェクト内の Container Registry(非推奨)または Artifact Registry から非公開コンテナ イメージをデプロイする場合は、この操作を行う必要はありません。
非公開コンテナ イメージをデプロイするには、imagePullSecret
タイプの Kubernetes Secret を作成し、それをサービス アカウントに関連付ける必要があります。
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 をコンテナ レジストリのパスワードに置き換えます。
デフォルトのサービス アカウントを開きます。
kubectl edit serviceaccount default --namespace default
Kubernetes クラスタ内のすべての名前空間には、
default
というデフォルトのサービス アカウントがあります。このデフォルトのサービス アカウントは、Knative serving サービスのデプロイ時に指定された場合を除き、コンテナ イメージを pull するために使用されます。新しく作成した
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 サービスのビルドとデプロイを自動化できます。