Kubernetesの概要をやさしく解説
はじめに
皆さんは「Kubernetes(クバネティス)」について聞いたことはあるでしょうか。
近年は Docker を利用したコンテナ開発が一般的になり、多くのシステムでコンテナ技術が採用されています。
しかし、コンテナ数が増えてくると、
- コンテナの起動管理
- 負荷増加時のスケール対応
- 障害発生時の復旧
などを手動で管理するのが難しくなります。
そこで登場するのが Kubernetes です。
以前のDockerの概要をやさしく解説に関連する記事として、
- Kubernetesは聞いたことはあるけど触ったことがない
- Dockerを利用してるけど個数が増え管理を楽にしたいが方法がわからない
という方に読んでいただければと思います。
概要
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、および及び管理を自動化してくれるツールです。
オープンソースのため、どなたでも利用することができます。
Docker が「コンテナを実行する技術」だとすると、Kubernetes は「大量のコンテナを管理する技術」と考えるとイメージしやすいでしょう。
例えば、
- Webサーバー
- APIサーバー
- バッチサーバー
といった複数のコンテナを運用している場合、Kubernetes がそれらをまとめて管理してくれます。
KubernetesとDockerの違い
Dockerとの主な違いは下記の通りです。

DockerとKubernetesは競合関係ではなく、組み合わせて利用されることが一般的です。
Kubernetesの構成図
構成を図にすると下記です。

Kubernetesでは、コントロールプレーンがクラスター全体を管理し、ノード上でポッドが実行されます。
ポッドの中では実際のコンテナが動作します。
構成図で出てきた用語について、把握しておくべき内容を下記に記載しました。
| 用語 | 説明 |
|---|---|
| クラスター | Kubernetesの実行環境全体を指します。 コントロールプレーンやノードなどの複数のコンピュータで構成されており、Kubernetesはクラスター単位でリソースを管理します。 |
| コントロールプレーン | Kubernetesクラスタ全体を管理する司令塔です。 Podの配置や状態の監視などを担当します。 |
| etcd | Kubernetesクラスターの設定情報や状態情報を保存するデータベースです。 Kubernetesの重要な管理情報を保持しています。 |
| kube-api-server | Kubernetesの操作を受け付ける窓口となるAPIサーバーです。 kubectlなどからのリクエストを受け取り、各コンポーネントへ処理を連携します。 |
| kube-scheduler | ポッドをどのノードで実行するかを決定するコンポーネントです。 |
| kube-controller-manager | ポッドやノードなどのリソースを監視し、設定された状態になるように制御するコンポーネントです。 |
| cloud-controller-manager | Kubernetesと任意のクラウドサービス(AWSやAzure、GCPなど)との連携を行うコンポーネントです。 |
| ノード | ポッドを実行するサーバーです。物理サーバーや仮想サーバー(AWSだとEC2など)が該当します。 通常はワーカーノードと呼ばれ、実際にアプリケーションを実行します。 |
| kubelet | 各ノード上で動作するエージェントです。ポッドやコンテナが正しく動作するように管理します。 |
| kube-proxy | クラスター内のネットワーク通信を管理します。ポッド間の通信やロードバランシングを実現します。 |
| ポッド | ポッドはKubernetesでコンテナを実行する最小単位です。1つ以上のコンテナで構成されます。 |
| コンテナ | コンテナ化されたアプリケーションの実行単位です。Dockerコンテナが代表的な例で、Kubernetesでは通常ポッドの中でコンテナが動作します。 |
Kubernetesを使うメリット
①自動スケーリングが可能
アクセス数やCPU使用率の増加に応じて、Pod数を自動で増やし負荷を分散できます。
逆に負荷が減少した場合はPod数を減らし、リソースを効率的に利用できます。
例えばECサイトでセール時にアクセスが急増した場合でも、手動でサーバーを追加する手間を削減できます。
②自己修復(Self-Healing)機能
Kubernetesの大きな特徴の一つが自己修復機能です。
コンテナが異常終了した場合、
- 自動再起動
- 別Nodeで再作成
といった復旧処理を自動で行います。
障害が起きた場合でも人的コスト削減につながり、可用性向上につながります。
③ローリングアップデートが容易
本番サービスを停止せずに新バージョンへ切り替えることが可能です。
新しいPodを順次立ち上げながら古いPodを停止することで、ダウンタイムを最小限に抑えられます。
大規模Webサービスやマイクロサービス構成では特に恩恵を受けやすい機能です。
④サービスディスカバリとロードバランシング
コンテナのIPアドレスは動的に変わることがあります。
Kubernetesはサービス機能によってポッドの増減に応じて通信先を自動的に管理し、ロードバランシングを実現します。
Kubernetesを使うデメリット
①学習コストが高い
Dockerと比較すると学習範囲が広くなります。
構成図で挙げたとおり独自の用語が多いため、Dockerは触ったことがあってもKubernetes特有の要素を把握する必要があります。
②運用の複雑さ
Kubernetesは高機能である一方、管理するコンポーネントが多く、運用が複雑になりやすいというデメリットがあります。
また、Kubernetesは更新が頻繁にあるため知識を更新し続ける必要があります。
③マネージドサービスとの比較検討が必要
クラウド上で利用する場合、
- Amazon EKS
- Azure Kubernetes Service (AKS)
- Google Kubernetes Engine (GKE)
などのマネージドサービスも選択肢になります。
自前でクラスタを構築するのか、マネージドサービスを利用するのかは可用性・運用コスト・管理負荷を考慮して検討する必要があります。
おわりに
Kubernetesはコンテナ運用を効率化するためのプラットフォームです。
小規模なシステムではDockerのみで十分な場合もありますが、大規模運用や高可用性が求められる環境ではKubernetesが有力な選択肢となります。
参考資料
- Kubernetes Documentation
- Kubernetesの基本用語
- ”Kubernetes” の基本を徹底解説
- Kubernetes のノードとは?概要と操作方法を解説
- Kubernetesとは?仕組みやメリット・デメリットについて徹底解説
- 【初心者向け】Kubernetesとは?わかりやすく基本から活用方法まで解説
- KubernetesでPodをローリングアップデートをする
- Kubernetesとは 概要や、Dockerとの違いを5分で入門
- KubernetesとDockerの違いとは?役割や導入基準を徹底解説
- Docker以外のコンテナエンジン完全ガイド:初心者から実践まで
