
kubectlはKubernetesクラスタをコマンドラインから操作するための公式CLIで、「キューブコントロール」または「キューブカトル」と呼ばれます。2014年6月のKubernetes初公開時から付属しており、クラスタ管理者・開発者が日常的に最も多く触れるツールです。内部ではkube-apiserverに対してHTTPS経由でREST APIを呼び出す薄いラッパとして実装され、認証情報や接続先はkubeconfigと呼ばれるYAMLファイルから読み取ります。Pod作成からログ取得、トラブル時のexecまで、Kubernetes運用の入口はほぼ全てこのCLIから始まります。
この記事の目次
- サブコマンドが描く操作モデル
- kubeconfigと接続先の切り替え
- 現場で重宝する使いこなし術
- WebコンソールやIaCとの住み分け
- まとめ
サブコマンドが描く操作モデル

kubectlは数十のサブコマンドを備えますが、よく使うものは大きく3グループに分類できます。1つ目は状態確認系で、kubectl get pods・kubectl describe deployment・kubectl top nodeなどがここに入ります。リソース一覧の表示、詳細イベントの確認、CPU・メモリ使用量の把握といった「見る」操作が中心です。出力フォーマットは-o yaml/json/jsonpathで自在に切り替えられ、シェルスクリプトとの連携も容易です。
2つ目は変更操作系で、kubectl apply -f manifest.yamlに代表される宣言的な適用と、kubectl delete・kubectl scale・kubectl rolloutといった命令的な操作の両方を備えます。宣言的アプローチではYAMLファイルを正としてGit管理し、CI/CDから流すのが定石です。3つ目はデバッグ系で、kubectl logsでコンテナ標準出力を取得し、kubectl exec -itで中に入ってシェルを開き、kubectl port-forwardでローカルポートを転送するなど、障害解析に欠かせない機能が並びます。
kubeconfigと接続先の切り替え

kubectlの接続先はkubeconfigというYAMLファイルに「クラスタ・ユーザー・コンテキスト」の3要素として記述されます。既定の場所はホームディレクトリ直下の.kube/configで、環境変数KUBECONFIGで複数ファイルをコロン区切りで指定することもできます。クラスタはAPIサーバーのURLと認証局証明書、ユーザーはクライアント証明書やトークン、コンテキストはこの両者の組み合わせに名前空間を加えたものと位置づけられています。
1つのファイルに開発・検証・本番といった複数クラスタを並べておき、kubectl config use-context prodで瞬時に切り替えるのが日常の使い方です。kubectxやkube-ps1といったサードパーティ補助ツールを組み合わせると、プロンプトに現在のクラスタ名を表示し、「うっかり本番でdelete」を防ぎやすくなります。クラウドの場合、AWSのaws eks update-kubeconfigやGoogleのgcloud container clusters get-credentialsといったコマンドが自動的にエントリを追記してくれるので、最初の一歩は迷いなく踏み出せます。
現場で重宝する使いこなし術

kubectlは1日に何百回も叩くため、alias k=kubectlを.bashrcに書いておくだけで打鍵回数が半分以下になります。公式が用意するシェル補完を有効化すれば、リソース種別やリソース名までTab補完が効くようになり、入力ミスが激減します。kubectl explain deployment.spec.strategyのように、フィールド仕様をその場で調べられるexplainサブコマンドも非常に便利で、APIドキュメントをブラウザで開かなくても定義の確認が完結します。
適用前にkubectl diff -f manifest.yamlで現在の状態との差分を確認すれば、想定外のフィールド上書きを未然に防げます。プラグイン機構も強力で、Krew(kubectl plugin manager)を入れると、ノード状態を可視化するkubectl-neat・SSH風にPodに入るkubectl-ssh・スコープ全体を眺めるkubectl-treeなど、公式機能にない便利系を1コマンドで追加導入できます。krewプロジェクトは2019年にCNCFサンドボックスに加わり、現在では数百のプラグインが公開されています。
WebコンソールやIaCとの住み分け

kubectlはあくまでAPIに最も近い操作インターフェースであり、k9sのようなTUIツール、LensやHeadlampのようなGUIダッシュボード、Terraform・PulumiといったIaCツールとは「住み分け」の関係にあります。k9sは大量のPodをスクロールで眺めながらログ・shell・delete操作までキーボードで完結でき、障害時の機動力ではkubectl単独より上回る場面が多いと言われます。
TerraformやPulumiはクラスタ自体の構築や、外部リソース(IAMロール・VPC・RDSなど)も含めたインフラ全体を1つの記述で管理するのが強みで、kubectlは作成済みクラスタ内のリソース操作に集中します。ArgoCDやFluxといったGitOpsツールはマニフェストをGitに置き、自動でkubectl apply相当の処理を回し続ける役を担います。つまり日常的な確認とアドホック操作はkubectl、構成定義はIaCとGitOpsという二段構えが、現在のクラウドネイティブ現場の標準形です。
まとめ
kubectlはKubernetes公式CLIで、APIサーバーへのHTTPS呼び出しを通じてクラスタを操作する窓口です。kubeconfigで接続先を切り替え、aliasやkrewプラグインで効率を高めれば、日々の運用負荷を大きく下げられます。k9s・Terraform・ArgoCDといった周辺ツールと組み合わせ、現場ごとに最適なワークフローを組むのが定番のスタイルです.
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント