10日で覚えるKubernetesDay 1: Kubernetesの世界へようこそ
books.chapter 110日で覚えるKubernetes

Day 1: Kubernetesの世界へようこそ

今日学ぶこと

  • Kubernetesとは何か、なぜ必要なのか
  • DockerからKubernetesへの自然な流れ
  • Kubernetesのアーキテクチャと主要コンポーネント
  • 宣言的モデルと望ましい状態(Desired State)

DockerからKubernetesへ

「10日で覚えるDocker」で、コンテナ技術の基礎を学びました。Dockerを使えば、アプリケーションをコンテナとしてパッケージ化し、どこでも同じように動かせます。Docker Composeを使えば、複数のコンテナを連携させることもできました。

しかし、本番環境で多数のコンテナを運用するとき、新たな課題が生まれます。

flowchart TB
    subgraph Docker["Dockerだけの世界"]
        D1["コンテナが落ちたら?"]
        D2["サーバーが1台で足りなくなったら?"]
        D3["ゼロダウンタイムで更新したい"]
        D4["負荷に応じて自動スケールしたい"]
    end
    subgraph K8s["Kubernetesが解決"]
        K1["自動復旧(Self-healing)"]
        K2["複数ノードのクラスタ管理"]
        K3["ローリングアップデート"]
        K4["オートスケーリング"]
    end
    D1 --> K1
    D2 --> K2
    D3 --> K3
    D4 --> K4
    style Docker fill:#f59e0b,color:#fff
    style K8s fill:#3b82f6,color:#fff

Docker Composeとの違い

Docker Composeは開発環境では強力なツールですが、本番環境には限界があります。

機能 Docker Compose Kubernetes
対象 単一ホスト 複数ノードのクラスタ
自動復旧 なし コンテナ自動再起動
スケーリング 手動 自動スケーリング対応
ロードバランシング 自前で構成 Service で自動
ローリングアップデート なし 標準サポート
ヘルスチェック 基本的 詳細なプローブ設定
シークレット管理 .env ファイル Secret オブジェクト

Kubernetesとは

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

Googleが社内で10年以上使用してきたコンテナ管理システム「Borg」の経験を基に開発され、2014年にオープンソースとして公開されました。現在はCloud Native Computing Foundation(CNCF)がメンテナンスしています。

名前の由来

「Kubernetes」はギリシャ語で「操舵手」や「パイロット」を意味します。K8sという略称は、「K」と「s」の間に8文字あることから来ています。


Kubernetesのアーキテクチャ

Kubernetesクラスタは、大きく分けて**コントロールプレーン(Control Plane)ワーカーノード(Worker Node)**で構成されます。

flowchart TB
    subgraph CP["コントロールプレーン"]
        API["API Server"]
        ETCD["etcd"]
        SCHED["Scheduler"]
        CM["Controller Manager"]
    end
    subgraph W1["ワーカーノード 1"]
        KL1["kubelet"]
        KP1["kube-proxy"]
        P1["Pod A"]
        P2["Pod B"]
    end
    subgraph W2["ワーカーノード 2"]
        KL2["kubelet"]
        KP2["kube-proxy"]
        P3["Pod C"]
        P4["Pod D"]
    end
    API --> KL1
    API --> KL2
    API --> ETCD
    SCHED --> API
    CM --> API
    style CP fill:#8b5cf6,color:#fff
    style W1 fill:#3b82f6,color:#fff
    style W2 fill:#3b82f6,color:#fff

コントロールプレーンのコンポーネント

コンポーネント 役割
API Server クラスタへの全リクエストの受付窓口。kubectlコマンドはここに送られる
etcd クラスタの全状態を保存する分散キーバリューストア
Scheduler 新しいPodをどのノードに配置するか決定する
Controller Manager 望ましい状態を維持するための各種コントローラーを実行する

ワーカーノードのコンポーネント

コンポーネント 役割
kubelet ノード上でPodの実行を管理するエージェント
kube-proxy ネットワークルールを管理し、Podへの通信を制御する
コンテナランタイム コンテナを実際に実行する(containerd等)

宣言的モデル:Kubernetesの核心

Kubernetesの最も重要な概念は**宣言的モデル(Declarative Model)**です。

Dockerでは「コンテナを起動しろ」「コンテナを停止しろ」と**命令的(Imperative)**に操作しました。

Kubernetesでは「このアプリケーションが3つのレプリカで動いている状態にしてほしい」と**宣言的(Declarative)**に望ましい状態を記述します。

