コンテンツにスキップ

Kubernetes 概要

Kubernetes は、複数のサーバー上でコンテナを安定して動かすためのオーケストレーション基盤。

個人的な理解としては、docker run を 1 台で手作業運用する世界を、宣言的に複数台へ広げたもの。

ざっくり何をしてくれるか

  • コンテナをどのノードで動かすか決める
  • 落ちたコンテナを自動で復旧する
  • 同じアプリを複数台に増やす
  • サービス名で通信できるようにする
  • 設定値やシークレットを外出しする
  • ローリングアップデートで安全に入れ替える

まず押さえたい見方

  • Kubernetes は「コンテナそのもの」ではなく「コンテナの運用基盤」
  • 重要なのは手作業ではなく、望ましい状態を定義する考え方
  • 1 個の Pod を起動するより、Deployment で維持する前提で考える
  • アプリ公開、内部通信、設定管理、永続化は役割を分けて考える

よくある構成イメージ

  1. Deployment でアプリ Pod を複数起動する
  2. Service で Pod 群に安定した名前を付ける
  3. 必要なら Ingress で HTTP/HTTPS を外部公開する
  4. 設定値は ConfigMap、機密情報は Secret に分ける

クラスタ全体の簡易図

以下は Kubernetes 公式ドキュメントのクラスタアーキテクチャ説明をもとにした簡易図。

+-------------------------------------------------------+
| Control Plane                                         |
| - kube-apiserver                                      |
| - etcd                                                |
| - kube-scheduler                                      |
| - kube-controller-manager                             |
+-------------------------------------------------------+
                      |
          manages cluster state
                      |
+---------------------------+    +---------------------------+
| Worker Node               |    | Worker Node               |
| - kubelet                 |    | - kubelet                 |
| - kube-proxy              |    | - kube-proxy              |
| - Pods                    |    | - Pods                    |
+---------------------------+    +---------------------------+

出典:

周辺知識

  • パッケージ管理: Helm
  • ローカル検証: kind / minikube
  • ネットワーク: CNI
  • ストレージ: CSI
  • GitOps や継続運用: Argo CD など

メモ

  • 最初は Pod -> Deployment -> Service -> Ingress の流れを押さえる
  • Kubernetes を学ぶ前提として、Docker とネットワークの基礎があると理解しやすい