概要
kubectl
コマンド打ち疲れる問題へのフォローと、
開発、本番環境などの環境ごとにkubernetesクラスタを使い分けるときのkubectl config
関連のうまい使い方の例を紹介します。他にもkubectlのエイリアスを使ったりkube-shell
のようなものを使ったりいろいろな方法がありますので、自分の好みにあったものを見つけると良いと思います。
TL;DR;
- Tabキーで補完してくれるAutocomplete使いましょう
- 接続先やロールの変更が頻繁な場合は
.kubeconfig
ごと切り替えるのに、direnvで変更する方法 - Podのログを見るのにsternを使う
改善したいこと・解決したい課題
先に挙げた3つのことをもう少し具体的に説明します。
1.タイプ数を減らすためにAutocompleteを使う
基本的な内容ですが補完を有効にする方法があります。
get
程度なら苦にもならないですが、describe
とか打ちにくいほうだったりでdes
+ Tabキー
でdescribe
までを補完してくれます。
エイリアスを使うほうがもっと楽だと思いますが、僕は人に教えたり話したりするときに手が覚えているものと通常のコマンドとに違いがあるのが嫌な人なので、略していないほうで記憶するのが好みです。(通じない言い方して「あーー!」ってなるし)
kubernetesを触りはじめであればk8sリソース名がすぐに出てこなかったりするので、kubectl get
+ Tabキー
で一覧が表示されすぐにわかって便利です。
また、存在するnamespace名やdeploy名、pod名などを直接してすることがあると思いますが、こちらも補完してくれるのでかなり便利なものになっております。
つまり、具体的にはkubectl get deploy -n kube-s
+ Tabキー
で kube-systemに補完してくれますよ。
# zshの場合
$ source <(kubectl completion zsh) # setup autocomplete in zsh
この内容はkubectl Cheat Sheetに記載がありますが、このページ他にも有用な情報があるので一読しておくと良いかもしれません。
特にverbosityを指定して実行してみるとk8s apiserverへのrequest内容やらAPIリソースなどが具体的に見えるので、エラーになったときのデバッグ以外にもk8sを理解するのにとても役立ちます。
2. 環境の切り替えを簡単にするためにdirenvを使う
補完してくれるからといってもkubectl config use-context [env]
で切り替える癖がまだついてないのと、k8sクラスタを作って壊してを何度もやるしクラスタ自体いくつか切り替えることがあるので、.kubeconfig
の命名規則をしっかり考えるよりは、クラスタごとに.kubeconfig
を分けるという選択しました。
kubectl plugin
を使う賢い選択肢もありますがkubectl plugin
の仕様が安定してからやるか、ディレクトリごとにクラスタ依存のファイルも置いておけますし、そもそも自分は賢くないのでシンプルにやろうという選択です。
具体的な方法はdirenv
を使う方法で、.envrc
の内容はそのディレクトリにある.kubeconfig
を環境変数KUBECONFIG
にロードするという内容だけ。(direnvのインストール方法、詳しい使い方は公式などを参照してください。)
.envrc
は下のようになります。
# .envrc
export KUBECONFIG=$(pwd)/.kubeconfig
単純に接続するだけであればこれくらいでよいと思いますが、
.kubeconfig
の内容をどのように設定しておくか?のほうがdefautl namespaceを切り替えたり、アカウントを切り替えたりする場合はもう少し工夫のしようがありそうです。
3. podごとにログを見るのが辛いのでsternを使う
kubectlの話じゃないのですが、kubectl logs [pod_id]
を使ってログを見るよりも stern
を使うほうがめちゃくちゃ簡単なのでご紹介します。
インストール方法は公式を参照してください。 github.com wercker/stern
kubectl logs
コマンドだとpodのIDを知る必要があり、kubectl get pod
してkubectl logs
を打つ必要がありますが、予めdeploy名を知っていればstern [deploy_name]
で参照できます。また複数Podで動作していても勝手にQuery条件に合うものを引っ張って表示してくれるので便利。
同じようにこちらもAutocompleteが効くので設定しておきましょう。
# zshの場合
source <(stern --completion=zsh)
まとめ
どんどん開発が進んでいるのでここの情報を鵜呑みにせず、自分にあったものを見つけてください。
そもそもQiitaを書くときはautocomplete効くわけないのでkubectlが辛かったです。