kubectl
kubectlとは?

データセンターなどで運用される大規模なWebサービスやアプリケーションの多くは、「Docker」などの技術を用いてアプリケーションとその実行基盤を一体化した「コンテナ」(container)と呼ばれる小さな単位にまとめられている。システムを運用する際、展開するコンテナの数が数十、数百と増えていくと人手による管理は現実的でなくなるため、Kubernetesなどのコンテナオーケストレーションツールを用いて管理を自動化することが多い。
kubectlはそのKubernetesに対して「このアプリを動かせ」「状態を確認せよ」「設定を変更せよ」といった指示を出すためのツールである。コンテナを稼働させるサーバを直接的に制御するのではなく、KubernetesのAPIサーバにHTTPで要求を送り、その応答を整形して表示する仕組みで動作する。
操作はターミナル上でコマンドを入力する形式で行う。「kubectl get pods」と打てば稼働中のアプリ一覧が表示され、「kubectl apply -f」設定ファイル名と打てばその内容に基づいてアプリの展開や更新が実行される。他にも、詳細情報を表示する「describe」、ログを確認する「logs」、コンテナ内でコマンドを実行する「exec」など、運用に必要な操作が一通り揃っている。
設定内容はYAML形式のファイル(マニフェスト)として記述し、kubectlに渡すことでクラスタ(一体的に運用するサーバ群)の状態を望ましい形に保つことができる。接続先クラスタや認証情報は「kubeconfig」と呼ばれる設定ファイルに保存され、ローカルのパソコンからクラウド上のKubernetesを操作することも可能である。「コンテキスト」という概念により接続先を明示的に切り替えられるので、開発環境と本番環境など複数の環境を一つの端末から扱うことも容易である。
kubectlは、開発したアプリケーションを実行環境に自動展開するCI/CDパイプラインに組み込んでコンテナ展開を自動化する用途にも使われる。プラグイン機構を通じて独自のサブコマンドを追加することもでき、運用ツールとして柔軟に拡張できる。Linux、Windows、macOSのいずれでも動作し、環境を選ばずKubernetesの管理作業を行うことができる。業界団体のCNCF(Cloud Native Computing Foundation)が開発を主導し、オープンソースとして公開されている。