Kubernetes くーばねてぃす
簡単に言うとこんな感じ!
大量のコンテナ(アプリの入れ物)を自動で管理してくれる「統括マネージャー」だよ!「このサーバーが壊れたら別のサーバーで動かして」「アクセスが増えたら台数を増やして」みたいな面倒な調整を全部自動でやってくれるんだ!
Kubernetesとは
Kubernetes(クーバネティス)は、コンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するオープンソースのプラットフォームです。「K8s」と略されることも多く、「K」と「s」の間に8文字あることからきています。Googleが社内で使っていた「Borg」というシステムをベースに開発し、2014年にオープンソースとして公開しました。
コンテナとは、アプリケーションとその動作に必要な環境をまとめて梱包した軽量な実行単位です(Dockerが有名)。しかし本番環境では数十〜数百のコンテナを同時に動かすことが当たり前になり、「どのサーバーで動かすか」「障害が起きたら自動で復旧させる」「トラフィックに応じて台数を増減する」といった管理が人手では追いつかなくなってきました。そこで登場したのがKubernetesです。
現在はクラウドネイティブな開発の事実上の標準として定着しており、AWS・Google Cloud・Azureの主要クラウドすべてがマネージドサービス(EKS・GKE・AKS)として提供しています。
Kubernetesの構造と主要コンポーネント
Kubernetesはクラスターと呼ばれる単位で管理されます。クラスターは「コントロールプレーン(司令塔)」と「ワーカーノード(作業員)」で構成されます。
| コンポーネント | 役割 | たとえるなら |
|---|---|---|
| コントロールプレーン | クラスター全体の管理・調整 | 工場の管理部門 |
| API Server | 外部からの命令を受け付ける窓口 | 受付カウンター |
| etcd | クラスターの状態を保存するデータベース | 台帳 |
| Scheduler | Podをどのノードで動かすか決める | シフト管理者 |
| Controller Manager | 「あるべき姿」を維持し続ける | 品質管理担当 |
| ワーカーノード | 実際にコンテナが動くサーバー | 作業員 |
| kubelet | ノード上でPodの管理をするエージェント | 現場リーダー |
| kube-proxy | ネットワーク通信をルーティング | 社内交換手 |
主要なKubernetesオブジェクト
Kubernetesでは「オブジェクト」という設定単位でアプリを管理します。
| オブジェクト名 | 意味 | 使いどころ |
|---|---|---|
| Pod | コンテナの最小単位(1〜複数のコンテナをまとめたもの) | 基本の実行単位 |
| Deployment | Podの数や更新方法を管理する | ステートレスなWebアプリ |
| Service | Podへの安定したネットワーク窓口を提供 | ロードバランサー的な役割 |
| 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とよく比較される技術
| 技術 | 種別 | 特徴 | 向いているケース |
|---|---|---|---|
| Kubernetes | コンテナオーケストレーション | 高機能・高い拡張性 | 大規模・本番環境 |
| Docker Compose | 複数コンテナ管理ツール | シンプル・設定が少ない | ローカル開発・小規模 |
| Docker Swarm | Dockerネイティブのオーケストレーション | 学習コスト低い | 小〜中規模 |
| Amazon ECS | AWSのコンテナ管理サービス | AWSに最適化済み | AWS中心の構成 |
| Nomad | HashiCorpのオーケストレーター | コンテナ以外も管理可 | 多様なワークロード |
マネージドKubernetes比較(主要クラウド)
| サービス名 | クラウド | 略称 | 特徴 |
|---|---|---|---|
| Elastic Kubernetes Service | AWS | EKS | AWSサービスとの連携が強力 |
| Google Kubernetes Engine | Google Cloud | GKE | Kubernetes発祥の地・機能が最先端 |
| Azure Kubernetes Service | Microsoft Azure | AKS | Windows対応・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をはじめとするクラウドネイティブ技術を推進する財団