LoginSignup
3
3

More than 5 years have passed since last update.

kubectlをもう少し楽に使う

Posted at

概要

kubectlコマンド打ち疲れる問題へのフォローと、
開発、本番環境などの環境ごとにkubernetesクラスタを使い分けるときのkubectl config関連のうまい使い方の例を紹介します。他にもkubectlのエイリアスを使ったりkube-shellのようなものを使ったりいろいろな方法がありますので、自分の好みにあったものを見つけると良いと思います。

TL;DR;

  1. Tabキーで補完してくれるAutocomplete使いましょう
  2. 接続先やロールの変更が頻繁な場合は.kubeconfigごと切り替えるのに、direnvで変更する方法
  3. 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が辛かったです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3