今回はkubectlコマンドのうち、知っておくと便利(だと思った)コマンドや、その他便利機能をまとめてみます。
必要によって追記するかも。
リソース生成・更新(apply)と削除(delete)、リソース確認(get, describe)といった、超基本コマンドは、
ここでは扱いません。
それらコマンドのオプションも一部詳しく書いているので、気になる方は以下の記事もどうぞ。
【Kubernetes】よく使う基礎コマンドまとめ
ーーー
もくじ
・ログ取得
・参考文献
■ヘルプの出し方
<コマンド>
・全ヘルプを出したいとき
kubectl --help
・コマンドは絞って、オプションの詳細を見たいとき
kubectl [コマンド] --help (例: kubectl apply -help)
特筆事項は特になし。
迷ったらヘルプ見れるようにだけしておきたい。
■kubectlの補完機能
最初にインストールや設定が必要。
自動補完まで有効にしておけば楽なのでおすすめ。
詳細は公式参照。
https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion
■k8sリソースの短縮名(略称)の一覧表示
<コマンド>
kubectl api-resources
ちなみに公式にも一覧化されている。(上記のコマンドも記載あり。)
https://kubernetes.io/ja/docs/reference/kubectl/overview/#resource-types
■Node/Podのリソース使用状況確認
<コマンド>
Nodeによる使用量確認: kubectl top node [Node名]
Podによる使用量確認: kubectl top pod [Pod名]
k8s Worker NodeまたはPodによる、ノードCPUとメモリの、実際の使用量・使用率を確認できる。
なお、kubectl describe ~コマンドでも、CPUとメモリのリソース状況は確認できる。
が、describeではk8sによって確保された値(余分含む)を出力するのに対し、
topでは実際の使用状況を出力する点で異なる。
<オプション>
Pod内の、コンテナごとのリソース使用量を確認したい時は、「--containers」オプションをつける。
kubectl top pod --containers
■k8sバージョン確認
kubectl version
クライアントとサーバーで実行中のKubernetesのバージョンを表示する。
ただしサーバー側のバージョンは、k8s初期化(kubeadm init)が正常に終わった後のMaster Nodeでのみ表示される。(kubeadm initの後にバージョン表示できなかったら何かがおかしいかも…)
Worker Nodeは、クライアント側のバージョンのみが表示される。
■マスターのエンドポイント情報確認
kubectl cluster-info
k8s Masterの、エンドポイント情報を表示する。
ちなみに、Serviceの外部エンドポイント情報も出されるらしい(未確認だけど公式には書いてある)。
<出力例>
Kubernetes master is running at http://localhost:8080
■適切なApiVersionの確認方法
以下のQiita記事が非常に勉強になったのでリンクだけ貼らせて頂きます。
ここに全部書いてある。
https://qiita.com/soymsk/items/69aeaa7945fe1f875822
■マニフェスト無しでDeployment生成
kubectl run (任意のデプロイメント名) --image=(起動するイメージ)
マニフェストファイルを書かずに、マニフェストファイルを書いた時とほぼ同等のDeploymentを作って即実行させることができる。
コマンド実行とともに、指定したイメージをDockerリポジトリから取得し、オプションで指定した設定に従い、Deploymentがクラスタ上で実行される。
挙動をちょっと試してみたいといった時に便利な一方、マニフェストファイルが残らないため、大規模開発時や本番環境での利用は避けたほうが良さげ。
<主なオプション>
--image-pull-policy=(always|ifNotPresent|Never)
イメージの取得ルールを設定できる。
・always(デフォルト): 常にDockerリポジトリから取得する
・ifNotPresent: ローカルにイメージがない場合のみDockerリポジトリから取得する。
・Never: ローカルにイメージがあれば利用し、なくてもDockerリポジトリから取得しない。
--replicas=(レプリカ数)
生成するレプリカ数を指定できる。
--expose=(true/false)
デフォルトはfalse。
trueにすると外部公開用のServiceが生成される。
--port=(ポート番号)
コンテナを外部公開する時のポート番号を指定できる。
その他、たくさんのオプションがある&バージョンによって変わるかもなので、
kubectl run --help
で確認するか、または公式を確認のこと。
<コマンド例>
kubectl run test-deploy --image=nginx1.14 -port=80 --replicas=3
※公式にも複数例記載あり。
■podのログ取得
kubectl logs (pod名)
pod名を指定のうえで、podのログを出力できる。(ぶっちゃけ見づらい…)
<主なオプション>
-c (コンテナ名)
pod内の特定コンテナに関するログだけを出力する。
-f
ログをリアルタイムで追加出力していく。
Linuxのtailコマンドの「-f」オプションと同様の動き。
--timestamps=true
タイムスタンプを表示のうえログ出力する。
■設定(kubeconfig)確認と設定追加・更新
◎設定を確認する
kubectl config view
→現在の設定ファイルの内容を確認する。
なお、デフォルトでは設定ファイルの実体は「~/.kube/config」だが、
環境変数KUBECONFIGに値(パス)を設定することで、そのパスのファイルを設定ファイルとして読み込む。
◎設定を追加する
kubconfig set-(設定キー) (設定値)
k8sの設定まわりの詳細は、公式を参照のこと。(私もそのうち記事にしますたぶん)
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-context-and-configuration
https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
■エディタによる編集
kubectl edit (リソース単位名) (リソース名)
エディタ(デフォルトはvi、環境変数EDITORで変更可)上で、リソースの変更作業ができる。
<例>
kubectl edit pod test-pod
マニフェストファイルから変わってしまうのであまりお勧めはしない…。
マニフェストファイルと、変更後の内容の差分確認をしたい時などは、次のdiffコマンドを使うとよい。
■マニフェスト×実際の差分確認
kubectl diff -f マニフェストファイルパス
マニフェストファイルが実際に適用された場合の状態と、現在のクラスターの状態を比較する。
■参考文献
・公式
https://kubernetes.io/docs/reference/kubectl/overview/
https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_run/
https://kubernetes.io/docs/reference/kubectl/cheatsheet
・青山真也著『Kubernetes完全ガイド』
・Qiita記事