Kubernetesネイティブな開発を始めたいけれど、どんなツールを使えば良いかわからないという方もいらっしゃるかと思います。そんな読者の皆様に、前回からKubernetesネイティブなツールを紹介しています。

前回は①開発ツールについて紹介しました。今回は、②運用ツールについて紹介します。

①開発ツール(A. Dev - B. Build - C. Ship)
DockerfileやKubernetesリソースを開発してデプロイするまで
②運用ツール(D. Run)
コンテナやKubernetesリソースのデバッグ
③セキュリティ関連ツール(Security:A. Dev - B. Build - C. Ship - D. Run)
マニフェストファイルの脆弱性チェックやイメージスキャン

→連載「Kubernetes入門」の過去回はこちらを参照。

②運用ツール(Run)

Runのフェーズで求められる代表的な機能・対象・ツールは以下の通りです。

分類 機能 対象 代表ツール
Run デバッグ Kubernetesリソース k9s
Run デバッグ Kubernetesクラスタ k8sgpt
Run デバッグ コンテナ kubectl debug(Ephemeral Container)
Run デバッグ Pod sternk8stail
Run プラグインマネージャ kubectlコマンド Krew
Run コンテキストの切り替え Kubernetesクラスタ kubectx
Run 依存関係の確認 Kubernetesリソース kubectl treekube-lineage
Run パケットキャプチャ Pod ksniff
Run コード補完 kubectlコマンド kubectl completion

リッチなCLIを使う:k9s

KubernetesのCLI(Command Line Interface)上での管理ツールと言えば、「kubectl」が代表格です。kubectlを使うにはある程度のコマンドを覚える必要があり、初学者にとっては敷居が高いと感じることもあることでしょう。

一方、本節で紹介する「k9s」は、リッチなCLIでKubernetesクラスタの操作を簡単に行えるツールです。

以下のコマンドを実行するだけでインストールができます。

$brew install k9s

以下のコマンドにより起動します。

$k9s

以下のようなコマンドのみで、Podの一覧やServiceの一覧などを表示できます。

:pods

:svc

例えば、一覧表示されたPodやコンテナを選択していくだけで、ログの確認まで行えます。つまり、kubectl get/describe/logといったコマンドを使うより、操作は簡単です。

  • k9sの動作イメージ(公式Githubより)

AI(GPT)を使ってKuberentesクラスタの問題解析:k8sgpt

「k8sgpt」はKubernetesクラスタを診断し、問題点を提示してくれるツールです。 診断の中核となる部分にOpen AIのAPI(ChatGPTのエンジン部分)を利用しています。

k8sgptは以下のコマンドでインストールできます。

$ brew tap k8sgpt-ai/k8sgpt
$ brew install k8sgpt

バックエンドのOpen AIのAPI Keyを指定する必要があります。以下のコマンドにより、API Key作成画面のURLが生成され、ブラウザで当該URLに遷移します。

$ k8sgpt generate

以下のコマンドを入力すると、API Keyを求められますので、作成したAPI Keyを指定します。

$ k8sgpt auth new

Kubernetesクラスタを分析してみましょう。以下のコマンドで、Kubernetesクラスタの分析結果が得られます。

$ k8sgpt analyze

以下のように、問題箇所を指摘してくれます。

  • k8sgptの分析結果イメージ(公式Githubより)

コンテナをデバッグする:kubectl debug(Ephemeral Container)

コンテナアプリケーションの運用では、コンテナイメージの削減やセキュリティ確保のため、distrolessに代表されるような必要最低限のライブラリを含んだコンテナイメージを使うケースがあります。その場合、Kubernetesで何か問題が発生すると、sarやlessなどがなくデバッグできません。

また、コンテナがクラッシュしている場合においても、コンテナ内で解析作業を行うことができません。

こうした場合、 Pod内に「Ephemeral Container」と呼ばれるコンテナを一時的に追加することで、sarやlessなどを使った解析が可能になります。

