kubectlを介してKubernetesを操作するためのコンソールアシスタント

画像

Kubectlは、Kubernetesと対話するためのメインコンソールインターフェイスであり、もちろん、そのようなクラスターの運用に関与する管理者/ DevOpsエンジニアの手に渡る重要なツールです。 毎日使用し、実際に積極的に使用する場合、ITプロフェッショナルの典型であるように、おそらく操作を簡素化/自動化する方法を考えました。 幸いなことに、これはシステム管理者、オープンソース、コンソールの世界であるため、もちろん、それについて考えているだけでなく、自分のニーズを人生に具現化した人たちもいました。 「。 これらについては、この短いレビューで説明します。



キューブシェル





Python用のprompt-toolkitライブラリに基づいたkubectlの対話型シェル。「GNU readlineなどの代替品」として機能します。 このライブラリは、ドロップダウンの説明、構文の強調表示、および本質的にkube-shellのすべての「対話性」を実現するその他の多くの機能を備えた入力コマンドの自動追加を実装します。 一度見やすい場合:







このシェルのその他の機能:





将来的には 、この種のコマンドをkubectlで実行するために、SQLに似た言語のサポートも期待されています。



ls <resource-name> select (property1, property2, property3) where (propery1=value1 and property2=value2) order by property3
      
      





kube-shellのインスピレーションは、類似のAWS APIシェルaws-shellsawsによって提供されました。



*このプロジェクトはGoの補助プログラム( python_eats_cobra.goという面白い )を使用して、コマンド、引数kubectlなどで使用できるJSONファイルを生成します。 その後、メインのPythonアプリケーションはこのファイルで動作します。



キューブプロンプト





前述の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





このアプリケーションの名前にある「REPL」は、シェル内で単純なインタラクティブ環境を実装する同じ読み取り-評価-印刷ループサイクルです。 本質的に、kubectl-replはオリジナルの「ラッパー」であり、起動後、kubectlに言及せずに追加のコマンドを入力でき、次の2つの可能性があるため、このユーティリティとの対話を簡素化します。



  1. 名前空間の切り替え(1つのコマンドが現在の名前空間を選択し、招待時に関連するものとして表示され、後続のすべてのkubectl呼び出しに追加されます);
  2. 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





kubectlの簡単なラッパーを作成するもう1つの試みは、今回は通常のBashを使用することです。 開始後、現在のコンテキスト( kubectl config current-context



)と名前空間を招待状に表示し、それらを変更するための短いコマンド(それぞれct



ns



)、および他のエイリアスのセットを提供します。 例:









k8shでロードされたエイリアスは、独自のBashコードで~/.k8sh_extensions



を作成することで拡張できます(これを使用する方法については、リポジトリにがあります)。



kubectl-aliases





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週間前に発表した著者自身として、「本当に馬鹿げているように見えるかもしれませんが、私にとっては非常に便利です。 [これらのエイリアスのおかげで]毎日のワークフローを大幅に節約できます。」



その他





PS



ブログもご覧ください。






All Articles