Kubernetes

kubectl くーべくーびーしーてぃーえる

KubernetesCLIコンテナオーケストレーションPodマニフェストkubeconfig
kubectlについて教えて

簡単に言うとこんな感じ!

kubectlは、Kubernetes(コンテナ管理システム)を操作するためのコマンドラインツールだよ!「kubectl get pods」みたいなコマンドを打つと、動いているアプリの一覧が見えたり、新しいアプリを起動したりできるんだ。Kubernetesの「リモコン」みたいなもの、って思えばOK!


kubectlとは

kubectl(クーブシーティーエル、またはクーブコントロールとも読まれる)は、Kubernetes クラスターを操作するための公式コマンドラインインターフェース(CLI)ツールです。Kubernetes は多数のコンテナをまとめて管理するシステムですが、その操作窓口がこの kubectl になります。開発者やインフラ担当者は kubectl を通じて、アプリの起動・停止・確認・設定変更などほぼすべての操作を行います。

kubectl は Kubernetes の API サーバーに対して HTTP リクエストを送ることで動作します。利用者がコマンドを打つと、kubectl がそれを Kubernetes API の形式に変換し、クラスターに指示を届けます。接続先のクラスター情報や認証情報は kubeconfig(通常 ~/.kube/config)というファイルに保存されており、複数のクラスターを切り替えながら操作することも可能です。

システム発注や管理の立場で言えば、「Kubernetes環境の運用を委託する」場合でも kubectl の基本的な使い方を知っておくと、ベンダーへの質問や状況確認がスムーズになります。特に kubectl getkubectl describekubectl logs の3コマンドは「今何が起きているか」を把握するための基本セットとして覚えておくと便利です。


kubectlの主要コマンド

kubectl のコマンドは「動詞 + リソース種別 + 名前」という構造になっています。

コマンド操作内容使用例
getリソースの一覧・状態確認kubectl get pods
describeリソースの詳細情報表示kubectl describe pod nginx
applyマニフェストを適用(作成・更新)kubectl apply -f app.yaml
deleteリソースの削除kubectl delete pod nginx
logsコンテナのログ表示kubectl logs nginx
execコンテナ内でコマンド実行kubectl exec -it nginx -- bash
scaleレプリカ数の変更kubectl scale deployment app --replicas=3
rolloutデプロイの状態管理・ロールバックkubectl rollout undo deployment app

操作対象のリソース種別

Kubernetes には多くのリソース種別があり、kubectl はそれらすべてを操作できます。

リソース種別略称概要
Podpoコンテナの最小実行単位
DeploymentdeployPodの展開・管理ルール
ServicesvcPodへの通信経路(負荷分散など)
Namespacensクラスター内の仮想的な区画
ConfigMapcm設定情報の保持
Secret-機密情報(パスワードなど)の保持
Nodenoクラスターを構成するサーバー

覚え方のコツ

kubectl の綴りが覚えにくい場合は、「kube(Kubernetes)+ ctl(control の略)」 と分解すると覚えやすいです。読み方は公式には定まっておらず、現場では「クーベシーティーエル」「クーブコントロール」「クーベカトル」など様々な呼ばれ方をしています。


歴史と背景

  • 2014年 — Google がコンテナオーケストレーションシステム「Kubernetes」をオープンソースとして公開。kubectl もこの時点から同梱されていた
  • 2016年 — Cloud Native Computing Foundation(CNCF)に Kubernetes が寄贈され、kubectl も CNCF エコシステムの中核ツールとして広まる
  • 2018年頃 — GKE(Google Kubernetes Engine)・EKS(Amazon)・AKS(Azure)など主要クラウドが Kubernetes マネージドサービスを提供開始し、kubectl の利用者層が急拡大
  • 2019年 — kubectl が Kubernetes 本体リポジトリから独立したリポジトリ(kubernetes/kubectl)へ分離され、開発・リリースサイクルが明確化
  • 現在 — kubectl はデファクトスタンダードとして、Kubernetes を扱うすべての現場で使われている。プラグイン機構(krew)によって機能拡張も可能

kubectlの動作構造とkubeconfigの関係

kubectl がどのように Kubernetes クラスターと通信するかを図解します。

ユーザー $ kubectl get pods ~/.kube/config (クラスター接続情報) kubeconfig 接続先URL 認証情報・context HTTPS REST API API Server (Kubernetesの  中枢・受付窓口) 認証・認可・ バリデーション etcd クラスターの状態を 永続保存するDB Controller / Scheduler Podの配置決定・ 状態維持を担当 kubectl の通信フロー kubectl → API Server → クラスター内部コンポーネント

kubeconfigの切り替え(複数クラスター管理)

本番・ステージング・開発など複数クラスターを扱う場合、context(コンテキスト) を切り替えて使います。

# 現在のコンテキスト確認
kubectl config current-context

# 利用可能なコンテキスト一覧
kubectl config get-contexts

# コンテキスト切り替え(本番→ステージング)
kubectl config use-context staging-cluster

マニフェストファイル(YAML)との組み合わせ

kubectl の真価は YAMLファイル(マニフェスト) との組み合わせにあります。「何をどう動かすか」を YAML で定義し、kubectl apply で適用するのが標準的な運用スタイルです。

# deployment.yaml の例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:1.0.0
        ports:
        - containerPort: 8080
# マニフェストをクラスターに適用
kubectl apply -f deployment.yaml

関連する規格・RFC

※ kubectl および Kubernetes API には IETF RFC や ISO 規格は制定されていませんが、Kubernetes API の仕様は CNCF が管理する OpenAPI Specification で公開されています。関連する参考情報として下記を参照してください。

規格・仕様内容
Kubernetes API Referencekubectl が呼び出す Kubernetes REST API の公式仕様
OpenAPI Specification (OAS) 3.0Kubernetes API の記述に使われているAPI仕様フォーマット

関連用語

  • Kubernetes — コンテナのデプロイ・管理・スケーリングを自動化するオーケストレーションシステム
  • Pod — Kubernetes における最小のデプロイ単位。1つ以上のコンテナを含む
  • Deployment — Podの展開ルールや数を宣言的に管理するKubernetesリソース
  • kubeconfig — kubectlがクラスターへ接続するための設定ファイル
  • Namespace — Kubernetesクラスター内をチームや環境ごとに論理分割する仕組み
  • コンテナ — アプリケーションとその実行環境をまとめてパッケージ化する技術
  • Helm — Kubernetesアプリのパッケージ管理ツール。kubectlと組み合わせて使われる
  • etcd — Kubernetesがクラスターの状態を保存するための分散キーバリューストア