Kubernetes

Kubernetes くーばねてぃす

コンテナオーケストレーションPodクラスターDockerマイクロサービスデプロイメント
Kubernetesについて教えて

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

大量のコンテナ(アプリの入れ物)を自動で管理してくれる「統括マネージャー」だよ!「このサーバーが壊れたら別のサーバーで動かして」「アクセスが増えたら台数を増やして」みたいな面倒な調整を全部自動でやってくれるんだ!


Kubernetesとは

Kubernetes(クーバネティス)は、コンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するオープンソースのプラットフォームです。「K8s」と略されることも多く、「K」と「s」の間に8文字あることからきています。Googleが社内で使っていた「Borg」というシステムをベースに開発し、2014年にオープンソースとして公開しました。

コンテナとは、アプリケーションとその動作に必要な環境をまとめて梱包した軽量な実行単位です(Dockerが有名)。しかし本番環境では数十〜数百のコンテナを同時に動かすことが当たり前になり、「どのサーバーで動かすか」「障害が起きたら自動で復旧させる」「トラフィックに応じて台数を増減する」といった管理が人手では追いつかなくなってきました。そこで登場したのがKubernetesです。

現在はクラウドネイティブな開発の事実上の標準として定着しており、AWS・Google Cloud・Azureの主要クラウドすべてがマネージドサービス(EKS・GKE・AKS)として提供しています。


Kubernetesの構造と主要コンポーネント

Kubernetesはクラスターと呼ばれる単位で管理されます。クラスターは「コントロールプレーン(司令塔)」と「ワーカーノード(作業員)」で構成されます。

コンポーネント役割たとえるなら
コントロールプレーンクラスター全体の管理・調整工場の管理部門
API Server外部からの命令を受け付ける窓口受付カウンター
etcdクラスターの状態を保存するデータベース台帳
SchedulerPodをどのノードで動かすか決めるシフト管理者
Controller Manager「あるべき姿」を維持し続ける品質管理担当
ワーカーノード実際にコンテナが動くサーバー作業員
kubeletノード上でPodの管理をするエージェント現場リーダー
kube-proxyネットワーク通信をルーティング社内交換手

主要なKubernetesオブジェクト

Kubernetesでは「オブジェクト」という設定単位でアプリを管理します。

オブジェクト名意味使いどころ
Podコンテナの最小単位(1〜複数のコンテナをまとめたもの)基本の実行単位
DeploymentPodの数や更新方法を管理するステートレスなWebアプリ
ServicePodへの安定したネットワーク窓口を提供ロードバランサー的な役割
ConfigMap設定値をコンテナに渡す仕組み環境変数の管理
Secretパスワードなど機密情報を扱うDBパスワードなど
Namespaceクラスターを論理的に分割する開発・本番環境の分離
Ingress外部からのHTTPトラフィックを制御URLベースのルーティング

「K8s」の覚え方

Kubernetes → K と s の間に「ubernete」の8文字 → K8s!数字が文字数を表すこのような省略を「numeronym(ニューメロニム)」と呼びます。同じく「i18n」(internationalization)「l10n」(localization)も同じルールです。


歴史と背景

  • 2003年 — Googleが社内システム「Borg」を開発。数十億のコンテナを管理するシステムの原型が誕生
  • 2013年 — Docker登場でコンテナ技術が一般普及。しかし大量管理の課題が浮上
  • 2014年6月 — GoogleがKubernetesをオープンソースとして公開。Borgの知見をベースに設計
  • 2015年7月 — バージョン1.0リリース。同時にCNCF(Cloud Native Computing Foundation)に寄贈
  • 2016年〜 — AWS・Azure・Google Cloudが相次いでマネージドKubernetesサービスを発表
  • 2017年〜 — Docker SwarmやMesosとの競合に勝利し、コンテナオーケストレーションの標準に
  • 2020年〜 — Dockershimの廃止(v1.20)→ コンテナランタイムインターフェース(CRI)へ移行が進む
  • 現在 — CNCFのエコシステムは数百のプロジェクトが周辺ツールとして連携する巨大なプラットフォームに成長

Kubernetes・Docker・関連技術の関係

よく混同される技術の整理をしましょう。

Kubernetes・Docker・関連技術の関係図 Kubernetes クラスター(オーケストレーション層) デプロイ管理 / 自動スケーリング / 自己修復 / ロードバランシング ワーカーノード A kubelet / kube-proxy ワーカーノード B kubelet / kube-proxy Pod コンテナ×1 Pod コンテナ×2 Pod コンテナ×1 Pod コンテナ×1 Pod コンテナ×2 Pod コンテナ×1 コンテナランタイム(Docker / containerd / CRI-O) コンテナイメージを実際に起動・停止する低レベルエンジン ホストOS(Linux カーネル) namespaces / cgroups によるプロセス・リソース分離 ※ KubernetesはDockerを「使う側」。直接競合しているわけではない

Kubernetesとよく比較される技術

技術種別特徴向いているケース
Kubernetesコンテナオーケストレーション高機能・高い拡張性大規模・本番環境
Docker Compose複数コンテナ管理ツールシンプル・設定が少ないローカル開発・小規模
Docker SwarmDockerネイティブのオーケストレーション学習コスト低い小〜中規模
Amazon ECSAWSのコンテナ管理サービスAWSに最適化済みAWS中心の構成
NomadHashiCorpのオーケストレーターコンテナ以外も管理可多様なワークロード

マネージドKubernetes比較(主要クラウド)

サービス名クラウド略称特徴
Elastic Kubernetes ServiceAWSEKSAWSサービスとの連携が強力
Google Kubernetes EngineGoogle CloudGKEKubernetes発祥の地・機能が最先端
Azure Kubernetes ServiceMicrosoft AzureAKSWindows対応・Entra ID連携

関連する規格・RFC

規格・団体内容
OCI(Open Container Initiative)コンテナイメージ・ランタイムの標準仕様。Kubernetesが準拠
CRI(Container Runtime Interface)KubernetesとコンテナランタイムをつなぐAPI仕様
CNI(Container Network Interface)コンテナのネットワーク設定プラグイン仕様
CSI(Container Storage Interface)コンテナのストレージプラグイン仕様

関連用語

  • Docker — Kubernetesが管理するコンテナを作るためのプラットフォーム
  • コンテナ — アプリと実行環境をまとめた軽量な実行単位
  • マイクロサービス — Kubernetesが最もよく使われるアーキテクチャパターン
  • クラウドネイティブ — Kubernetesを中心としたクラウド活用の設計思想
  • CI/CD — KubernetesへのデプロイをArgoCD・Tektonなどで自動化する
  • Helm — Kubernetesのパッケージ管理ツール。設定をまとめて管理できる
  • サービスメッシュIstioなど、Kubernetes上のサービス間通信を制御する仕組み
  • CNCF — Kubernetesをはじめとするクラウドネイティブ技術を推進する財団