目的別 kubectl コマンドリファレンス
基本的なリソース操作 🛠️
Kubernetesクラスタ内のリソース(Pod, Service, Deploymentなど)を表示、作成、更新、削除するための基本的なコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
リソースの一覧表示 |
|
指定した種類のリソース、または複数のリソースを一覧表示します。-n または --namespace で名前空間を指定、-A または --all-namespaces ですべての名前空間を対象にします。-o wide で追加情報(ノード名、IPアドレスなど)を表示します。--show-labels でラベルを表示します。-l または --selector でラベルセレクターを指定します。--field-selector でフィールドセレクターを指定します。all はよく使われるリソース(Pod, Service, Deployment, ReplicaSetなど)をまとめて表示しますが、全てのリソースタイプではありません。 |
リソースの詳細表示 |
|
指定したリソースの詳細な情報(設定、ステータス、イベントなど)を表示します。トラブルシューティングの第一歩として非常に役立ちます。イベントログは特に問題解決の手がかりになります。 |
マニフェストからリソースを作成 |
|
YAMLまたはJSON形式のマニフェストファイルに基づいてリソースを作成します。ディレクトリを指定すると、その中のすべてのマニフェストファイルが処理されます。create namespace のように特定のリソースを直接作成するサブコマンドもありますが、マニフェストファイルを使用する方が一般的で再現性が高いです。create deployment や create service は簡単なリソース作成に便利です。 |
マニフェストからリソースを作成・更新 (宣言的管理) |
|
マニフェストファイルに基づいてリソースを作成または更新します。リソースが存在しない場合は作成し、存在する場合はマニフェストの内容に合わせて変更します。宣言的なリソース管理の標準的な方法です。-k オプションで Kustomize を使用できます。--prune オプションは、指定したラベルを持つリソースのうち、適用したマニフェストに含まれなくなったものを削除します(注意して使用してください)。 |
リソースの編集 |
|
デフォルトのエディタ(環境変数 KUBE_EDITOR または EDITOR で指定)でリソースの定義を直接編集します。保存すると変更が適用されます。一時的な変更やデバッグには便利ですが、変更履歴が残りにくいため、本番環境での多用は推奨されません。マニフェストファイルを更新して apply する方が管理しやすいです。 |
リソースの削除 |
|
指定したリソース、またはマニフェストファイルで定義されたリソースを削除します。--all で指定した名前空間の特定タイプのリソースをすべて削除できます。-l でラベルセレクターに一致するリソースを削除します。Namespace を削除すると、その中のすべてのリソースも削除されます。--grace-period=0 --force はPodを強制的に即時削除しますが、データ損失や不整合のリスクがあるため、通常は推奨されません(StatefulSetのPodなどでは特に注意)。 |
Podの簡易実行 (非推奨気味) |
|
(Kubernetes v1.18以降) 主に一時的なPodを作成してコマンドを実行するために使用します。以前はDeploymentを作成する機能もありましたが、非推奨となりました。--restart=Never は単発ジョブに適しています。--expose は簡易的にServiceも同時に作成します。簡単なテストやデバッグには便利ですが、再現性のためにはDeploymentやJobのマニフェストを使うことが推奨されます。 |
デバッグとトラブルシューティング 🔍
Podやコンテナの問題を調査するためのコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
コンテナログの表示 |
|
Pod内のコンテナの標準出力ログを表示します。-c でマルチコンテナPod内の特定のコンテナを指定します。-f または --follow でログをリアルタイムにストリーミングします。--previous でクラッシュなどにより再起動した前のコンテナのログを表示します。--tail で末尾からの行数を指定します。--since で指定した時間以降のログを表示します (例: 10s, 5m, 2h)。-l でラベルに一致する複数のPodのログをまとめて表示できます。 |
コンテナ内でコマンド実行 |
|
実行中のコンテナ内で指定したコマンドを実行します。-i (stdin) と -t (tty) を組み合わせることで、インタラクティブなシェルセッションを開始できます (例: bash , sh )。-c で対象のコンテナを指定します。-- の後に実行したいコマンドと引数を記述します。 |
実行中のコンテナにアタッチ |
|
実行中のコンテナのプロセスに標準入力、標準出力、標準エラー出力をアタッチします。主に、コンテナ起動時にフォアグラウンドで実行されているプロセスと対話するために使用されます。exec と似ていますが、新しいプロセスを起動するのではなく、既存のプロセスに接続します。 |
ポートフォワーディング |
|
ローカルマシンのポートから、クラスタ内のPod、Service、Deploymentが公開しているポートへトラフィックを転送します。これにより、ローカルマシンから直接クラスタ内のアプリケーションにアクセスできます。デバッグや開発時に非常に便利です。--address 0.0.0.0 を指定すると、ローカルホスト以外からのアクセスも許可します(セキュリティに注意)。 |
ファイルコピー |
|
ローカルファイルシステムとPod内のコンテナ間でファイルをコピーします。デバッグ用のファイルを送ったり、コンテナ内のログファイルや設定ファイルを取得したりするのに使用します。デフォルトの名前空間を使用しない場合は <namespace>/<pod-name> の形式で指定します。-c でコンテナを指定します。 |
Podのデバッグ (v1.18+) |
|
実行中のPodのコピーを作成し、デバッグ用のツールが含まれたイメージでコンテナを追加したり、既存のコンテナのプロセス名前空間を共有したりしてデバッグを行います。--copy-to で新しいPod名、--image でデバッグ用イメージ、--target で対象コンテナを指定します。また、ノード自体をデバッグするための特権コンテナを起動することも可能です (kubectl debug node/... )。これにより、distrolessイメージのようなデバッグツールが含まれていないコンテナも調査しやすくなります。 |
設定とコンテキスト管理 ⚙️
kubectl の設定ファイル (kubeconfig) や、接続するクラスター (コンテキスト) を管理するコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
設定の表示 |
|
kubeconfig ファイルの内容を表示します。--minify は現在のコンテキストに関連する情報のみ表示します。--raw は認証情報などを展開して表示します(注意して使用)。 |
コンテキスト一覧表示 |
|
kubeconfig ファイルに定義されている全てのコンテキストを一覧表示します。現在のコンテキストには * が付きます。 |
現在のコンテキスト表示 |
|
現在アクティブなコンテキスト名を表示します。 |
コンテキストの切り替え |
|
指定したコンテキストをアクティブにします。これ以降の kubectl コマンドはこのコンテキスト(クラスター、ユーザー、名前空間)を使用します。 |
コンテキストの設定変更 |
|
既存のコンテキストの設定(デフォルト名前空間、クラスター、ユーザー)を変更します。 |
認証情報の設定 |
|
kubeconfig に新しいユーザー認証情報を追加または更新します。トークン、クライアント証明書/キー、ユーザー名/パスワード(非推奨)などの認証方法を指定できます。 |
クラスター情報の設定 |
|
kubeconfig に新しいクラスター接続情報を追加または更新します。APIサーバーのURLや、サーバー証明書を検証するためのCA証明書のパスなどを指定します。--insecure-skip-tls-verify=true は証明書の検証をスキップしますが、セキュリティリスクがあるためテスト環境以外では非推奨です。 |
リソース管理の応用 📊
ラベル、アノテーション、スケーリング、ロールアウトなど、リソースをより高度に管理するためのコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
ラベルの操作 |
|
リソースにラベルを追加、更新、削除します。ラベルはリソースを整理し、セレクターで対象を選択するために使用されます。--overwrite で既存のラベルを上書きします。キー名の末尾に - を付けるとそのラベルを削除します。 |
アノテーションの操作 |
|
リソースにアノテーションを追加、更新、削除します。アノテーションは、ツールやライブラリが使用するための非識別的なメタデータを格納します。操作方法はラベルと似ています。 |
リソースのスケーリング |
|
Deployment, ReplicaSet, StatefulSet, ReplicationController などのレプリカ数を変更します。--current-replicas オプションを使うと、現在のレプリカ数が指定値と一致する場合のみスケーリングを実行します(競合状態の防止)。 |
オートスケーリングの設定 |
|
HorizontalPodAutoscaler (HPA) を作成し、CPU使用率やカスタムメトリクスに基づいてPodのレプリカ数を自動的に調整します。--cpu-percent でCPU使用率の目標値を、--min , --max でレプリカ数の最小値と最大値を指定します。カスタムメトリクスや外部メトリクスに基づくスケーリングも可能です。 |
ロールアウト管理 (Deployment) 🔄 |
|
Deployment の更新(ロールアウト)状況を確認、履歴を表示、以前のリビジョンへのロールバック、一時停止、再開、再起動(Podのローリング再作成)を行います。status で完了を待機できます。history で変更履歴(リビジョン)を確認し、undo で特定のリビジョンに戻せます。pause /resume は段階的なロールアウトや問題発生時の一時停止に利用できます。restart は設定変更なしにPodを再作成したい場合に便利です。 |
ノード管理 🖥️
クラスタを構成するノード(物理マシンまたは仮想マシン)を管理するコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
ノードの一覧表示 |
|
クラスタ内の全てのノードとそのステータス(Ready, NotReadyなど)を一覧表示します。-o wide でIPアドレスやOS情報などの詳細を表示します。-l で特定のラベルを持つノードをフィルタリングできます。 |
ノードの詳細表示 |
|
指定したノードの詳細情報(マシン情報、状態、容量、割り当て済みリソース、スケジュールされているPod、イベントなど)を表示します。ノードの問題調査に不可欠です。 |
ノードへのスケジューリング停止 |
|
指定したノードを「スケジュール不可 (Unschedulable)」状態にします。これにより、新しいPodがそのノードにスケジュールされなくなります。既存のPodは影響を受けません。メンテナンスの準備段階で使われます。 |
ノードへのスケジューリング再開 |
|
cordon されたノードを元の状態に戻し、再び新しいPodがスケジュールされるようにします。メンテナンス完了後に実行します。 |
ノードからのPod退避 (Drain) ⚠️ |
|
ノードを安全にメンテナンスするために、まずノードを cordon し、その後、そのノード上で実行されているPodを(ReplicaSet等で管理されていれば)他のノードへ移動させ、完了後にノードから削除します。--ignore-daemonsets は DaemonSet によって管理されるPodを無視します(削除しない)。--delete-local-data は emptyDir などローカルボリュームを使用するPodも削除を許可します(データ消失に注意)。--force は ReplicationController などで管理されていないPodも削除します。慎重に実行する必要があります。 |
ノードへのTaint設定 |
|
ノードに Taint を設定します。Taint は、特定の Toleration を持つPodのみがそのノードにスケジュールされるように制限する機能です。Effect には NoSchedule (新規スケジュール不可)、PreferNoSchedule (可能な限り避ける)、NoExecute (新規スケジュール不可かつ既存Podの退避)があります。特定のワークロードを特定のノードに配置したり、ノードの状態(例: network unreachable)に基づいてPodを退避させたりするのに使われます。 |
クラスター情報 ℹ️
クラスター全体に関する情報を取得するコマンドです。
目的 | コマンド例 | 説明 |
---|---|---|
クラスターエンドポイント情報表示 |
|
Kubernetesマスター(Control Plane)と、kube-dnsなどのクラスターサービスのURLを表示します。dump サブコマンドは、現在のクラスター状態(リソース定義など)を標準出力にダンプします(デバッグ用)。 |
利用可能なAPIバージョン表示 |
|
クラスターで有効になっているAPIグループとバージョン(例: apps/v1, batch/v1, networking.k8s.io/v1)の一覧を表示します。マニフェストファイルの apiVersion を書く際に参照します。 |
利用可能なAPIリソース表示 |
|
クラスターで利用可能な全てのリソースタイプ(SHORTNAMES、APIGROUP、NAMESPACED、KIND)を一覧表示します。--namespaced フラグで名前空間スコープかクラスターワイドスコープかをフィルタリングできます。--api-group で特定のAPIグループのリソースのみを表示できます。kubectl get などで指定できるリソース名を確認するのに便利です。 |
バージョン表示 |
|
kubectlクライアントとKubernetes APIサーバーのバージョン情報を表示します。バージョンの互換性を確認する際に重要です。--short はクライアントとサーバーのバージョン番号のみを簡潔に表示します。--client はクライアントバージョンのみを表示します。 |
出力形式の制御 📄
kubectl コマンドの出力形式をカスタマイズするオプションです。
目的 | コマンド例 | 説明 |
---|---|---|
JSON形式で出力 |
|
リソース情報をJSON形式で出力します。jqなどのツールと組み合わせて情報を抽出・加工するのに便利です。 |
YAML形式で出力 |
|
リソース情報をYAML形式で出力します。既存のリソース定義を確認したり、マニフェストファイルのテンプレートとして利用したりするのに便利です。 |
詳細情報を含めて出力 |
|
デフォルトのテーブル形式に加え、ノード名、IPアドレス、ポートなどの追加情報を表示します。 |
カスタム列で出力 |
|
指定したフィールドを列としてテーブル形式で出力します。列名:JSONPath の形式で指定します。必要な情報だけを簡潔に表示したい場合に便利です。 |
JSONPathで特定の値を出力 |
|
JSONPath 式を使用して、リソースのJSONデータから特定の値を抽出して表示します。スクリプトなどで特定の値だけを利用したい場合に強力です。 |
変更を監視 (Watch) |
|
-w または --watch フラグを付けると、リソースの変更(作成、更新、削除)をリアルタイムで監視し、変更があるたびに情報を出力します。デプロイ状況の確認やイベント監視に便利です。Ctrl+Cで終了します。 |
その他便利なコマンド ✨
上記以外にも役立つ様々なコマンドがあります。
目的 | コマンド例 | 説明 |
---|---|---|
リソース定義のドキュメント表示 |
|
指定したリソースタイプやそのフィールド(例: Podのspec、コンテナ定義)に関するドキュメント(フィールドの説明、型、必須かどうかなど)を表示します。マニフェストファイルを作成・編集する際に非常に役立ちます。--recursive オプションを使うと、ネストされたフィールドのドキュメントも再帰的に表示します。 |
リソース使用状況の表示 |
|
ノードまたはPodごとのCPUとメモリの使用状況を表示します。Metrics Server がクラスターにデプロイされている必要があります。--containers オプションを付けると、Pod内の各コンテナの使用状況を表示します。パフォーマンスのボトルネック調査やリソース要求/制限の設定に役立ちます。 |
権限確認 (RBAC) |
|
現在のユーザー(または --as で指定したユーザー)が、特定の操作(Verb: get, list, create, delete など)を特定のリソースに対して実行できるかどうかを確認します。RBAC (Role-Based Access Control) の設定確認やトラブルシューティングに役立ちます。 |
マニフェストとクラスターの差分表示 |
|
指定したマニフェストファイル(またはディレクトリ、Kustomization)の内容と、クラスター上に現在存在するリソースとの差分を表示します。kubectl apply を実行する前に、どのような変更が行われるかを確認するのに非常に便利です。 |
プラグインの管理 (例: krew) |
|
kubectl はプラグイン機構を備えており、機能を拡張できます。krew は kubectl プラグインのパッケージマネージャーです。これを使ってプラグインの検索、インストール、一覧表示、更新などを行えます。インストールしたプラグインは kubectl <plugin-name> のように実行できます。 |
コメント