kubectlコマンドラインツール

kubectlは、Kubernetesクラスターと通信するための主要なコマンドラインツールです。 このページでは、kubectlとKubernetesエコシステムにおけるその役割について概要を説明します。
Kubernetes APIを使用してKubernetesクラスターのコントロールプレーンと通信するためのコマンドラインツールです。

kubectlツールは、Kubernetes APIを通じてクラスターと通信します。 設定については、kubectl$HOME/.kubeディレクトリ内のconfigという名前のファイルを探します。 KUBECONFIG環境変数を設定するか、--kubeconfigフラグを設定することで、他のkubeconfigファイルを指定できます。

kubectlの役割

kubectlツールは、Kubernetesオブジェクトの作成、検査、更新、削除を行うための主要なインターフェースです。 クラスター内部で実行されるKubernetesコンポーネントと、それらのコンポーネントが実装するKubernetes APIを補完するものです。 ノートパソコンからkubectlを実行する場合でも、クラスター内のPodから実行する場合でも、APIサーバーにリクエストを送信します。 クライアントライブラリHeadlampのようなWebダッシュボードなど、他のクライアントも同じAPIを通じて通信します。

kubectlの仕組み

kubectlツールは、kubeconfigファイルで定義されたクラスター、ユーザー、およびコンテキストを使用してAPIサーバーに接続し、認証を行います。 クラスターの外部からkubectlを実行する場合、kubeconfigファイルを使用してAPIサーバーのアドレスと認証情報を見つけます。 kubectlがPod内(例えばCI/CDパイプライン内)で実行される場合、PodにマウントされたServiceAccountトークンに基づくクラスター内認証を使用できます。

コマンドを実行すると、kubectlはその意図をKubernetes APIへの1つ以上のHTTPリクエストに変換します。 APIサーバーは各リクエストを検証し、etcdに保存されたクラスターの状態に適用し、結果を返します。 これは、Deploymentの作成であってもログの読み取りであっても、すべてのkubectlのアクションが同じAPIドリブンなパスを辿ることを意味します。

kubeconfigでは複数のクラスター、ユーザー、コンテキストを定義できるため、環境を再設定することなくkubectlを使用してクラスター間を切り替えることができます。 kubectl config use-contextを実行してアクティブなコンテキストを変更してください。

kubectlでできること

kubectlツールは多くの操作をサポートしており、以下の大まかなカテゴリに分類されます:

  • リソースの管理 – Pod、Deployment、Serviceなどのオブジェクトを作成、更新、削除します。 設定ファイルによる宣言的な管理にはkubectl applyを使用します。
  • クラスターの状態の検査 – オブジェクトの一覧表示と詳細表示、イベントの確認、リソース使用量のチェックを行います。
  • デバッグ – コンテナからのログの確認、実行中のコンテナ内でのコマンドの実行、またはPodへのポートフォワードを行います。
  • クラスター操作 – メンテナンスのためにノードをドレインし、新しいワークロードを防ぐためにノードをcordonし、クラスターの設定を管理します。
  • スクリプトと自動化 – スクリプトやパイプラインで使用するために、出力をJSON、YAML、またはJSONPathを使用したカスタムカラム形式としてフォーマットします。

構文、コマンドリファレンス、および例については、kubectlリファレンスドキュメントを参照してください。

宣言的管理と命令的管理

本番ワークロードでは、バージョン管理された設定ファイルとともにkubectl applyを使用した宣言的なオブジェクト管理を推奨します。 宣言的管理は、変更の追跡、コラボレーション、GitOpsワークフローとの統合に役立ちます。 命令的なコマンド(kubectl createkubectl runなど)は開発や実験には便利ですが、再現や監査が困難です。

プラグインによるkubectlの拡張

新しいサブコマンドを追加するプラグインkubectlを拡張できます。 プラグインは、kubectl-<plugin-name>の命名規則に従うスタンドアロンのバイナリです。 Kubernetesコミュニティは多くのプラグインをメンテナンスしており、Krewプラグインマネージャーで管理できます。

バージョン互換性

kubectlツールは、クラスターのコントロールプレーンに対して前後1マイナーバージョンのバージョンスキューをサポートしています。 例えば、kubectl v1.32はv1.31、v1.32、v1.33のコントロールプレーンで動作します。 互換性のあるバージョンを使用することで、予期しない動作を回避できます。 詳細については、バージョンスキューポリシーを参照してください。

次の項目