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のコンテキスト管理に加えて、迅速なバックトラッキングのための-や、長い名前を短縮するためのコンテキストエイリアスなど、いくつかのユニークな機能も追加されています。
