K9sは、Kubernetesクラスターと対話するためのターミナルユーザーインターフェイスを提供します。このオープンソースプロジェクトの目標は、K8でアプリケーションを簡単にナビゲート、監視、および管理できるようにすることです。K9sは、Kubernetesの変更を常に監視し、監視対象のリソースを操作するためのクイックコマンドを提供します。
プロジェクトはGoで書かれており、1年半以上存在しています。最初のコミットは2019年2月1日に行われました。この記事の執筆時点では、GitHubには9000以上のスターがおり、約80人の寄稿者がいます。k9sで何ができるか見てみましょう。
インストールと起動
これは(Kubernetesクラスターに関連する)クライアントアプリケーションであり、Dockerイメージとして実行するのが最も簡単です。
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
一部のLinuxディストリビューションおよびその他のオペレーティングシステムには、すぐにインストールできるパッケージもあります。一般に、Linuxシステムの場合、バイナリファイルをインストールできます。
sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf - -C /tmp/
sudo mv /tmp/k9s /usr/local/bin
K8sクラスター自体に特定の要件はありません。レビューに基づいて、アプリは1.12などの古いバージョンのKubernetesで動作します。
アプリケーションは、標準の構成を使用して起動されます
.kube/config-それと同じ方法でkubectl。
ナビゲーション
デフォルトでは、コンテキストに指定された標準の名前名でウィンドウが開きます。つまり、を登録
kubectl config set-context --current --namespace=testしている場合、名前空間が開きtestます。(コンテキスト/名前の変更については、以下を参照してください。)「:」を押す
と、コマンドモードに切り替えることができます。次に、コマンドを使用してk9の操作を制御できます。たとえば、(現在の名前名にある)StatefulSetのリストを表示するには、と入力し
:stsます。
その他のKubernetesリソースの場合:
-
:ns-名前空間; -
:deploy-展開; -
:ing-イングレス; -
:svc-サービス。
表示可能なリソースタイプの完全なリストを表示するには、コマンドがあり
:aliasesます。
現在のウィンドウ内でホットキーの組み合わせで使用できるコマンドのリストを表示するのも便利です。「?」をクリックするだけです。
また、k9sには検索モードがあり、「/」を入力するだけで切り替えることができます。現在の「ウィンドウ」の内容を検索するために使用されます。前
:nsに入力した場合、名前のリストが開いているとします。それらの数が多すぎる場合は、長時間下にスクロールしないようにするには、名前を付けてウィンドウに入力するだけで十分/mynamespaceです。
ラベルを検索するには、適切な名前の名前ですべてのポッドを選択してから、たとえばを入力します
/ -l app=whoami。このラベルが付いたポッドのリストを取得します。
検索は、ログ、YAMLマニフェストの表示、
describeリソースなど、あらゆる種類のウィンドウで機能します。これらの機能の詳細については、以下を参照してください。
全体的なナビゲーションシーケンスは何ですか?
コマンドを使用して
:ctx、コンテキスト
を選択できます。名前を選択するには、すでにチームについて言及しているので
:ns、目的のスペースを検索できます/test。
ここで、関心のあるリソース(たとえば、同じStatefulSet)を選択すると、それに対応する情報が表示されます。つまり、実行中のポッドの数とその簡単な情報です。
ポッドだけが興味深いものになる可能性があります-次に入力するだけ
:podです。 ConfigMapsの場合(:cm-これらのリソースのリストについては、目的のオブジェクトを選択して「u」をクリックすると、K9sがそれを使用しているユーザー(このCM)を正確に通知します。
リソースを表示するためのもう1つの便利な機能は、XRayビューです。このようなモードはコマンドによって呼び出され
:xray RESOURCEます...説明するよりも、それがどのように機能するかを示す方が簡単です。StatefulSetsの図を次に示します:(
これらの各リソースは編集、変更、実行できます
describe。)
そして、Ingressを使用した展開は次のとおりです。
リソースの操作
各リソースに関する情報は、YAMLで取得するか
describe、対応するキーボードショートカット(それぞれ「y」と「d」)を押すことで取得できます。もちろん、さらに基本的な操作があります。インターフェイスの便利な「ヘッダー」(Ctrl + eを押すと非表示)のおかげで、リストとキーボードのショートカットが常に表示されます。
リソースを編集すると(選択後の「e」)、環境変数(
export EDITOR=vim)で定義されているテキストエディタが開きます。
リソースの詳細な説明(
describe)は次のようになります。
このような出力(またはリソースのYAMLマニフェストを表示する出力)は、通常のキーボードショートカットCtrl + sを使用して保存できます。保存される場所は、K9sメッセージからわかります。
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!
作成したバックアップファイルから、システムのラベルと注釈を削除した後、リソースを復元することもできます。これを行うには、それらのディレクトリ(
:dir /tmp)に移動し、目的のファイルを選択して適用する必要がありますapply。
ちなみに、現在のレプリカセットに問題がある場合は、いつでも前のレプリカセットにロールバックできます。これを行うには、必要なRS(
:rsリスト用)を選択します。
…そしてCtrl + lでロールバックします。すべてがうまくいったという通知を受け取るはずです。
k9s/whoami-5cfbdbb469 successfully rolled back
レプリカを拡大縮小するには、「s」(拡大縮小)をクリックして、必要な数のインスタンスを選択します。
シェルを使用して任意のコンテナを入力できます。これを行うには、目的のポッドに移動し、「s」(シェル)をクリックしてコンテナを選択します。 ..。
その他の可能性
もちろん、ログの表示もサポートされています(選択したリソースの「l」)。また、新しいログを監視するために、常にEnterキーを押す必要はありません。マーク( "m")を付けて、新しいメッセージのみを追跡するだけで十分です。
また、同じウィンドウで、ログを表示する時間範囲を選択できます。
- キー「1」-1分で;
- 「2」-5分。
- 「3」-15分。
- 「4」-30分。
- 「5」-1時間;
- 「0」-ポッドの存続期間全体。
特別なパルス動作モード(コマンド
:pulse)は、Kubernetesクラスターに関する一般的な情報を表示します。
リソースの数とその状態を確認できます(ステータスのあるものは緑色で表示されます
Running)。
K9のもう1つの優れた機能は、Popeyeと呼ばれます。すべてのリソースで特定の正確性基準をチェックし、結果の「評価」を説明とともに表示します。たとえば、十分なプローブまたは制限がなく、一部のコンテナをルートとして実行できることがわかります...
基本的なHelmサポートがあります。たとえば、次のようにして、クラスタにデプロイされたリリースを確認できます。
:helm all #
:helm $namespace #
基準
ちょっと でもK9sに組み込まれています-それは単純なHTTPサーバー負荷ジェネレーターであり、より有名なab(ApacheBench)の代替です。
これを有効にするには、ポッドでポートフォワードアクティベーションが必要です。これを行うには、ポッドを選択してShift + fを押し、エイリアス「pf」を使用してポートフォワードサブメニューに移動します。
ポートを選択してCtrl + bを押すと、ベンチマーク自体が開始されます。彼の作業の結果は保存され
/tmp、後でK9で表示できるようになります。
ベンチマークの構成を変更するには、ファイル
$HOME/.k9s/bench-<my_context>.yml(クラスターごとに定義)を作成する必要があります。
注意:ディレクトリ内のすべてのYAMLファイルの拡張子が
.k9s正確であることが重要です.yml(.yaml正しく機能しません)。
構成例:
benchmarks:
defaults:
#
concurrency: 2
#
requests: 1000
containers:
#
# namespace/pod-name:container-name
default/nginx:nginx:
concurrency: 2
requests: 10000
http:
path: /
method: POST
body:
{"foo":"bar"}
header:
Accept:
- text/html
Content-Type:
- application/json
services:
# NodePort LoadBalancer
# : namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
インターフェース
リソースリストの列ビューは、ファイルを作成することによって変更されます
$HOME/.k9s/views.yml。その内容の例:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
確かに、プロジェクトに問題があるラベルの列がありません。
列による並べ替えは、キーボードのショートカットによって実行されます。
- Shift + n-名前で;
- Shift + o-ノードごと。
- Shift + i-IPによる;
- Shift + a-コンテナの寿命による。
- Shift + t-再起動の回数。
- Shift + r-準備状況による。
- Shift + c-CPU消費による。
- Shift + m-メモリ消費による。
デフォルトのカラースキームが気に入らない場合は、K9sでスキンもサポートされます。すぐに使える例(7個)はこちらから入手できます。これらのスキンの1つの例を次に示します(海軍):
プラグイン
最後に、プラグインを使用すると、K9の機能を拡張できます。私自身、自分の仕事でそれらのうちの1つだけを使用しました-
kubectl get all -n $namespace。
こんな感じです。
$HOME/.k9s/plugin.yml次の内容のファイルを作成します。
plugin:
get-all:
shortCut: g
confirm: false
description: get all
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE get all -o wide | less"
これで、名前名に移動し、「g」を押して対応するコマンドで実行でき
ます。プラグインの中には、たとえば、kubectl-jqとの統合やログsternを表示するためのユーティリティがあります。
結論
私の好みでは、K9sは非常に使いやすいことがわかりました。K9sを使用すると、使用せずに必要なものすべてを探すのにすぐに慣れることができます
kubectl。ログの表示とその保存、リソースの迅速な編集、一般的な作業の速度*に満足し、Popeyeモードが便利であることがわかりました。別の言及は、プラグインを作成し、ニーズに合わせてアプリケーションを変更する機能です。
*大量のログがありますが、K9の動作が遅いことにも気づきました。そのような瞬間に、ユーティリティはIntel Xeon E312xxから2つのコアを「食べ」、フリーズすることさえありました。
現時点で何が欠けていますか?ディレクトリに移動せずに、以前のバージョン(RSについてではない)への高速ロールバック。さらに、回復はすべてに対してのみ発生します。リソース:注釈またはラベルを削除した場合は、リソース全体を削除して復元する必要があります(ここではディレクトリに移動する必要があります)。もう1つの些細なことは、そのような保存された「バックアップ」に十分な日付がないことです。
PS
私たちのブログも読んでください: