私は3年以上にわたって大規模なKubernetesクラスターの運用を管理してきましたが、日常業務で非常に効果的であることが証明されているkubectlターミナルを構成するための最小限のアプローチを共有したいと思います。適切に構成されたコマンドライン端末は、生産性を大幅に向上させることができます。それはパンとバターのようなものです-魔法の組み合わせです。
しかし、一般的な変更や機能の追加とは異なり、新しいバイナリ、ラッパー、または変更をインストールする必要がない単純な構成を信じています。特にkubectlの場合、欠点がほとんどない、ネイティブで適度に設計されたツールです。
kubectlターミナルへの4つの簡単なアドオンを次に示します。この構成では、毎日400台のマシンからなる20個の大規模なKubernetesクラスターを管理しています。
kubetailを使用して複数のポッドのログを追跡する
kubectlを使用するときに最初に気付くのは、複数のポッド間でログを追跡するのが難しいことです。これは、kubectlにまだ実装されていない最も要求されたシナリオの1つです。
kubectlで単一のポッドのログを追跡する必要がある場合は、次のようになります。
kubectl logs -f <POD_NAME> -n <NAMESPACE>
kubetailで複数のポッドを追跡するには、次のように記述します。
kubetail <POD_NAME_REGEX> -n <NAMESPACE>
通常の式に一致するすべてのポッドの追跡を開始します。複数のポッドが同時にログに記録されるため、kubetailは、ナビゲートしやすいように異なる色でポッドにフラグを付けます。
kubetailは、kubectlの単純なラッパーです。インストールは簡単です。手順はここにあります。
2.デフォルトの名前名を動的に変更する
最終的には、すべてのkubectl操作に名前名フラグを何度も設定することに飽きてしまいます。デフォルトの名前名を動的に変更する方法を理解する必要があります。
このために、私は単純なエイリアス関数を作成しました
ksn
(名前はset namespaceを意味します)。
# Add the following to .zshrc/.bashrc...etc
# Allows setting default namespace while working with kubectl #
alias k='kubectl'
alias ksn='_f(){k get namespace $1 > /dev/null; if [ $? -eq 1 ]; then return $?; fi; k config set-context $(k config current-context) --namespace=$1; echo "Namespace: $1"};_f'
#Usage:
#➜ ~ ksn dev1 (dev-context/dev1)
# Context "dev-context" modified.
# Namespace: dev1
#➜ ~ ksn ff (dev-context/dev1)
# Error from server (NotFound): namespaces "ff" not found
通常、現在のタスクに応じて、名前の配列を操作します。また、問題の80%がKafka名前空間に関連しているため、この機能は長い間私のデフォルトのツールでした。特に、kubectlに多くの命令を入力する必要がある複雑なタスクで作業する場合は、時間を大幅に節約できます。
3.シェルプロンプトにkube-contextとnamespaceを表示する
kubectlコマンドを使用するときは、常に現在の
kube-context
とに注意を払う必要がありnamespace
ます。20の異なるコンテキストと50の名前名でクラスターを同時に管理する場合、それほど簡単ではありません。特に、異なるクラスターやコンテキストで同時に複数のタスクを処理する場合は、環境で間違ったコマンドを使用するリスクがあります。
この問題を解決するには、アクティブな名前名とコンテキストを次のウィンドウに常に表示すると非常に便利です。
以下の例では、私のコンテキストは
dev2–1
で、名前名はtest
です。クラスター内でさまざまなコマンドを実行するときに、この情報を確認するだけで十分です。
インストールと構成の手順については、こちらをご覧ください。
4.最も重要なkubectlエイリアス
エイリアスは、ターミナルでの作業をカスタマイズおよび高速化するための最速の方法です。これが私の最もよく使われるエイリアスで、ほとんど私の性質の一部になっています。
alias k='kubectl '
alias kcc='kubectl config current-context'
alias kdp='kubectl delete po'
alias kgc='kubectl config get-contexts'
alias kge='kubectl get events --sort-by='\''{.lastTimestamp}'\'
alias kgp='kubectl get po'
alias kl='kubectl logs '
alias kpf='kubectl port-forward'
alias ksc='kubectl config use-context'
少ない方が良い:端末に過負荷をかけないでください
kubectlユーザー向けの4つの主要な端末の改善について説明しました。
- kubetailを使用して複数のポッドのログを追跡します。
- デフォルトの名前名を動的に変更して、kubectl命令の長さを大幅に短縮します。
- 偶発的なエラーを回避するために、端末の横にコンテキストと名前名を表示します。
- 重要なkubectlエイリアスのリスト。
このミニマリストセットとは対照的に、人気のある端末のアップグレード(K9など)は、機能やキャンディーラッパーでいっぱいで、圧倒されることがよくありますが、時間がかかり、気が散り、さらに重要なことに、不要です。追加する機能(スパンコールと弓)が多いほど、画面上のすべての追加情報を確認するのにかかる時間が長くなります。
エレガントな端末構成により、他に類を見ない集中力を維持できます。
シンプルなコマンドラインベースの構成により、ネイティブのバイナリとツールを使用して迅速かつ効率的に開発できます。これは、特に大規模なインフラストラクチャで作業する場合、仮想マシンでさまざまなプロファイルにログインおよびログアウトする場合に非常に重要です。
端末構成は、開発者としてのあなたを豊かにする必要があります。