新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

kubectlで複数のクラスターを切り替える方法

Kubernetesの新しいクラスターを追加したので、kubectlコマンドで切り替えられるように設定しました。

一度設定してしまうといじることはなく、このままだとやり方忘れてしまうので、自分用に設定方法をメモしておきます。

仕組み

Kubernetesを操作するにはkubectlコマンドを使うのですが、kubectlはKubernetesを構築したプラットフォームに非依存で、 Kubernetesをオンプレで作ろうが、GCPで作ろうが、AWSで作ろうが、1つのkubectlコマンドで全てのKubernetesにアクセスできます。

kubectlからクラスターにアクセスするには、アクセス先の「クラスター」とその「ユーザー」の情報が必要です。

kubectlでは、その「クラスター」と「ユーザー」(と「ネームスペース」)を、1つの「コンテキスト」というものでまとめています。

そして、kubectlでコマンドを実行する際、「コンテキスト」からアクセス先の情報を得て、目的のKubernetesにアクセスできるようになります。

さらに、「コンテキスト」は複数作成することができ、「コンテキスト」を切り替えることにより、1つのkubectlで様々なKubernetesクラスターにアクセスできるようになります。

ちなみに、「ネームスペース」は必須ではなく、省略した場合「default」ネームスペースにアクセスします。「ネームスペース」を設定すると、 同じクラスターでも「ネームスペース」を分けた「コンテキスト」を作成することができます。

クラスター・ユーザー情報設定

新しいKukbernetesにアクセスする場合、クラスター・ユーザー情報をkubectlのコンテキストに設定する必要があるのですが、 設定方法はクラスターを構築したプラットフォーム依存です。

例えばGoogle Cloud Platformの場合、下記のようなコマンドで設定します。

gcloud container clusters get-credentials \
    [クラスター名] \
    --project [GCPプロジェクト名] \
    --zone [GCPゾーン名]

コンテキスト一覧を取得するコマンドkubectl config get-contextsを実行してみます。

CURRENT NAME    CLUSTER    AHTHINFO    NAMESPACE
*[context_name]    [cluster_name]    [user_name]

と、新しい「コンテキスト」が作成され、それに「クラスター」と「ユーザー」も自動で設定されています。

クラスター接続テストは下記で行います。

kubectl cluster-info

kubectlコンテキスト関連コマンド

クラスターへのアクセスに必要な設定がコンテキストにされたので、後は使いやすいようにコンテキストを編集していきます。

コンテキスト関連でよく使うコマンドを記載します。

コンテキスト一覧を表示

kubectl config get-contexts

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

kubectl config current-context

指定したコンテキストをアクティブにする

kubectl config set-context [コンテキスト名]

ネームスペース設定を設定する

設定したいコンテキストをアクティブにしてから下記を実行

kubectl config set-context --current --namespace=[ネームスペース名]

コンテキスト設定ファイルを直接編集する

コンテキストの設定は~/.kube/configファイルに記載されています。

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: 
  name: [クラスター1]
- cluster:
    certificate-authority-data:
  name: [クラスター2]
contexts:
- context:
    cluster: [クラスター1]
    user: [ユーザー1]
  name:  [コンテキスト1]
- context:
    cluster: [クラスター2]
    namespace: [ネームスペース1]
    user: [ユーザー2]
  name:  [コンテキスト2]
current-context: [コンテキスト1]
kind: Config
preferences: {}
users:
- name: [ユーザー1]
  user:
    auth-provider:
- name: [ユーザー2]
  user:
    auth-provider:

見れば何となく分かるのですが、「クラスター」と「ユーザー」の定義があって、「コンテキスト」がその「クラスター」と「ユーザー」(および「ネームスペース」)を参照しています。

「コンテキスト」を使いやすいように、色々設定したいところなのですが、kubectlのコンテキスト関連のコマンドはあまり機能豊富ではなく、kubectlコマンドだけでやろうとすると出来ないことが多いです。

幸い、コンテキスト設定ファイルの内容はシンプルなので、コンテキスト設定ファイルを直接編集しました。

注意点

プラットフォームからコンテキストを設定する際、同じ名前の既存の「コンテキスト」「クラスター」「ユーザー」は上書きされてしまいます。

なので、自分で設定ファイルを編集する際は、それらの情報をコピーして、新しい名前で登録して上書きされないようにしておきます。

感想など

コマンドあればそれを使おうと、色々コマンド探したんですけどね。

GCPでコンテキストを追加すると、「コンテキスト」「クラスター」「ユーザー」の名前が長いので短くしたかったのですが、コマンドだけではできず、直接設定ファイルを編集しました。

同じコンテキストのネームスペース違いを作りたかったのですが、ファイルを直接編集すればコピペでできてしまいます。

まぁ、複雑でもないし、直接ファイルを編集するのがお勧めです。

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com