kubectlコマンド チートシート

cheatsheet

目的別 kubectl コマンドリファレンス

基本的なリソース操作 🛠️

Kubernetesクラスタ内のリソース(Pod, Service, Deploymentなど)を表示、作成、更新、削除するための基本的なコマンドです。

目的 コマンド例 説明
リソースの一覧表示
kubectl get pods
kubectl get pods,services
kubectl get all
kubectl get pods -n <namespace>
kubectl get pods -A
kubectl get pods -o wide
kubectl get pods --show-labels
kubectl get pods -l app=myapp
kubectl get pods --field-selector status.phase=Running
指定した種類のリソース、または複数のリソースを一覧表示します。-n または --namespace で名前空間を指定、-A または --all-namespaces ですべての名前空間を対象にします。-o wide で追加情報(ノード名、IPアドレスなど)を表示します。--show-labels でラベルを表示します。-l または --selector でラベルセレクターを指定します。--field-selector でフィールドセレクターを指定します。all はよく使われるリソース(Pod, Service, Deployment, ReplicaSetなど)をまとめて表示しますが、全てのリソースタイプではありません。
リソースの詳細表示
kubectl describe pod <pod-name>
kubectl describe node <node-name>
kubectl describe service <service-name> -n <namespace>
指定したリソースの詳細な情報(設定、ステータス、イベントなど)を表示します。トラブルシューティングの第一歩として非常に役立ちます。イベントログは特に問題解決の手がかりになります。
マニフェストからリソースを作成
kubectl create -f <filename.yaml>
kubectl create -f <directory>
kubectl create namespace <namespace-name>
kubectl create deployment <name> --image=<image>
kubectl create service clusterip <name> --tcp=<port>:<targetPort>
YAMLまたはJSON形式のマニフェストファイルに基づいてリソースを作成します。ディレクトリを指定すると、その中のすべてのマニフェストファイルが処理されます。create namespace のように特定のリソースを直接作成するサブコマンドもありますが、マニフェストファイルを使用する方が一般的で再現性が高いです。create deploymentcreate service は簡単なリソース作成に便利です。
マニフェストからリソースを作成・更新 (宣言的管理)
kubectl apply -f <filename.yaml>
kubectl apply -f <directory>
kubectl apply -k <kustomization_directory>
kubectl apply -f <directory> --prune -l app=myapp
マニフェストファイルに基づいてリソースを作成または更新します。リソースが存在しない場合は作成し、存在する場合はマニフェストの内容に合わせて変更します。宣言的なリソース管理の標準的な方法です。-k オプションで Kustomize を使用できます。--prune オプションは、指定したラベルを持つリソースのうち、適用したマニフェストに含まれなくなったものを削除します(注意して使用してください)。
リソースの編集
kubectl edit deployment <deployment-name>
kubectl edit service <service-name> -n <namespace>
デフォルトのエディタ(環境変数 KUBE_EDITOR または EDITOR で指定)でリソースの定義を直接編集します。保存すると変更が適用されます。一時的な変更やデバッグには便利ですが、変更履歴が残りにくいため、本番環境での多用は推奨されません。マニフェストファイルを更新して apply する方が管理しやすいです。
リソースの削除
kubectl delete pod <pod-name>
kubectl delete deployment <deployment-name>
kubectl delete -f <filename.yaml>
kubectl delete pods --all -n <namespace>
kubectl delete pods -l app=myapp
kubectl delete ns <namespace-name>
kubectl delete pod <pod-name> --grace-period=0 --force
指定したリソース、またはマニフェストファイルで定義されたリソースを削除します。--all で指定した名前空間の特定タイプのリソースをすべて削除できます。-l でラベルセレクターに一致するリソースを削除します。Namespace を削除すると、その中のすべてのリソースも削除されます。--grace-period=0 --force はPodを強制的に即時削除しますが、データ損失や不整合のリスクがあるため、通常は推奨されません(StatefulSetのPodなどでは特に注意)。
Podの簡易実行 (非推奨気味)
kubectl run <pod-name> --image=<image-name>
kubectl run <pod-name> --image=<image> --restart=Never -- ls /
kubectl run nginx --image=nginx --port=80 --expose
(Kubernetes v1.18以降) 主に一時的なPodを作成してコマンドを実行するために使用します。以前はDeploymentを作成する機能もありましたが、非推奨となりました。--restart=Never は単発ジョブに適しています。--expose は簡易的にServiceも同時に作成します。簡単なテストやデバッグには便利ですが、再現性のためにはDeploymentやJobのマニフェストを使うことが推奨されます。

デバッグとトラブルシューティング 🔍

Podやコンテナの問題を調査するためのコマンドです。

目的 コマンド例 説明
コンテナログの表示
kubectl logs <pod-name>
kubectl logs <pod-name> -c <container-name>
kubectl logs -f <pod-name>
kubectl logs --previous <pod-name>
kubectl logs <pod-name> --tail=50
kubectl logs <pod-name> --since=1h
kubectl logs -l app=myapp
Pod内のコンテナの標準出力ログを表示します。-c でマルチコンテナPod内の特定のコンテナを指定します。-f または --follow でログをリアルタイムにストリーミングします。--previous でクラッシュなどにより再起動した前のコンテナのログを表示します。--tail で末尾からの行数を指定します。--since で指定した時間以降のログを表示します (例: 10s, 5m, 2h)。-l でラベルに一致する複数のPodのログをまとめて表示できます。
コンテナ内でコマンド実行
kubectl exec <pod-name> -- <command>
kubectl exec -it <pod-name> -- bash
kubectl exec <pod-name> -c <container-name> -- <command>
実行中のコンテナ内で指定したコマンドを実行します。-i (stdin) と -t (tty) を組み合わせることで、インタラクティブなシェルセッションを開始できます (例: bash, sh)。-c で対象のコンテナを指定します。-- の後に実行したいコマンドと引数を記述します。
実行中のコンテナにアタッチ
kubectl attach <pod-name> -c <container-name> -i -t
実行中のコンテナのプロセスに標準入力、標準出力、標準エラー出力をアタッチします。主に、コンテナ起動時にフォアグラウンドで実行されているプロセスと対話するために使用されます。exec と似ていますが、新しいプロセスを起動するのではなく、既存のプロセスに接続します。
ポートフォワーディング
kubectl port-forward pod/<pod-name> <local-port>:<pod-port>
kubectl port-forward service/<service-name> <local-port>:<service-port>
kubectl port-forward deployment/<deployment-name> <local-port>:<container-port>
kubectl port-forward pod/<pod-name> <local-port>:<pod-port> --address 0.0.0.0
ローカルマシンのポートから、クラスタ内のPod、Service、Deploymentが公開しているポートへトラフィックを転送します。これにより、ローカルマシンから直接クラスタ内のアプリケーションにアクセスできます。デバッグや開発時に非常に便利です。--address 0.0.0.0 を指定すると、ローカルホスト以外からのアクセスも許可します(セキュリティに注意)。
ファイルコピー
# ローカルからPodへコピー
kubectl cp <local-path> <namespace>/<pod-name>:<container-path>
# Podからローカルへコピー
kubectl cp <namespace>/<pod-name>:<container-path> <local-path>
kubectl cp <local-path> <pod-name>:<container-path> -c <container-name>
ローカルファイルシステムとPod内のコンテナ間でファイルをコピーします。デバッグ用のファイルを送ったり、コンテナ内のログファイルや設定ファイルを取得したりするのに使用します。デフォルトの名前空間を使用しない場合は <namespace>/<pod-name> の形式で指定します。-c でコンテナを指定します。
Podのデバッグ (v1.18+)
kubectl debug <pod-name> -it --copy-to=debug-pod --image=busybox --target=<container-name>
# ノードのデバッグ (特権コンテナ)
kubectl debug node/<node-name> -it --image=ubuntu
実行中のPodのコピーを作成し、デバッグ用のツールが含まれたイメージでコンテナを追加したり、既存のコンテナのプロセス名前空間を共有したりしてデバッグを行います。--copy-to で新しいPod名、--image でデバッグ用イメージ、--target で対象コンテナを指定します。また、ノード自体をデバッグするための特権コンテナを起動することも可能です (kubectl debug node/...)。これにより、distrolessイメージのようなデバッグツールが含まれていないコンテナも調査しやすくなります。

設定とコンテキスト管理 ⚙️

kubectl の設定ファイル (kubeconfig) や、接続するクラスター (コンテキスト) を管理するコマンドです。

目的 コマンド例 説明
設定の表示
kubectl config view
kubectl config view --minify --raw
kubeconfig ファイルの内容を表示します。--minify は現在のコンテキストに関連する情報のみ表示します。--raw は認証情報などを展開して表示します(注意して使用)。
コンテキスト一覧表示
kubectl config get-contexts
kubeconfig ファイルに定義されている全てのコンテキストを一覧表示します。現在のコンテキストには * が付きます。
現在のコンテキスト表示
kubectl config current-context
現在アクティブなコンテキスト名を表示します。
コンテキストの切り替え
kubectl config use-context <context-name>
指定したコンテキストをアクティブにします。これ以降の kubectl コマンドはこのコンテキスト(クラスター、ユーザー、名前空間)を使用します。
コンテキストの設定変更
kubectl config set-context <context-name> --namespace=<namespace>
kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name>
既存のコンテキストの設定(デフォルト名前空間、クラスター、ユーザー)を変更します。
認証情報の設定
kubectl config set-credentials <user-name> --token=<token>
kubectl config set-credentials <user-name> --client-certificate=<path> --client-key=<path>
kubeconfig に新しいユーザー認証情報を追加または更新します。トークン、クライアント証明書/キー、ユーザー名/パスワード(非推奨)などの認証方法を指定できます。
クラスター情報の設定
kubectl config set-cluster <cluster-name> --server=<server-url> --certificate-authority=<ca-path>
kubectl config set-cluster <cluster-name> --server=<server-url> --insecure-skip-tls-verify=true
kubeconfig に新しいクラスター接続情報を追加または更新します。APIサーバーのURLや、サーバー証明書を検証するためのCA証明書のパスなどを指定します。--insecure-skip-tls-verify=true は証明書の検証をスキップしますが、セキュリティリスクがあるためテスト環境以外では非推奨です。

リソース管理の応用 📊

ラベル、アノテーション、スケーリング、ロールアウトなど、リソースをより高度に管理するためのコマンドです。

目的 コマンド例 説明
ラベルの操作
kubectl label pods <pod-name> key=value
kubectl label pods --all env=production
kubectl label pods <pod-name> key=new-value --overwrite
kubectl label pods <pod-name> key-
リソースにラベルを追加、更新、削除します。ラベルはリソースを整理し、セレクターで対象を選択するために使用されます。--overwrite で既存のラベルを上書きします。キー名の末尾に - を付けるとそのラベルを削除します。
アノテーションの操作
kubectl annotate pods <pod-name> key=value
kubectl annotate pods <pod-name> description="My pod description"
kubectl annotate pods <pod-name> key=new-value --overwrite
kubectl annotate pods <pod-name> key-
リソースにアノテーションを追加、更新、削除します。アノテーションは、ツールやライブラリが使用するための非識別的なメタデータを格納します。操作方法はラベルと似ています。
リソースのスケーリング
kubectl scale deployment <deployment-name> --replicas=3
kubectl scale rs <replicaset-name> --replicas=5
kubectl scale statefulset <sts-name> --replicas=2
kubectl scale deployment <deployment-name> --current-replicas=2 --replicas=3
Deployment, ReplicaSet, StatefulSet, ReplicationController などのレプリカ数を変更します。--current-replicas オプションを使うと、現在のレプリカ数が指定値と一致する場合のみスケーリングを実行します(競合状態の防止)。
オートスケーリングの設定
kubectl autoscale deployment <dep-name> --cpu-percent=80 --min=2 --max=10
kubectl autoscale deployment <dep-name> --custom-metric=my_metric --target-average-value=10k
kubectl get hpa
kubectl describe hpa <hpa-name>
HorizontalPodAutoscaler (HPA) を作成し、CPU使用率やカスタムメトリクスに基づいてPodのレプリカ数を自動的に調整します。--cpu-percent でCPU使用率の目標値を、--min, --max でレプリカ数の最小値と最大値を指定します。カスタムメトリクスや外部メトリクスに基づくスケーリングも可能です。
ロールアウト管理 (Deployment) 🔄
kubectl rollout status deployment/<deployment-name>
kubectl rollout history deployment/<deployment-name>
kubectl rollout history deployment/<deployment-name> --revision=<revision>
kubectl rollout undo deployment/<deployment-name>
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision>
kubectl rollout pause deployment/<deployment-name>
kubectl rollout resume deployment/<deployment-name>
kubectl rollout restart deployment/<deployment-name>
Deployment の更新(ロールアウト)状況を確認、履歴を表示、以前のリビジョンへのロールバック、一時停止、再開、再起動(Podのローリング再作成)を行います。status で完了を待機できます。history で変更履歴(リビジョン)を確認し、undo で特定のリビジョンに戻せます。pause/resume は段階的なロールアウトや問題発生時の一時停止に利用できます。restart は設定変更なしにPodを再作成したい場合に便利です。

