はじめに
最近、業務でGKEを使いはじめたので、gcloudコマンドやkubectlコマンドを使ったオペレーションが増えてきました。
gcloudコマンドやkubectlコマンドはそのまま使っても便利ですが、より快適なオペレーションを実現するために自分が工夫していることを書いておきます。
GCPのプロジェクト、アカウント切り替えを快適に
業務では複数のGCPプロジェクトを切り替えて作業します。
gcloudを使う場合、以下のコマンドを実行します。
# プロジェクトのリストを表示
$ gcloud projects list
# プロジェクトの切り替え
$ gcloud config set project PROJECT_ID
頻繁に切り替えることが多いので、この手順は結構手間になります。
そこでfzfでプロジェクトをインタラクティブに選択できる関数を作成し、alias登録してあります。
function _gcloud_change_project() {
local proj=$(gcloud projects list | fzf --header-lines=1 | awk '{print $1}')
if [ -n $proj ]; then
gcloud config set project $proj
return $?
fi
}
alias gcp=_gcloud_change_project
現在のプロジェクトは以下のコマンドで確認できます。
$ gcloud config get-value project
こちらもプロジェクトと同じように、アカウント切り替えもalias登録してあります。
function _gcloud_change_account() {
local account=$(gcloud auth list --format="value(account)" | fzf | awk '{print $1}')
if [[ -n $account ]]; then
gcloud config set account $account
return $?
fi
}
alias gca=_gcloud_change_account
kubectlのcontextとnamespaceの切り替え快適に
通常、kubectlを使ってcontextを切り替える場合は、このコマンドを実行します。
# contextのリストを表示
$ kubectl config get-contexts
# contextを切り替え
$ kubectl config use-context CONTEXT
また、namespaceはコマンド実行時に--namespaceオプションで指定することが多いと思います。
こういった手順が面倒なときは、こちらのkubectx/kubensというコマンドを使うとcontextやnamespaceを補完してくれるので、切り替えが楽になります。
また、fzfがインストールされている際はインタラクティブにcontextやnamespaceを切り替えることができます。
プロンプトに現在のプロジェクトを表示して快適に
複数のプロジェクトやcontextを切り替えているとどのコンテキストで作業しているか分かりづらいので、
常にプロンプトに表示するようにしています。
自分は以下のプラグインを参考にフォーマットを変えて表示しています。
kubctlの補完を有効にして快適に
標準でbashとzsh用の補完機能が提供されているので、ぜひ有効にしましょう。
# bash
source <(kubectl completion bash)
# zsh
source <(kubectl completion zsh)
自分は.zshrcに以下を追加してあります。
if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fi
Kubernetesのリソースの指定を快適に
kubectl getやkubectl describeなどで指定するリソース名は省略することができます。
$ kubectl get pod
$ kubectl get po
$ kubectl get deployment
$ kubectl get deploy
$ kubectl get service
$ kubectl get svc
以下が、リソース名と省略形の対応関係の一覧です。
kubectl api-resources で確認することができます。
| リソース名 | 省略形 |
|---|---|
| certificatesigningrequests | csr |
| clusterrolebindings | |
| clusterroles | |
| componentstatuses | cs |
| configmaps | cm |
| controllerrevisions | |
| cronjobs | |
| customresourcedefinition | crd |
| daemonsets | ds |
| deployments | deploy |
| endpoints | ep |
| events | ev |
| horizontalpodautoscalers | hpa |
| ingresses | ing |
| jobs | |
| limitranges | limits |
| namespaces | ns |
| networkpolicies | netpol |
| nodes | no |
| persistentvolumeclaims | pvc |
| persistentvolumes | pv |
| poddisruptionbudgets | pdb |
| podpreset | |
| pods | po |
| podsecuritypolicies | psp |
| podtemplates | |
| replicasets | rs |
| replicationcontrollers | rc |
| resourcequotas | quota |
| rolebindings | |
| roles | |
| secrets | |
| serviceaccounts | sa |
| services | svc |
| statefulsets | sts |
| storageclasses | sc |
kubectlを省略して快適に
kubectl自体も毎回入力するのは手間なので省略しちゃいましょう。
こちらは好みも別れますが、以下のようなaliasを登録してます。
kubectxとkubensも合わせて登録してます。
alias k=kubectl
alias kx=kubectx
alias kn=kubens
ロギングを快適に
複数のログをまとめて見る場合は、Stackdriver loggingが便利ですが、CLIで手軽に見たい場合があります。
また、kubectlには標準でkubectl -f logs POD_IDでログを出力することができますが、PodのIDを個別に指定してしなければいけないので面倒です。
sternを使うとPodのラベルを指定して手軽にログを出力することができます。
こちらも補完を有効にしておくとさらに便利です。
if [ $commands[stern] ]; then
source <(stern --completion=zsh)
fi
まとめ
他にも良いTipsがあればぜひ教えていただきたいです!
快適なGKEライフを!