LESSON 25分

Kubernetesとは何か

ストーリー

「Docker でコンテナ化はできた。次はいよいよ Kubernetes だ」

村上先輩が大きな海図のような図を広げた。

「Docker Compose は開発環境では便利だけど、本番環境では不十分だ。 コンテナが落ちたら自動で再起動してほしい、アクセスが増えたら自動でスケールしてほしい、 無停止でデプロイしたい......こういう要求に応えるのが Kubernetes だ」

「Kubernetes......略して K8s ですよね。名前は聞くけど、正直よくわかってないです」

「Kubernetes はギリシャ語で"操舵手"を意味する。 コンテナの海を安全に航海するための操舵システムだと思えばいい。 まずは全体像を把握しよう」


Kubernetes(K8s)とは

Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースプラットフォームです。

Docker Compose との違い

機能Docker ComposeKubernetes
対象環境単一マシン複数マシン(クラスタ)
自動スケーリングなしあり(HPA)
自動復旧限定的あり(コンテナ再起動、再配置)
ローリングアップデートなしあり
ロードバランシングなしあり(Service)
設定管理.env ファイルConfigMap / Secret
用途開発環境本番環境

Kubernetes クラスタのアーキテクチャ

┌──────────────────────────────────────────────────────┐
│                  Kubernetes クラスタ                    │
│                                                      │
│  ┌──────────────────────────────────────┐            │
│  │       コントロールプレーン               │            │
│  │                                      │            │
│  │  ┌──────────┐  ┌────────────────┐   │            │
│  │  │ API Server│  │   Scheduler    │   │            │
│  │  └──────────┘  └────────────────┘   │            │
│  │  ┌──────────────┐  ┌────────────┐   │            │
│  │  │ Controller   │  │   etcd     │   │            │
│  │  │ Manager      │  │ (データ保存) │   │            │
│  │  └──────────────┘  └────────────┘   │            │
│  └──────────────────────────────────────┘            │
│                      │                               │
│          ┌───────────┼───────────┐                   │
│          ↓           ↓           ↓                   │
│  ┌────────────┐ ┌────────────┐ ┌────────────┐       │
│  │   Node 1   │ │   Node 2   │ │   Node 3   │       │
│  │            │ │            │ │            │       │
│  │ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │       │
│  │ │kubelet │ │ │ │kubelet │ │ │ │kubelet │ │       │
│  │ ├────────┤ │ │ ├────────┤ │ │ ├────────┤ │       │
│  │ │kube-   │ │ │ │kube-   │ │ │ │kube-   │ │       │
│  │ │proxy   │ │ │ │proxy   │ │ │ │proxy   │ │       │
│  │ ├────────┤ │ │ ├────────┤ │ │ ├────────┤ │       │
│  │ │ Pod(s) │ │ │ │ Pod(s) │ │ │ │ Pod(s) │ │       │
│  │ └────────┘ │ │ └────────┘ │ │ └────────┘ │       │
│  └────────────┘ └────────────┘ └────────────┘       │
└──────────────────────────────────────────────────────┘

コントロールプレーン

クラスタ全体を管理する「司令塔」です。

コンポーネント役割
API Server全通信の入口。kubectl コマンドはここに送られる
SchedulerPod をどのノードに配置するか決定する
Controller ManagerDeployment、ReplicaSet などの状態を管理する
etcdクラスタの全設定データを保存するデータベース

ワーカーノード

実際にコンテナが動く「作業マシン」です。

コンポーネント役割
kubeletノード上の Pod を管理するエージェント
kube-proxyネットワークルーティングを管理
Container Runtimeコンテナを実行する(containerd等)

Kubernetes の基本概念

宣言的設定(Declarative Configuration)

Kubernetes は「あるべき状態」を宣言し、システムが自動的にその状態を維持します。

命令型(Docker Compose):
  「コンテナを3つ起動しろ」
  「1つ落ちたら手動で再起動する」

宣言型(Kubernetes):
  「このアプリのレプリカは常に3つであるべき」
  → 1つ落ちても自動で3つに戻す
  → ノードが故障しても別ノードで再起動

YAML マニフェスト

Kubernetes のリソースは YAML ファイル(マニフェスト)で定義します。

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
        ports:
        - containerPort: 3000

ローカル開発環境

Kubernetes をローカルで試す

ツール特徴
minikubeローカルに1ノードクラスタを構築。最も一般的
kindDocker in Docker でクラスタを構築。CI向き
Docker DesktopDocker Desktop に付属の K8s。手軽
k3d軽量な k3s を Docker 上で実行
bash
# minikube の場合
minikube start

# Docker Desktop の場合
# 設定 → Kubernetes → Enable Kubernetes にチェック

# クラスタの状態確認
kubectl cluster-info
kubectl get nodes

まとめ

ポイント内容
Kubernetes とはコンテナのデプロイ・スケーリング・管理を自動化するプラットフォーム
アーキテクチャコントロールプレーン + ワーカーノードで構成
宣言的設定あるべき状態を定義し、システムが自動維持
Docker Compose との違い自動スケーリング、自動復旧、ローリングアップデート

チェックリスト

  • Kubernetes の目的と Docker Compose との違いを説明できる
  • クラスタのアーキテクチャ(コントロールプレーン + ノード)を理解した
  • 宣言的設定の概念を理解した
  • ローカル開発環境の選択肢を知っている

次のステップへ

次のセクションでは、Kubernetes の主要リソースである Pod、ReplicaSet、Deployment を学びます。 これらの関係を理解すれば、アプリケーションのデプロイが見えてきます。


推定読了時間: 25分