Edited at

GKEの快適なオペレーション


はじめに

最近、業務で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を切り替えているとどのコンテキストで作業しているか分かりづらいので、

常にプロンプトに表示するようにしています。

自分は以下のプラグインを参考にフォーマットを変えて表示しています。

- https://github.com/jonmosco/kube-ps1

- https://github.com/katsew/zsh-gkeadm-prompt


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 getkubectl 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ライフを!