ウェブサイト検索

KubectxとKubensを使ってKubernetesコンテキストを迅速に切り替える方法


KubectxとKubensは、Kubernetesの管理体験を加速させる2つのツールです。これらは、クラスター環境間の切り替えをより迅速かつ便利にすることで、Kubectlのいくつかの欠点に対処しています。

両方のコマンドは同じ著者によって開発され、一つのパッケージにまとめられています。KubectxはアクティブなKubernetesコンテキストを変更します。これは、接続しているクラスターを定義するサーバーのURLとユーザー認証情報の組み合わせです。Kubensはそのクラスター内のネームスペースを切り替えます。

なぜ彼らは役に立つのですか?

プレーンなKubectlを使用してクラスタ間を切り替えるのは面倒です。このツールはいくつかの設定切り替えの方法をサポートしていますが、このユースケースにとっては特に迅速でも直感的でもありません。

1つの方法は、各クラスターのために別の設定ファイルを作成することです。その後、KUBECONFIG 環境変数を設定して、間で切り替えることができます:

KUBECONFIG=~/.kube/cluster-1.yml

Gets pods in cluster-1

kubectl get pods

これには、各設定ファイルの名前とパスを暗記する必要があります。また、名前空間を定義するのにも役に立ちませんので、各コマンドでデフォルトを上書きするために Kubectl の --namespace フラグを使用する必要があります。

Kubectlは、統合されたコンテキスト管理の体験も提供します。これにより、複数のクラスターとユーザーの認証情報を1つの設定ファイルで定義できます。その間を切り替えるためにkubectlコマンドを発行することができます。

apiVersion: v1

clusters:

- cluster:

name: demo-cluster

insecure-skip-tls-verify: true

server: https://127.0.0.1

users:

- name: demo

user:

client-certificate: /path/to/cert

client-key: /path/to/key

contexts:

- context:

name: demo-cluster-ns-1

cluster: demo-cluster

user: demo

namespace: first-namespace

- context:

name: demo-cluster-ns-2

cluster: demo-cluster

user: demo

namespace: second-namespace

この設定ファイルは二つのコンテキストを設定します。どちらも単一の資格情報セットを使用して同じクラスターに接続します。コンテキストは、クラスター内の異なるネームスペースを使用するように設定されています。

Gets pods in first-namespace within demo-cluster

kubectl config use-context demo-cluster-ns-1

kubectl get pods

Gets pods in second-namespace within demo-cluster

kubectl config use-context demo-cluster-ns-2

kubectl get pods

これはより効率的な体験ですが、それでも比較的冗長です。KubectxとKubensはすべての複雑さを抽象化し、コンテキストや名前空間を迅速に切り替えるためのシンプルで短いコマンドを提供します。

Gets pods in first-namespace within demo-cluster

kubectx demo-cluster-ns-1

kubectl get pods

Overrides the context's namespace to get pods in second-namespace

kubens second-namespace

kubectl get pods

ツールのインストール

Kubectx と Kubens は、いくつかの異なる形式で配布されています。プロジェクトの GitHub リリースページからプレーンな事前コンパイル済みのバイナリをダウンロードしたり、Apt、Pacman、または Homebrew パッケージリポジトリからインストールしたり、Kubectl のプラグインマネージャーである Krew を使用したりできます。Kubectl のすべてのアクセサリーを扱う良い方法である Krew に焦点を当てます。

Krewがインストールされていて、kubectl krewコマンドを使用できることを確認してください。プロジェクトのウェブサイトにあるインストールスクリプトを使って、Krewをシステムに追加できます。

次に、Krewを使用してKubectxとKubensコンポーネントをインストールします:

Kubectx

kubectl krew install ctx

Kubens

kubectl krew install ns

プロジェクトのREADMEファイルに記載されている関連スクリプトを実行することで、Bash、Fish、およびZshのシェル補完サポートをオプションで有効にすることができます。

