広告

よく使うkubectlコマンド集

infrastructure as code

kubernetesはkubectlというコマンドラインで操作できます。
スタートアップについて、以前の記事で詳しく説明がありますので、そちらをご参考いただければと思います。
また、この記事では個人的によく使うと考えているコマンドのみを紹介するため、すべてのコマンドが載っているわけではないので、予めご了承ください。

本記事に記載されていないコマンドについては、公式のkubectlチートシートもご確認いただければと思います。

よく使う操作コマンド一覧

まず、本記事で確認できるコマンドの一覧を以下でリストします。

  • kubectl apply:リソース作成&変更適用
  • kubectl delete:リソース削除
  • kubectl get:リソース情報取得
  • kubectl top:リソースのパフォーマンス情報取得
  • kubectl describe:リソース作成時の状態&情報取得
  • kubectl logs:Podログの取得
  • kubectl config:ローカルのkubectl設定情報の管理
  • kubectl api-resources:リソースの略称を取得
  • kubectl exec:Podに入る(Debugでよく使用する)
  • kubectl run:素早くPodを起動する(Debugでよく使用する)

※上記のコマンド以外にもコマンドがありますが、必要に応じて、今後も追記して行こうと思います。

では、早速紹介していきます。

kubectl apply & kubectl delete

kubectl applykubectl deleteはリソースの作成、変更、削除で使用されるコマンドです。
最も基礎的なコマンドと言えるでしょう。
こちらのコマンドの詳細な使い方は、以前の記事で詳しく記載していますので、そちらをご参考していただければと思います。

kubectl get

kubectl getは非常によく使用するコマンドであり、リソースの確認に必要となります。
kubernetesは様々なリソースの種類があります。種類を指定することで、その種類のリソースの一覧または詳細設定まで出力させることが可能です。

基本コマンド:

kubectl get <resource> [resource_name] [option]
  • <resource>の指定値:kubectlが扱っているリソースの指定。指定した種類のリソースが出力対象となる。
    • pods
    • nodes
    • deployment
    • configmap
    • pv
    • services
    • events
    • secret
    • namespace
    • ...
  • [resource_name](省略可):リソース名を指定することで、指定のリソースのみ表示されます。省略した場合、<resource>で指定した種類のすべてのリソースが出力対象となる。
  • [option](省略可):出力内容や形式の指定。
    • --all-namespaceまたは-A:すべてのnamespaceが出力対象となる。※システム管理のPodなども出力可能となる
    • --namespace=<namespace>または-n:指定のnamespaceのリソースのみを出力する。※指定しない場合、現在のnamespaceとなる
      • --namespaced=true:namespaceに属するものすべて。※すべてのリソースはnamespaceに属しているとは限らないです。
      • --namespaced=false:namespaceに属さないものすべて。
    • -o wide:一覧で詳細な情報も出力する
    • -o yaml:yaml形式で詳細情報を出力する(-o wideよりも詳細)
    • -o json:json形式で詳細情報を出力する(-o wideよりも詳細)
      • 結果を| jq ...でさらに処理可能
    • -o jsonpath=<JSONパラメータ>:JSONで指定したパラメータのみ出力する
      • jsonpathの記載方法について、こちらをご参考ください
    • --sort-by=<パラメータ>:出力結果を<パラメータ>を基準に並び替える
    • --selector=<条件>:条件で出力結果をフィルターする
    • --field-selector=<条件>:指定のfield(一覧の列)の値と<条件>とマッチするリソースのみ出力する

使用例

# すべてのnamespaceのpods一覧を取得する
kubectl get pods --all-namespace

# testpodのyaml情報を取得する
kubectl get pods testpod -o yaml

kubectl top

kubectl topはPodやNodeのパフォーマンス情報を取得する時に使用するコマンドです。
PodやNodeのスペックが足りているかどうかを確認やパフォーマンスチェックなどでよく使用されます。

基本コマンド:

# 指定ノードのパフォーマンス情報
kubectl top node <node_name>

# 指定Podのパフォーマンス情報[コンテナのメトリクス]
kubectl top pod <pod_name> [--containers]

使用例

# testnodeのパフォーマンス情報を取得
kubectl top node testnode

# testpodのパフォーマンス情報を取得
kubectl top pod testpod

kubectl describe

kubectl describeはリソースのデプロイの履歴、状態などの詳細情報を取得するためのコマンドです。
デプロイ時にエラーが発生時や、履歴などを確認したい時によく使用されます。

基本コマンド:

# 指定ノードの詳細情報を取得する
kubectl describe nodes <node_name>

# 指定Podの詳細情報を取得する
kubectl describe pods <pod_name>

使用例

# testnodeの詳細情報を取得
kubectl describe nodes testnode

# testpodの詳細情報を取得
kubectl describe pods testpod

kubectl logs

kubectl logsはPodのログ出力を取得するコマンドです。
アプリのDebugやPod起動後のログ確認などで、よく使用されます。
※Podが起動失敗した場合、kubectl logsでログを取得できないので、kubectl describeで確認しましょう。

また、このコマンドはPod専用なので、リソースの種類を指定する必要はありません。

基本コマンド:

# 指定Podのログ出力を出力する(標準出力)
kubectl logs <pod_name> [option]

# 指定ラベル名のすべてのPodのログを出力する。複数Pod
kubectl logs -l <ラベル名>=<ラベル値> [option]
  • [option](省略可):
    • -c <コンテナ名>:Pod内、指定のコンテナのログのみ出力する
      • --all-containers:すべてのコンテナを指定
    • --previous:以前存在してたコンテナのPodログを出力する
    • -f:Podのログをストリームで確認する

使用例

# testpodのログを出力する
kubectl logs testpod

# name=testlabelのラベルを持つPodのログを出力する
kubectl logs -l name=testlabel

kubectl config

kubectl configはkubernetesクラスターと通信するためのローカルPC(ターミナル)の設定を管理するコマンドです。
クラウドのマネジッドサービスを使用する場合はめったに使わないですが、アプリでKubernetesを操作する時やローカルPCでクラスターを接続する時に、たまに使います。

使用パターンはそこまで多くないので、直接例でご紹介します。
また、仕組みも知ったほうがいいので、追加で仕組みについても簡単に書いていきます。

使用例

# 現在の認証情報確認(現在、マージされたkubeconfigの設定を表示)
kubectl config view

# contextを取得
kubectl config get-contexts

# 現在のcontext取得
kubectl config current-context

仕組みについて

kubectlで認証情報を読み取る時、以下の順番で認証ファイル(認証情報)を探すようになっている

  1. --kubeconfigオプションが指定しているファイルパス
  2. $KUBECONFIG 環境変数に指定されたファイルパスの一覧(複数ファイルパスも可能)
    • 既に存在している値を上書きしないように,以下の下記方で追加する
      • export KUBECONFIG=$KUBECONFIG:<追加のパス>
        • <追加のパス>configファイルのパス
        • 环境变量内容的分隔符是:
  3. ~/.kube/config
    • このパスはデフォルトの保存場所となる
    • ここに認証情報が存在しなかった場合、一回でも認証したら、ここに保存される

kubectl exec

kubectl execはPodに入るためのコマンドです。
このコマンドでPodに入るためには、Podが実行中である必要があります。
そのため、Debugとして使用するであれば、まずPodが起動可能であることが条件になります。

使用例

使用パターンはそこまで多くないので、ここでコマンドのサンプルを記載しておきます。
また、特徴としては、kubectl execでPodに入って、exitしてもPodはそのまま動き続きます。即ちPodに入るだけなら、Podへの影響はありません。

# podに入る:実際の動きは、仮想(-i)tty(-t)を起動して /bin/bash を実行する
kubectl exec -it <pod名> /bin/bash

# 実行するコマンドがオプションや引数がある場合、`--`でcommandとkubectlと分割する必要がある
kubectl exec -it <pod名> -- ls -l
kubectl exec -it <pod名> -- /bin/bash

kubectl run

先ほどご紹介したkubectl execは実行中のPodが条件でしたが、コンテナにエラーが発生する時、多くの場合Podも死んでしまいます。
その時、イメージのトラブルシューティングに使用するコマンドはkubectl runになります。
また、一時的なPodを起動するとかの時もよく使われるコマンドです。

使用例

# イメージ指定でpodを起動する:よくdebugに使う
# --rm:exitしたら、podが削除される。-itとよく一緒に使う
kubectl run --image=<イメージのuri> --restart=Never --rm -it <作成するPod名> --command -- /bin/bash

こちらの例では、指定のイメージで一時的なPodを作成し、bashを起動する。exitで退出する場合、Podも消します。

kubectl api-resources

kubectl api-resourcesを使うことで、サポートされているすべてのリソースタイプの略称が確認できます。

コマンド:

kubectl api-resources

その他のコマンドについて

kubectl にはkubectl patchkubectl editのような直接リソースのyaml設定を編集するコマンドもありますが、Kubernetesとしてはyamlファイルで管理し、kubectl applyで変更適用することを勧めているので、推奨はしません。
詳しく知りたい方は、公式ドキュメントをご参考いただければと存じます。

最後に

今回は個人的によく使いそうなkubectlコマンドについて、ご紹介しました。
担当する作業の違いによっては、他のコマンドも使う方がいらっしゃるかもしれませんが、本記事の内容が少しでもお役に立てれば嬉しいです。

コメント

タイトルとURLをコピーしました