これはなに?
これは 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 上で選択して切り替えられるので、めちゃ早くておすすめです ![]()
例えば
- もともと
testcontext にいる -
coffeecontext へ切り替え -
get podsするとcoffeeのものが表示される -
kubectx -で一つ前のtestcontext へ戻る -
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 周りについてはあまり知られてないような気がしたので書いてみました。
(もしかするとみんな既に知ってるだけの可能性がありますが気にしないことにします。)
みなさんも便利そうなプラグインを探してみて下さい ![]()
ありがとうございました!