Kubernetesの概要をやさしく解説

はじめに

皆さんは「Kubernetes(クバネティス)」について聞いたことはあるでしょうか。

近年は Docker を利用したコンテナ開発が一般的になり、多くのシステムでコンテナ技術が採用されています。

しかし、コンテナ数が増えてくると、

  • コンテナの起動管理
  • 負荷増加時のスケール対応
  • 障害発生時の復旧

などを手動で管理するのが難しくなります。
そこで登場するのが Kubernetes です。

以前のDockerの概要をやさしく解説に関連する記事として、

  • Kubernetesは聞いたことはあるけど触ったことがない
  • Dockerを利用してるけど個数が増え管理を楽にしたいが方法がわからない

という方に読んでいただければと思います。

概要

Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、および及び管理を自動化してくれるツールです。
オープンソースのため、どなたでも利用することができます。

Docker が「コンテナを実行する技術」だとすると、Kubernetes は「大量のコンテナを管理する技術」と考えるとイメージしやすいでしょう。

例えば、

  • Webサーバー
  • APIサーバー
  • バッチサーバー

といった複数のコンテナを運用している場合、Kubernetes がそれらをまとめて管理してくれます。

KubernetesとDockerの違い

Dockerとの主な違いは下記の通りです。

DockerとKubernetesは競合関係ではなく、組み合わせて利用されることが一般的です。

Kubernetesの構成図

構成を図にすると下記です。


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が有力な選択肢となります。

参考資料