ノード管理 🖥️

クラスタを構成するノード(物理マシンまたは仮想マシン)を管理するコマンドです。

目的 コマンド例 説明
ノードの一覧表示
kubectl get nodes
kubectl get nodes -o wide
kubectl get nodes -l <label-key>=<label-value>
クラスタ内の全てのノードとそのステータス(Ready, NotReadyなど)を一覧表示します。-o wide でIPアドレスやOS情報などの詳細を表示します。-l で特定のラベルを持つノードをフィルタリングできます。
ノードの詳細表示
kubectl describe node <node-name>
指定したノードの詳細情報(マシン情報、状態、容量、割り当て済みリソース、スケジュールされているPod、イベントなど)を表示します。ノードの問題調査に不可欠です。
ノードへのスケジューリング停止
kubectl cordon <node-name>
指定したノードを「スケジュール不可 (Unschedulable)」状態にします。これにより、新しいPodがそのノードにスケジュールされなくなります。既存のPodは影響を受けません。メンテナンスの準備段階で使われます。
ノードへのスケジューリング再開
kubectl uncordon <node-name>
cordon されたノードを元の状態に戻し、再び新しいPodがスケジュールされるようにします。メンテナンス完了後に実行します。
ノードからのPod退避 (Drain) ⚠️
kubectl drain <node-name>
kubectl drain <node-name> --ignore-daemonsets
kubectl drain <node-name> --delete-local-data
kubectl drain <node-name> --force
ノードを安全にメンテナンスするために、まずノードを cordon し、その後、そのノード上で実行されているPodを(ReplicaSet等で管理されていれば)他のノードへ移動させ、完了後にノードから削除します。--ignore-daemonsets は DaemonSet によって管理されるPodを無視します(削除しない)。--delete-local-data は emptyDir などローカルボリュームを使用するPodも削除を許可します(データ消失に注意)。--force は ReplicationController などで管理されていないPodも削除します。慎重に実行する必要があります。
ノードへのTaint設定
# Taint を追加 (特定のPodしかスケジュールされなくする)
kubectl taint nodes <node-name> key=value:NoSchedule
# Taint を削除
kubectl taint nodes <node-name> key:NoSchedule-
# Effect の種類: NoSchedule, PreferNoSchedule, NoExecute
ノードに Taint を設定します。Taint は、特定の Toleration を持つPodのみがそのノードにスケジュールされるように制限する機能です。Effect には NoSchedule(新規スケジュール不可)、PreferNoSchedule(可能な限り避ける)、NoExecute(新規スケジュール不可かつ既存Podの退避)があります。特定のワークロードを特定のノードに配置したり、ノードの状態(例: network unreachable)に基づいてPodを退避させたりするのに使われます。

クラスター情報 ℹ️

クラスター全体に関する情報を取得するコマンドです。

目的 コマンド例 説明
クラスターエンドポイント情報表示
kubectl cluster-info
kubectl cluster-info dump
Kubernetesマスター(Control Plane)と、kube-dnsなどのクラスターサービスのURLを表示します。dump サブコマンドは、現在のクラスター状態(リソース定義など)を標準出力にダンプします(デバッグ用)。
利用可能なAPIバージョン表示
kubectl api-versions
クラスターで有効になっているAPIグループとバージョン(例: apps/v1, batch/v1, networking.k8s.io/v1)の一覧を表示します。マニフェストファイルの apiVersion を書く際に参照します。
利用可能なAPIリソース表示
kubectl api-resources
kubectl api-resources --namespaced=true
kubectl api-resources --api-group=apps
クラスターで利用可能な全てのリソースタイプ(SHORTNAMES、APIGROUP、NAMESPACED、KIND)を一覧表示します。--namespaced フラグで名前空間スコープかクラスターワイドスコープかをフィルタリングできます。--api-group で特定のAPIグループのリソースのみを表示できます。kubectl get などで指定できるリソース名を確認するのに便利です。
バージョン表示
kubectl version
kubectl version --short
kubectl version --client
kubectlクライアントとKubernetes APIサーバーのバージョン情報を表示します。バージョンの互換性を確認する際に重要です。--short はクライアントとサーバーのバージョン番号のみを簡潔に表示します。--client はクライアントバージョンのみを表示します。

