Google Kubernetes Engine へのデプロイ

Google Kubernetes Engine は、Docker リポジトリからイメージを直接 pull できます。一部のバージョンには、Artifact Registry Docker リポジトリからイメージを pull するための事前構成のサポートが含まれています。

要件

このセクションでは、GKE と統合するための要件について説明します。

権限

ノードプールまたはクラスタを作成すると、GKE は次のデフォルトを使用します。

これらのデフォルトを使用すると、GKE は同じ Google Cloud プロジェクト内の Artifact Registry リポジトリからイメージを pull できます。ノードからイメージを push する場合、プロジェクト間でイメージを pull または push する場合、ユーザー指定のサービス アカウントを使用する場合、またはデフォルト設定でサポートされていない他の要件がある場合は、アクセスの構成についてアクセス制御のドキュメントをご覧ください。

GKE バージョン

次の表に、同じプロジェクト内の Docker リポジトリからコンテナを pull するデフォルトの権限を持つクラスタの作成に必要な GKE の最小バージョンを示します。

バージョン 必要最小限のパッチ
1.14 1.14.10-gke.22
1.15 1.15.9-gke.8

GKE のバージョンが最小バージョンよりも前の場合は、Kubernetes imagePullSecret を構成して、GKE がイメージを pull できるようにする必要があります。

GKE が Artifact Registry とは異なるプロジェクトにある場合、GKE ノードが使用するサービス アカウントに Artifact Registry の権限を付与します。デフォルトでは、ノードは Compute Engine のデフォルトのサービス アカウントを使用します。

イメージを実行する

次のコマンドを使用して、Google Kubernetes Engine クラスタで Artifact Registry イメージを実行できます。

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

ここで

  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  • PROJECT は、Google Cloud コンソール プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • REPOSITORY は、イメージが保存されるリポジトリの名前です。
  • IMAGE は、リポジトリ内のイメージの名前です。
  • TAG は、pull するイメージ バージョンのタグです。

Kubernetes コマンドの詳細については、kubectl の概要をご覧ください。

containerd ノードイメージのトラブルシューティング

GKE ノード バージョン 1.19 以降、Linux ノードのデフォルト ノードイメージは、Docker(cos)バリアントを含む Container-Optimized OS から、Containerd(cos_containerd)バリアントが含まれている Container-Optimized OS に代わっています。

Docker バイナリは現在、containerd をランタイムとして使用する Linux ノードで使用できますが、使用しないことをおすすめします。Docker では、Kubernetes が containerd ノードで実行するコンテナを管理しません。このため、Docker コマンドや Docker API を使用して、実行中の Kubernetes コンテナの表示や操作を行うことはできません。

Linux ノードでのデバッグやトラブルシューティングのため、Kubernetes コンテナ ランタイム用にビルドされたポータブル コマンドライン ツール crictl を使用して、containerd と対話できます。crictl は、コンテナやイメージの表示、ログの読み取り、コンテナでのコマンドの実行などの一般的な機能をサポートします。

詳細については、crictl ユーザーガイドcontainerd に関する GKE ドキュメントをご覧ください。

Windows Server ノードの場合、containerd デーモンは containerd という名前の Windows サービスとして実行されます。ログは C:\etc\kubernetes\logs\containerd.log ディレクトリに格納され、ログ エクスプローラLOG NAME: "container-runtime" に表示されます。

一般公開の Artifact Registry リポジトリから pull する

containerd ノードを持つ GKE クラスタにイメージをデプロイしてデプロイしたら、SSH を使用して VM インスタンスに接続し、crictl コマンドを実行してトラブルシューティングできます。

一般公開の Artifact Registry リポジトリには認証は必要ありません。crictl は、非公開の Artifact Registry リポジトリ内のイメージを pull するためにも使用できます。

Console

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] の横の矢印をクリックします。

    インスタンス名の横にある SSH ボタン。

  3. [ブラウザ ウィンドウで開く] を選択するか、プルダウン オプションから選択した接続方法を選択します。

  4. Google Cloud コンソールで新しいターミナル ウィンドウが開きます。crictl を使用して Artifact Registry からイメージを pull します。

    crictl pull IMAGE_LOCATION:TAG
    

    出力は次のようになります。

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Artifact Registry 非公開リポジトリからイメージを pull する場合は、リポジトリに対して認証する必要があります。アクセス トークンを使用して認証情報を指定できます。

gcloud

  1. Google Cloud CLI が最新バージョンであることを確認します。

    gcloud components update
    
  2. VM に接続します。

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

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

    • PROJECT_ID: VM が含まれているプロジェクトの ID
    • ZONE: VM が存在するゾーンの名前
    • VM_NAME: VM の名前

    Google Cloud CLI のデフォルト プロパティを設定している場合、このコマンドの --project フラグと --zone フラグは省略できます。次に例を示します。

    gcloud compute ssh VM_NAME
    
  3. SSH 認証鍵をまだ作成していない場合は、SSH keygen によって生成されます。プロンプトが表示されたら、パスフレーズを入力するか、空白のままにします。

  4. crictl を使用して Artifact Registry からイメージを pull します。

    crictl pull IMAGE_LOCATION:TAG
    
  5. 出力は次のようになります。

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Artifact Registry 非公開リポジトリからイメージを pull する場合は、リポジトリに対して認証する必要があります。アクセス トークンを使用して認証情報を指定できます。

非公開の Artifact Registry リポジトリから pull する

Console

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] の横の矢印をクリックします。

    インスタンス名の横にある SSH ボタン。

  3. プルダウン オプションから [ブラウザ ウィンドウで開く] を選択します。

  4. Google Cloud コンソールで新しいターミナル ウィンドウが開きます。curl を使用して、Compute Engine サービス アカウントのアクセス トークンを生成します。

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    出力は、次の例のようになります。

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. 返された出力から、引用符なしで access_token の値をコピーします。

  6. crictl pull --creds と前の手順でコピーした access_token の値を使用してイメージを pull します。

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    出力は次のようになります。

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Google Cloud CLI が最新バージョンであることを確認します。

    gcloud components update
    
  2. VM に接続します。

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    次の変数を置き換えます。

    • PROJECT_ID: VM が含まれているプロジェクトの ID
    • ZONE: VM が存在するゾーンの名前
    • VM_NAME: VM の名前

    Google Cloud CLI のデフォルト プロパティを設定している場合、このコマンドの --project フラグと --zone フラグは省略できます。次に例を示します。

    gcloud compute ssh VM_NAME
    
  3. SSH 認証鍵をまだ作成していない場合は、SSH keygen によって生成されます。プロンプトが表示されたら、パスフレーズを入力するか、空白のままにします。

  4. curl を使用して、Compute Engine サービス アカウントのアクセス トークンを生成します。

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    出力は次のようになります。

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. 返された出力から、引用符なしで access_token の値をコピーします。

  6. crictl pull --creds と前の手順でコピーした access_token の値を使用してイメージを pull します。

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    出力は次のようになります。

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl を使用すると、Kubernetes コンポーネントを設定せずに、ランタイムをデバッグできます。コマンドの一覧については、crictl のドキュメントKubernetes のデバッグのドキュメントをご覧ください。