Ephemeral Containerを利用するには、ターミナルから以下のコマンドを実行します。これによりシェルが起動し、解析が可能になります。

$ kubectl debug <pod-name> -it --image=busybox -- sh

複数のPod/コンテナを並べて解析する:stern

マイクロサービス時代の今、複数のPodやコンテナの解析が必要なことに加え、相互の時系列の関係も重要になっています。

「stern」では、Kubernetes上の複数のPodと、Pod内の複数のコンテナをtailすることができます。また、各Podは色分けされているため、デバッグが容易です。sternを使わない場合、Pod名を検索して「kubectl logs ~」を実行する必要がありますが、sternを使うことでそれらを省略できます。

sternは、以下のコマンドでインストール可能です。

$ brew install stern

sternは、特定の名前を含むPodのログを表示することができます。例えば「nginx」という名前を含むログを表示するのであれば、次のように指定します。

$ stern nginx

また、Podのラベルでフィルタリングすることも可能です。

$ stern -l app=nginx

sternの他にも、「k8stail」という類似ツールがあります。気になる方は調べてみると良いでしょう。

kubectlプラグインを追加・管理する:Krew

kubectlを使ったコマンドには、さまざまなものがあります。プラグイン機構によって機能を追加することも可能です。日常的に使う方にとっては、いかに簡単に効率良く使えるかは重要でしょう。

「Krew」はkubectl ctxやkubectl nsといったkubectlプラグインを管理するプラグインマネジャーです。2023年6月23日時点で、217のkubectlプラグインが登録されています。Krewを使うことで、複数のkubectlプラグインを一元管理することが可能です。

Krewは、以下のコマンドでインストールできます。

$ brew install krew

早速、次項でkubectlプラグインをインストールしてみましょう。

◆クラスタのコンテキストを切り替える:kubectx

kubectxプラグインを使うと、Kubernetesクラスタのコンテキストを簡単に切り替えることができます。「kubectl config get-context」や、「kubectl config use-context」といったコマンドをわざわざ入力しなくて良くなります。

kubectxは、以下のコマンドでインストール可能です。

$ kubectl krew install ctx

「dev1ctx」というコンテキストに切り替えてみましょう。

$ kubectl ctx dev1ctx

「kubectl ctx」の他にも、「kubectl ns」を使うと簡単にネームスペースに切り替えられます。さまざまなkubectlプラグインが提供されているので、普段からkubectlを触る方はいろいろと試してみると良いでしょう。

◆k8sリソースの依存関係を確認する:kube-lineage

「kube-lineage」は、Kubernetesクラスタ内のリソースの依存関係を確認できるツールです。以下のコマンドでインストールできます。

$ kubectl krew install lineage 

以下のコマンドにより、「nginx」というPodがどのオブジェクトに依存しているかを表示できます。

$ kubectl lineage pod nginx --dependencies

◆パケットキャプチャを取得・解析する:ksniff

「ksniff」は、パケットキャプチャを取得するツールです。パケットを解析する「Wireshark」との連動もスムーズで、効率的な解析を実現します。

ksniffは、以下のコマンドでインストールできます。

$ kubectl krew install sniff

以下のコマンドにより、「nginx」というPodに対してパケットキャプチャを取得できます。

$ kubectl sniff nginx

コマンド入力を補完する:kubectl completion

ターミナルでコマンドを実行する際、補完機能を使うことで、作業効率が向上します。kubectlの各コマンドでは、補完機能が利用可能となっています。

kubectl completionは、以下のコマンドでインストール可能です。

$ brew install bash-completion@2
$ source > ~/.bashrc

* * *

今回は、運用ツールについて紹介しました。前回同様、今回紹介したツールが全てではありません。Krewで管理されるプラグイン1つとってみても、さまざまなものが存在します。いろいろなツールを試してみて、自身の開発作業を効率化する“最強の環境”を作ってみてはいかがでしょうか。本稿が、そのきっかけになれば幸いです。

次回は、開発・運用に関わる③セキュリティ関連ツールについて紹介します。