出力形式の制御 📄

kubectl コマンドの出力形式をカスタマイズするオプションです。

目的 コマンド例 説明
JSON形式で出力
kubectl get pods <pod-name> -o json
リソース情報をJSON形式で出力します。jqなどのツールと組み合わせて情報を抽出・加工するのに便利です。
YAML形式で出力
kubectl get deployment <deployment-name> -o yaml
リソース情報をYAML形式で出力します。既存のリソース定義を確認したり、マニフェストファイルのテンプレートとして利用したりするのに便利です。
詳細情報を含めて出力
kubectl get pods -o wide
kubectl get nodes -o wide
デフォルトのテーブル形式に加え、ノード名、IPアドレス、ポートなどの追加情報を表示します。
カスタム列で出力
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
指定したフィールドを列としてテーブル形式で出力します。列名:JSONPath の形式で指定します。必要な情報だけを簡潔に表示したい場合に便利です。
JSONPathで特定の値を出力
kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
JSONPath 式を使用して、リソースのJSONデータから特定の値を抽出して表示します。スクリプトなどで特定の値だけを利用したい場合に強力です。
変更を監視 (Watch)
kubectl get pods -w
kubectl get events --watch
-w または --watch フラグを付けると、リソースの変更(作成、更新、削除)をリアルタイムで監視し、変更があるたびに情報を出力します。デプロイ状況の確認やイベント監視に便利です。Ctrl+Cで終了します。

その他便利なコマンド ✨

上記以外にも役立つ様々なコマンドがあります。

目的 コマンド例 説明
リソース定義のドキュメント表示
kubectl explain pods
kubectl explain pods.spec.containers
kubectl explain deployment.spec.strategy --recursive
指定したリソースタイプやそのフィールド(例: Podのspec、コンテナ定義)に関するドキュメント(フィールドの説明、型、必須かどうかなど)を表示します。マニフェストファイルを作成・編集する際に非常に役立ちます。--recursive オプションを使うと、ネストされたフィールドのドキュメントも再帰的に表示します。
リソース使用状況の表示
kubectl top nodes
kubectl top pods
kubectl top pods -n <namespace>
kubectl top pods --containers
kubectl top pods -l app=myapp
ノードまたはPodごとのCPUとメモリの使用状況を表示します。Metrics Server がクラスターにデプロイされている必要があります。--containers オプションを付けると、Pod内の各コンテナの使用状況を表示します。パフォーマンスのボトルネック調査やリソース要求/制限の設定に役立ちます。
権限確認 (RBAC)
kubectl auth can-i get pods
kubectl auth can-i create deployments --namespace <namespace>
kubectl auth can-i list secrets --as <user-name>
現在のユーザー(または --as で指定したユーザー)が、特定の操作(Verb: get, list, create, delete など)を特定のリソースに対して実行できるかどうかを確認します。RBAC (Role-Based Access Control) の設定確認やトラブルシューティングに役立ちます。
マニフェストとクラスターの差分表示
kubectl diff -f <filename.yaml>
kubectl diff -f <directory>
kubectl diff -k <kustomization_directory>
指定したマニフェストファイル(またはディレクトリ、Kustomization)の内容と、クラスター上に現在存在するリソースとの差分を表示します。kubectl apply を実行する前に、どのような変更が行われるかを確認するのに非常に便利です。
プラグインの管理 (例: krew)
kubectl krew search
kubectl krew install <plugin-name>
kubectl krew list
kubectl krew upgrade
kubectl <plugin-name> --help
kubectl はプラグイン機構を備えており、機能を拡張できます。krew は kubectl プラグインのパッケージマネージャーです。これを使ってプラグインの検索、インストール、一覧表示、更新などを行えます。インストールしたプラグインは kubectl <plugin-name> のように実行できます。

コメント

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