これはなに?
これは 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
この手の話でよくある流れっちゃそうなんですが、例によって kubectl
も plugin で好きなようにカスタマイズ することができます。
そして 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 周りについてはあまり知られてないような気がしたので書いてみました。
(もしかするとみんな既に知ってるだけの可能性がありますが気にしないことにします。)
みなさんも便利そうなプラグインを探してみて下さい
ありがとうございました!