flowchart LR
    subgraph Imperative["命令的(Docker)"]
        I1["docker run app"]
        I2["docker stop app"]
        I3["docker run app"]
    end
    subgraph Declarative["宣言的(Kubernetes)"]
        D1["望ましい状態:\nreplicas: 3"]
        D2["Kubernetesが\n自動で維持"]
    end
    style Imperative fill:#f59e0b,color:#fff
    style Declarative fill:#22c55e,color:#fff

宣言的モデルの仕組み

  1. ユーザーが望ましい状態を定義 → YAMLマニフェストで「レプリカ3つ」と記述
  2. API Serverに送信 → kubectlコマンドでクラスタに適用
  3. コントローラーが監視 → 現在の状態と望ましい状態を常に比較
  4. 差分を自動修正 → Podが落ちたら自動で新しいPodを起動

この「観察 → 比較 → 修正」のループを**Reconciliation Loop(調整ループ)**と呼びます。


Kubernetesの主要オブジェクト

Kubernetesには多くのオブジェクト(リソース)がありますが、この書籍で学ぶ主要なものを紹介します。

flowchart TB
    subgraph Workload["ワークロード"]
        POD["Pod"]
        RS["ReplicaSet"]
        DEP["Deployment"]
    end
    subgraph Network["ネットワーク"]
        SVC["Service"]
        ING["Ingress"]
    end
    subgraph Config["設定・ストレージ"]
        CM["ConfigMap"]
        SEC["Secret"]
        PV["PersistentVolume"]
    end
    DEP --> RS
    RS --> POD
    SVC --> POD
    ING --> SVC
    CM --> POD
    SEC --> POD
    PV --> POD
    style Workload fill:#3b82f6,color:#fff
    style Network fill:#22c55e,color:#fff
    style Config fill:#8b5cf6,color:#fff
オブジェクト 説明 Docker対応概念
Pod コンテナの実行単位 コンテナ
ReplicaSet Podのレプリカ数を維持 -
Deployment ReplicaSetを管理し、更新を制御 -
Service Podへの安定したネットワークアクセス ネットワーク
Ingress 外部からのHTTPルーティング ポートマッピング
ConfigMap 設定データの管理 環境変数
Secret 機密データの管理 .env ファイル
PersistentVolume データの永続化 Volume

Kubernetesの利点

1. 自己修復(Self-healing)

コンテナが異常終了したり、ノードが故障した場合、Kubernetesは自動的にコンテナを再スケジュールします。

2. 水平スケーリング

負荷に応じてPodの数を自動的に増減できます(Horizontal Pod Autoscaler)。

3. ローリングアップデート

ダウンタイムなしで、段階的にアプリケーションを更新できます。問題が発生した場合はロールバックも可能です。

4. サービスディスカバリとロードバランシング

KubernetesはPodにDNS名を割り当て、トラフィックを自動的に分散します。

5. ストレージオーケストレーション

ローカルストレージ、クラウドプロバイダーのストレージなど、さまざまなストレージシステムを自動的にマウントできます。

6. 宣言的設定とバージョン管理

YAMLファイルで全てを記述するため、Gitでインフラ設定をバージョン管理できます(Infrastructure as Code)。


まとめ

概念 説明
Kubernetes コンテナオーケストレーションプラットフォーム
コントロールプレーン クラスタの頭脳(API Server、etcd、Scheduler、Controller Manager)
ワーカーノード コンテナが実際に動作するマシン(kubelet、kube-proxy)
宣言的モデル 「望ましい状態」を定義し、Kubernetesが自動で維持する
Reconciliation Loop 現在の状態と望ましい状態の差分を自動修正するループ

重要ポイント

  1. KubernetesはDockerの次のステップ。コンテナの運用・管理を自動化する
  2. 宣言的モデルにより「何をしたいか」を記述し、「どうやるか」はKubernetesに任せる
  3. コントロールプレーンとワーカーノードの2層構造でクラスタを構成する

練習問題

問題1: 基本

Docker ComposeとKubernetesの主な違いを3つ挙げてください。

問題2: アーキテクチャ

コントロールプレーンの4つのコンポーネントの名前と役割を説明してください。

チャレンジ問題

宣言的モデルと命令的モデルの違いを、日常生活の例えを使って説明してください。例えば、レストランでの注文やタクシーの行き先指定など。


参考リンク


次回予告: Day 2では「クラスタの構築とkubectl」について学びます。実際にKubernetes環境を準備し、最初のコマンドを実行しましょう。