地球上の Kubernetes ユーザーは絶対使うべきツールたちを紹介するよ


これはなに?

これは Ubie アドベントカレンダー 2019 の6日目の記事です。
今日は SRE の @kamina_zzz が担当します

こんな方を想定してます

  • Kubernetes(k8s) を使っている初心者から玄人まで
  • CUI がお好き
  • Lazy

また、筆者の環境はこんな感じですので異なる部分は適宜吸収してください

  • iOS
  • Kubernetes v1.14.7

はじめに

k8s ユーザはみんな一度は使ったことがあるはず、 kubectl コマンド。

  • k8s cluster 内部の状態を見たり操作する
  • Operations, Resource types, Output options を組み合わせてつかう

って感じのコマンドなんですが、具体的にはこんな感じで使いますよね。

$ kubectl get pods
$ kubectl describe deployments my-app-name -n my-app-namespace

みなさん「あぁ、せやな」って感じだと思うんですが、実はこの kubectl 、デフォルトのままだといろいろと不便ですよね?

なので今回は Kubernetes 界隈のみんなが使っているツールたち を紹介していきます! 1

※ ちなみに判断基準は概ね GitHub star です。

言うほど不便か…?

まあそうなんですよね。別に必要なことはできるし。だけど毎日触ってるとこんな気持ちになってくるんです。

  • 複数のクラスタを管理してるとクラスタの切り替えを頻繁にやらなきゃだけどめんどくさい
  • コマンドが長い
    • kubectl describe deployments my-app-name -n my-app-namespace って毎回打つの?無理、たすけて
  • namespace って毎回指定します? deployments 見て pods 見て、って時に毎回??キツくない?
  • etc etc...

てな感じでもっと便利にできそうなところです。便利にしていこう。

krew

この手の話でよくある流れっちゃそうなんですが、例によって kubectlplugin で好きなようにカスタマイズ することができます。
そして krew という名前の、まあ Homebrew の kubectl バージョンみたいなパッケージマネージャがあり、それを使うのが便利です。

インストールの手順などは krew の repo を見てもらうとして、こんな感じで使うツールです。
試しに kail という LinkedIn の CTO の方が公開しているツールをインストールしてみましょう

$ kubectl krew search
$ kubectl krew install tail # krew には tail という名前で公開されている

brew コマンドと同じですね。
こうしてインストールすると kubectl のサブコマンドとしてプラグインを実行できます。

$ kubectl tail --ns my-app-ns --deploy my-app

簡単ですね!これで便利なものをどんどん入れて使いやすくしましょう

kubectx

複数クラスタを管理するときの context 切り替えが便利になります。

$ kubectl krew install ctx
$ kubectl ctx
#=> credentials に基づいて選べる context 一覧が表示される

さらに、fzf コマンド がインストールされていると fuzzy/incremental search ができて、 CUI 上で選択して切り替えられるので、めちゃ早くておすすめです

例えば
- もともと test context にいる
- coffee context へ切り替え
- get pods すると coffee のものが表示される
- kubectx - で一つ前の test context へ戻る
- get pods すると test のものが表示される
というケースではこんな感じに動きます。
2

ご覧のように kubectx は plugin としてではなく、普通のツールとして Homebrew 等を経由してインストールできます。
そのため上のように公式の README では kubectx コマンドを実行したサンプルが用意されています。

kubens

namespace をいちいち指定するの大変ですよね。これは namespace の指定をしなかった場合にデフォルトの namespace を予めセットしてくれるツールです。

同様に kubectl krew install ns すると、kubectx と同じように使えるようになります。
また、こちらも fzf 対応、単独インストール可能です。

例によって default ns -> kube-system ns -> default ns への遷移はこんな感じでできます。

2

kube-aliases

そもそも kubectl get pods[po] って打つの大変なので alias とか作ろうという気持ちになります。
ですが kubectl の特性上、よくやるコマンドは大枠あっても微妙に resource が違ったり output が違ったりして都度 alias を作るのは大変です。
これをあるパターンにそってガッと生成してくれたセットを kubectx, kubens と同じ作者の方が公開されています
パターン化されているので alias 自体も覚えやすく、かなり良いです。

インストール方法は 公式の README を見てもらうことにしますが、シンプルに alias がたくさん書かれたファイルを bash/zsh の config で読み込むだけです。

いくつかの alias を見てみましょう。

$ alias k
#=> k=kubectl
$ alias kgpo
#=> kgpo='kubectl get pods'
$ alias kddep
#=> kddep='kubectl describe deployment'
$ alias ka
#=> ka='kubectl apply --recursive -f'
$ alias krm
#=> krm='kubectl delete'

これで長々したコマンドはもう打たずに済みそうです

おわりに

終わってみれば

  • パッケージマネージャをつかって便利にカスタマイズ
  • alias 貼ってコマンドの簡素化

という、こういうツール系にありがちな流れではありますが、なんだか kubectl 周りについてはあまり知られてないような気がしたので書いてみました。
(もしかするとみんな既に知ってるだけの可能性がありますが気にしないことにします。)

みなさんも便利そうなプラグインを探してみて下さい
ありがとうございました!


  1. 筆者の独断です。みんながやってるかは知りません。ごめん。あと別にデフォルトで不満ないならそれで全然良いと思う。 

  2. 公式 README から拝借