Kubectl と Kubens は、インタラクティブメニューを生成し、ファジー検索をサポートするために fzf と互換性があります。この統合は、PATH に fzf が含まれている場合に自動的に有効になります。KUBECTX_IGNORE_FZF 環境変数を 1 に設定することで、これを無効にすることができます。

変わる文脈

Kubectxコマンドは、利用可能なKubectlコンテキスト間を切り替えるために使用されます。その唯一のパラメータとして、ターゲットコンテキストの名前を取ります。コンテキストは、アクティブなKubectl設定ファイルに既に存在している必要があります。コマンドを使用する前に、通常のkubectl configコマンドを使用してコンテキストを作成してください。

Switch to first-context

kubectx first-context

kubectl get pods

kubectx は kubectl config use-context のラッパーです。このコンテキストは、kubectx または kubectl を使って別のコンテキストを選択するまで、以降のすべての Kubectl コマンドのターゲットになります。

Kubectx は、以前に選択したコンテキストに迅速に戻るために、- をコンテキスト名として受け入れます。これは、cd や git のような馴染みのある CLI ツールの動作と一致しており、複数のコンテキストを同時に扱うのを容易にします。

kubectx first

kubectx second

kubectx -

Gets the pods in the first context

kubectl get pods

Kubectx は、あなたのコンテキストにエイリアスを作成することもできます。これにより、より便利なタグを使用して説明的なコンテキスト名を参照できます。

kubectx production=gce-web-app-production-2022

Switches to gce-web-app-production-2022

kubectx production

kubectl get pods

名前空間の変更

kubensはネームスペース間を切り替えます。これは、アクティブなコンテキストのネームスペースを変更するのと同じ効果があります。Kubectlコマンドは、現在選択されているコンテキスト内の指定されたネームスペースに対して実行されます。

kubectx production

kubens api

Gets pods in the "api" namespace of the "production" context

kubectl get pods

同様に、kubectxを使うように、-を使って前のネームスペースに戻ることができます:

kubens -

KUBECONFIGからKubectxおよびKubensへの移行

Kubectlのコンテキスト、Kubectx、およびKubensは、すべてのコンテキストとクラスターを1つのKubeconfigファイルに保存している場合に最も効果的に機能します。このファイルは通常、~/.kube/configにあります。以前に複数の設定ファイルで作業していた場合は、Kubectlを使用してそれらを統合することができます。

Reference all your config files so Kubectl load them all

export KUBECONFIG=~/.kube/cluster-1:~/.kube/cluster-2:~/.kube/cluster-3

Save a merged version of the current config to a new file

kubectl config view --flatten > ~/.kube/.config

~/.kube/config にコンテキストを1つにまとめることで、すべてのコンテキストが kubectx と kubens で利用可能になります。複数のファイルを手動で扱うために KUBECONFIG を使用するのをやめることができます。

新しいクラスターをフリートに追加するときは、上に示したシーケンスのバリエーションを使用して、その構成ファイルを既存のものと組み合わせることができます。

export KUBECONFIG=~/.kube/config:~/new-config-file

kubectl config view --flatten > ~/.kube/.config

代わりに、よりシンプルなオプションとして、Krewを介したKubectlプラグインとして利用可能なkonfig設定ファイルマネージャーがあります。これには、現在Kubectlが使用している設定ファイルに新しい設定ファイルを自動的にマージするimportコマンドが含まれています:

kubectl krew install konfig

kubectl konfig import -s ~/new-config-file

要約

KubectxとKubensは、Kubectlの体験を円滑にするための便利なユーティリティです。Kubectlのコンテキストは、時折の使用には適しているものの、環境を迅速に切り替える際にはどうしても使い勝手が悪く感じることがあります。KubectxとKubensを使用すると、長いターミナルコマンドに邪魔されることなく、複数のクラスターや名前空間を検査することができます。

これらのツールの魅力はそのシンプルさにあります。また、Kubernetesのコンテキスト管理に加えて、迅速なバックトラッキングのための-や、長い名前を短縮するためのコンテキストエイリアスなど、いくつかのユニークな機能も追加されています。

関連記事: