kubectl 用のクラスタ アクセスの構成

このページでは、Google Kubernetes Engine で kubectl コマンドライン ツールのクラスタ アクセスを構成する方法について説明します。

概要

Google Cloud Platform プロジェクト内で複数のクラスタを実行する場合は、kubectl と通信するクラスタを選択する必要があります。kubectl のデフォルトのクラスタを設定するには、Kubernetes の kubeconfig ファイルで現在のコンテキストを設定します。また、--cluster フラグを使用して特定のクラスタに対して kubectl コマンドを実行することもできます。

次のセクションでは、kubeconfig の仕組み、kubectl のデフォルト クラスタを設定する方法、特定のクラスタに対して個別の kubectl コマンドを実行する方法について説明します。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

Kubernetes の構成ファイル

Kubernetes では、kubeconfig という YAML ファイルに kubectl のクラスタ認証情報が保存されます。kubeconfig には、コマンド実行時に kubectl が参照するコンテキストのリストが含まれます。このファイルはデフォルトで $HOME/.kube/config に保存されます。

コンテキストとは、アクセス パラメータのグループのことです。各コンテキストには 1 つの Kubernetes クラスタ、1 人のユーザー、1 つの名前空間が含まれます。現在のコンテキストとは、現在 kubectl のデフォルトとなっているクラスタのことで、すべての kubectl コマンドはこのクラスタに対して実行されます。

gcloud container clusters create を使用してクラスタを作成すると、環境内の kubeconfig にエントリが自動的に追加され、現在のコンテキストがそのクラスタに変更されます。

gcloud container clusters create my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

Google Cloud Platform Console を使用するか、別のパソコンから gcloud を使用してクラスタを作成する場合、環境の kubeconfig は更新されません。また、あるプロジェクト チームメンバーが gcloud を使用して自分のパソコンからクラスタを作成する場合、そのメンバーの kubeconfig は更新されますが、あなたのファイルは更新されません。これらのクラスタをローカルの kubeconfig に追加するには、下記の手順に従ってください。

クラスタ エンドポイントについて

すべてのクラスタには正規のエンドポイントがあります。エンドポイントは Kubernetes API サーバーの IP アドレスであり、kubectl などのサービスはこの IP アドレスを使用してクラスタ マスターと通信します。このエンドポイントは、GCP Console ではクラスタの [詳細] タブの [エンドポイント] フィールドに表示され、gcloud container clusters describe の出力では endpoint フィールドに表示されます。

gcloud container clusters get-credentials を実行すると、kubeconfig の更新の一部としてクラスタ エンドポイントが取得されます。

限定公開クラスタには、privateEndpointpublicEndpoint の 2 つの固有エンドポイント値があります。前者は内部 IP アドレスで、後者は外部 IP アドレスです。限定公開クラスタに対して get-credentials を実行すると、デフォルトでは外部 IP アドレスがエンドポイントとして設定されます。内部 IP をエンドポイントとして使用する場合は、限定公開クラスタの内部 IP アドレスを使用して kubeconfig エントリを生成するをご覧ください。

kubectl の現在のコンテキストを表示する

kubectl の現在のコンテキストを表示するには、次のコマンドを実行します。

kubectl config current-context

kubeconfig を表示する

環境の kubeconfig を表示するには、次のコマンドを実行します。

kubectl config view

このコマンドは、kubeconfig エントリが生成されたすべてのクラスタのリストを返します。GKE クラスタがリストされた場合、現在の環境でその GKE クラスタに対して kubectl コマンドを実行できます。そうでない場合は、クラスタの kubeconfig エントリを生成する必要があります。

kubeconfig エントリを生成する

GCP Console、別のパソコン、またはプロジェクトの別のメンバーによって作成されたクラスタに対して kubectl コマンドを実行するには、環境内で kubeconfig エントリを生成する必要があります。

次のコマンドを実行して kubeconfig エントリを生成します。

gcloud container clusters get-credentials [CLUSTER_NAME]

ここで、[CLUSTER_NAME] はクラスタ名です。

kubeconfig エントリには、次のいずれかが含まれています。

  1. gcloud auth list で示される認証情報
  2. アプリケーションのデフォルト認証情報(構成されている場合)。

限定公開クラスタの内部 IP アドレスを使用して kubeconfig エントリを生成する

get-credentials の実行時に --internal-ip を指定すると、限定公開クラスタの内部 IP アドレスを kubeconfig に書き込めます。

gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

kubectl コマンドのデフォルト クラスタを設定する

以前にクラスタの kubeconfig エントリを生成した場合は、gcloud container clusters get-credentials を実行すると、kubectl の現在のコンテキストをそのクラスタに切り替えることができます。

たとえば、my-clustermy-new-cluster の 2 つのクラスタがあるプロジェクトについて考えてみましょう。現在のコンテキストは my-new-cluster ですが、my-cluster に対してすべてkubectl コマンドを実行したいとします。

現在のコンテキストを my-cluster に切り替えるには、次のコマンドを実行します。

gcloud container clusters get-credentials my-cluster

特定のクラスタに対して個別の kubectl コマンドを実行する

特定のクラスタに対して個別の kubectl コマンドを実行するには、--cluster フラグの引数として kubeconfig に記述されているとおりにクラスタの名前を渡します。

たとえば、my-clustermy-new-cluster の 2 つのクラスタがある環境があり、現在のコンテキストが my-cluster であるとします。アプリケーションを my-new-cluster にデプロイしたい一方で、現在のコンテキストを変更したくないとします。

アプリケーションを my-new-cluster にデプロイするには、次のコマンドを実行します。

kubectl run my-app --image gcr.io/my-bucket/my-app:1.0 --cluster my-new-cluster

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント