📌

【Kubernetes】痒いところに手が届く系 kubectl コマンドまとめ(随時更新)

2024/05/25に公開
  • NodePort で公開している時、ノードの IP アドレスを知りたい
$ k get nodes -o jsonpath='{.items[].status.addresses[?(@.type=="InternalIP")].address}'
  • Deployment で使用しているイメージの一覧を出す
$ k get deploy <Deployment名> -o=jsonpath='{.spec.template.spec.containers[].image}'
  • Deployment のアップデート戦略を出す
$ k get deploy <Deployment名> -o=jsonpath='{.spec.strategy}'
  • Deploument で指定しているメモリを出す
$ k get deploy <Deployment名> -o=jsonpath='{.spec.template.spec.containers[].resources.requests}'
  • Deployment の tolerations を出す
$ k get deploy <Deployment名> -o=jsonpath='{.spec.template.spec.tolerations}'
  • Deployment の Affinity を出す
$ k get deploy <Deployment名> -o=jsonpath='{.spec.template.spec.affinity}'
  • ノードの Taints key 一覧を出す
$ k get nodes -o custom-columns='NODE_NAME:.metadata.name, TAINTS_KEY:.spec.taints[*].key'
  • Horizontal Pod Autoscaler のインストールコマンド
# 現時点での最新版
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml

# kind でクラスターを作成している場合は以下のコマンドも実施するといい
$ k patch -n kube-system deploy metrics-server --type==json --patch '[{"op":"add", "path":"/spec/template/spec/containers/0/args/-", "value":"--kubelet-insecure-tls"}]'
  • QoS クラスを出す
$ k get po <pod名> -o=jsonpath='{.status.qosClass}'
  • kubectl の出力結果のログレベルを詳細にする
    ログレベルは数字が入る
$ k get pod <Pod名> --v=<ログレベル>
  • Pod の最終的な状態を知りたい
$ k get po <pod名> -o=jsonpath='{.status.containerStatuses[].lastState}'
  • デバッグ専用コンテナの起動
    どんなデバッグをしたいかによって使用するコンテナのイメージは変更してください
    例えば、curl だけしたいのであれば、curlimages/curl:latest とかでいい
    デバッグツールを詰め合わせたカスタムイメージを作っておくと様々な場面で便利かも
    以下のコマンドでデバッグしたいコンテナと同じ Pod 内にデバッグ用のイメージでコンテナを起動していろいろデバッグできるようになる
$ k debug --stdin --tty <デバッグしたいPod名> --image=<デバッグ用コンテナのイメージ> --target=<デバッグしたいPod名>
  • 以下のようにクラスタ内に別の Pod を作成してやってみるのもあり
$ k run busybox --image=busybox:latest --rm --stdin --tty --restart=Never --command -- nslookup sample.com
  • Pod に負荷をかける
$ k run -it load-generator --rm --restart=Never --image=busybox:latest -- /bin/sh -c "while sleep 0.001; do wget -w -O- http://<service名>.<namespace名>.svc.cluster.local:<ポート番号>; done"

Discussion