
Kubectlは、Kubernetesと対話するためのメインコンソールインターフェイスであり、もちろん、そのようなクラスターの運用に関与する管理者/ DevOpsエンジニアの手に渡る重要なツールです。 毎日使用し、実際に積極的に使用する場合、ITプロフェッショナルの典型であるように、おそらく操作を簡素化/自動化する方法を考えました。 幸いなことに、これはシステム管理者、オープンソース、コンソールの世界であるため、もちろん、それについて考えているだけでなく、自分のニーズを人生に具現化した人たちもいました。 「。 これらについては、この短いレビューで説明します。
キューブシェル
- Github
- 言語:Python *
- ライセンス:Apache 2.0
Python用のprompt-toolkitライブラリに基づいたkubectlの対話型シェル。「GNU readlineなどの代替品」として機能します。 このライブラリは、ドロップダウンの説明、構文の強調表示、および本質的にkube-shellのすべての「対話性」を実現するその他の多くの機能を備えた入力コマンドの自動追加を実装します。 一度見やすい場合:

このシェルのその他の機能:
- fish shellスタイルのコマンドを入力すると表示される自動プロンプト
- 部分一致検索を使用して入力されたコマンドの履歴。
- 自動補完の高度な機能:ファジー検索、サーバーから受信したデータからの値の置換。
- クラスターと名前空間の間の便利な切り替え( チケットがハングして、ユーザー間に同様の切り替えが追加されます) ;
- 編集モードvi。
将来的には 、この種のコマンドをkubectlで実行するために、SQLに似た言語のサポートも期待されています。
ls <resource-name> select (property1, property2, property3) where (propery1=value1 and property2=value2) order by property3
kube-shellのインスピレーションは、類似のAWS APIシェルaws-shellとsawsによって提供されました。
*このプロジェクトはGoの補助プログラム( python_eats_cobra.goという面白い )を使用して、コマンド、引数kubectlなどで使用できるJSONファイルを生成します。 その後、メインのPythonアプリケーションはこのファイルで動作します。
キューブプロンプト
- Github
- 言語:行く
- ライセンス:MIT License
前述のkube-shellと非常によく似た別のインタラクティブシェルで、1か月後に登場しました(GitHubでの最初のコミットによると、2017年7月から7月に発生しました)。 主な違いは、Pythonの代わりにKubernetesコミュニティにネイティブなGoプログラミング言語を使用していることです。 ただし、Goにはプロンプトツールキットがなかったため、...著者(日本からの柴田正史)がgo-promptを取得して作成し、それに基づいて新しいシェルを実装しました。 結果は非常に似ていました。

(右下の文字セットは、このような結果を達成するためのキーボードのキーストロークのシーケンスです。より明確に、 この 16 MB GIFアニメーションでは 。)
エンドユーザーの目を通してkube-promptをPythonの同等物と比較すると、追加のチップの数が少なくなります(たとえば、現在のクラスター/名前空間の絶え間ない出力とそれらの間の迅速な切り替えはありません)。 ただし、すべてのコマンドの先頭に「kubectl」を入力する必要はありません。これにより、パイプ(「|」)を介して他のシェルコマンドを追加する可能性を節約できます。
それにも関わらず、kube-promptは1人で開発され、少し時間が経っていますが、GitHubの星の数ではすでに少し先を進んでいるので、これらの競合ソリューションのさらなる開発の見通しはそれほど明白ではありません。
kubectl-repl
- Github
- 言語:行く
- ライセンス:Apache 2.0
このアプリケーションの名前にある「REPL」は、シェル内で単純なインタラクティブ環境を実装する同じ読み取り-評価-印刷ループサイクルです。 本質的に、kubectl-replはオリジナルの「ラッパー」であり、起動後、kubectlに言及せずに追加のコマンドを入力でき、次の2つの可能性があるため、このユーティリティとの対話を簡素化します。
- 名前空間の切り替え(1つのコマンドが現在の名前空間を選択し、招待時に関連するものとして表示され、後続のすべてのkubectl呼び出しに追加されます);
-
kubectl get
によって返されるリストからの項目の「番号付き」選択。
2番目の機能は、リストのすべての要素(たとえば、
kubectl get pods | grep foobar
によって返される炉床のリスト)が実装されるように実装されます
kubectl get pods | grep foobar
kubectl get pods | grep foobar
--
$1
、
$2
、
$3
の形式の変数を持つ列が追加されます...これらの変数は、さらにkubectlまたはシェルコマンドで使用できます。 ドキュメントの例:
# kube-system get pods + kubectl -n kube-system get pods NAME READY STATUS RESTARTS AGE $1 kube-dns-3945342221-mwdh6 3/3 Running 0 9d $2 kube-dns-3945342221-x3fhn 3/3 Running 0 9d # kube-system ; echo $(whoami) $2 + echo $(whoami) kube-dns-3945342221-x3fhn mikulas kube-dns-3945342221-x3fhn
kubectl-replユーティリティは非常に新しく、1か月未満で1人の愛好家によって開発されました。
k8sh
- Github
- 言語:バッシュ
- ライセンス:Apache 2.0
kubectlの簡単なラッパーを作成するもう1つの試みは、今回は通常のBashを使用することです。 開始後、現在のコンテキスト(
kubectl config current-context
)と名前空間を招待状に表示し、それらを変更するための短いコマンド(それぞれ
ct
と
ns
)、および他のエイリアスのセットを提供します。 例:
-
kubectl describe
→k describe
-
kubectl get pods
→pods
-
kubectl get persistentvolumeclaims
→pvc

k8shでロードされたエイリアスは、独自のBashコードで
~/.k8sh_extensions
を作成することで拡張できます(これを使用する方法については、リポジトリに例があります)。
kubectl-aliases
- Github
- 言語:Python、Bash
- ライセンス:Apache 2.0
kubectlのBash / zshエイリアスの「ハードコア」バージョン。 著者は、次の形式の数百行(!)行を含む
.kubectl_aliases
ファイルを自動的に生成するPythonスクリプトを作成しました。
alias k='kubectl' … alias ka='kubectl apply -f' … alias ksyslo='kubectl --namespace=kube-system logs -f' … alias ksysgdep='kubectl --namespace=kube-system get deployment' … alias kgno='kubectl get nodes' … alias ksysgdepojson='kubectl --namespace=kube-system get deployment -o=json' …
発案者を2週間前に発表した著者自身として、「本当に馬鹿げているように見えるかもしれませんが、私にとっては非常に便利です。 [これらのエイリアスのおかげで]毎日のワークフローを大幅に節約できます。」
その他
- このレビューでは 、クラスター間の便利な切り替えのためのkubectxについて既に説明しましたが 、それ以降、ユーティリティはkubens( 同じリポジトリを参照)によって補完され、同様の名前空間の切り替えが行われています。
- kubeplayはREPLの別の実装ですが、Ruby構文を使用することをお勧めします。
- zsh-kubectl-promptは、zshプロンプトで現在のコンテキストとKubernetes名前空間を表示する簡単なスクリプトです。
PS
ブログもご覧ください。