もうちょっと早く知りたかった
kubectl
@sakonju
Kubernetes 入門 in 札幌 #05 オンライン
who are you?
  @sakonju (左近充 裕樹)
▷ インフラエンジニア
▷ 普段はGCP/AWSをイジイジ
“kubectl 使ってますか?
kubectl はKubernetesクラスターを制
御するためのコマンドラインツールで
す。
what is kubectl?
Install and Set Up kubectl
Mac
▷ Homebrew
▷ curlでbinaryダウンロード
Windows
▷ chocolatey,PSGallery
▷ curlでbinaryダウンロード
https://kubernetes.io/docs/tasks/tools/install-kubectl/
kubeconfig file
接続するclusterのapi-serverのIPや
access-tokenなどのcredential情報を保持する
ローカルファイル($HOME/.kube/config)。
kubectl config view: kubeconfigの内容を表示
kubectl config current-context: 現在activeにさ
れている情報を表示
kubectl config use-context: contextを切り替え
Syntax
構文
kubectl [command] [TYPE] [NAME] [flags]
command
kubectl [command] [TYPE] [NAME] [flags]
1つ以上のリソースに対して実行したい
操作を指定する
例: apply, create, get, describe, delete,
logs 等など、43のコマンドがある。
https://kubernetes.io/docs/reference/kubectl/kubectl/
“他 使ってますか?
kubectl annotate
kubernetesオブジェクトにあるannotateを
key=value 形式で挿入することが出来る。
更新の場合は--overwrite を引数に追加する必
要がある
-f でファイル名を指定できる。コード管理出来な
い使い方はイマイチ
kubectl api-resources
サポートしているAPI resourceを表示する。
kubectl cluster-info
labelがkubernetes.io/cluster-service=trueの
masterとserviceのアドレスを表示する。
kubectl cluster-info dumpを使用することで、
clusterの問題のデバッグと診断情報を表示す
ることが出来る。
kubectl diff
kubectl diff -f FILENAME で実行できる。
manifestのファイルとkubernetes クラスタとの
差異を確認することが出来る。
緊急対応等で手で設定を修正したあとに、整合
性を合わせたりすることが出来る。CI/CDに組
み込んで、同変更予定なのかを確認することが
出来る。
kubectl cordon/drain
cordon はnodeに新規でスケジュールされない
ようにする。
drain はnodeにあるpodを削除して、別のnode
で起動させる。(内部でcordonも動く)
nodeのメンテナンスを実施する場合に使用す
る。
メンテナンスが完了したらuncordonで戻せる。
kubectl explain
kubectl explain RESOURCE
サポートされているリソースのフィールドを表示
する。(manifestに書けるやつ)
kubectl get
kubectl get pods(/NAME),services(/NAME)
複数のオブジェクトを表示できる
kubectl get pod (NAME) -o json
jsonフォーマットで表示できる
kubectl get pod -n monitoring prometheus-prometheus-operator-prometheus-0
-o "custom-columns=CONTAINER:.spec.containers[0].name"
CONTAINER
prometheus
特定の部分を抜き出して表示出来る
kubectl patch
kubectl patch pod valid-pod -p
'{"spec":{"containers":[{"name":"kubernetes-serv
e-hostname","image":"new image"}]}}'
特定のオブジェクトの特定の部分だけを書き換
えることが出来る。
manifestと差分が発生してしまうのでイマイチ
kubectl plugin
kubectlはpluginによって拡張出来る。PATHが
通ったところに kubectl- のprefixのファイルを呼
び出しが出来る。(自作可)
例) kubectl-foo → kubectl foo
このpluginのマネージャにKrewというものが
あって、kubectl krew install fooといった感じで
インストール出来たりする。
https://github.com/topics/kubectl-plugins
kubectl port-forward
ローカルのportをpod/svcに転送する
kubectl port-forward pods/nginx 8080:80
上記の様に [LOCAL_PORT:]REMOTE_PORTで
指定して接続する。podだけでなくsvcにも転送
可能。デフォルトはpod。
[LOCAL_PORT:]REMOTE_PORT これはスペース
でつなげると複数のportをforward出来る
まとめ
▷ kubectl はいっぱいある
▷ 公式ドキュメントを見よう
https://kubernetes.io/docs/reference/kubectl/kubectl/#see-also

もうちょっと早く知りたかった kubectl