Kubernetesとは何かを図でわかりやすく解説!Pod、Namespaceも

Kubernetesとは何かを図でわかりやすく解説!Pod、Namespaceも

『Kubernetes』とは、コンテナ仮想化ツールの運用管理・自動化を行うために開発されたオープンソースソフトウェアのことです。マイクロサービスとの相性が良いなど、さまざまなメリットがあるKubernetesの知識は、ITトレンドを追従するエンジニアにとって欠かせません。

この記事では、Kubernetesの基礎知識やメリット、Dockerとの関係性や、Kubernetesに関連する用語を解説します。

Kubernetesとは何か?わかりやすい図で解説

「Kubernetes」とは、Dockerなどのコンテナ仮想化ソフトウェアを管理、および自動化するためのオープンソースソフトウェア(OSS)のことです。 “クバーネティス”や“クーべネティス”と読み、K8s (ケーエイツ)やkubeと略されることもあります。「Kubernetes」というのはギリシャ語に由来する言葉で、操縦士や船長、道しるべなどを意味します。

仮想化ソフトウェアとは、1つのサーバー上に複数台の仮想マシンを運用できるシステムのことです。これにより、1台のサーバーに複数のOSを実行できます。例えるなら、1台のパソコンにAさん、Bさん、Cさんそれぞれが使える仮想パソコンが用意されているという状態です。

Kubernetesとは何かを図で解説

上の図を見ながら、Kubernetesの働きを確認します。

コンテナとは、アプリケーションやミドルウェア、複数のOSを実行できる独立した環境のことです。仮想化ソフトウェアと非常に似ていますが、大きな違いはコンテナレベルで空間をほかのシステムから分離させられる点です。これにより、“異なる”OSの実行が可能になるため、複数のOSが実行しているシステムを1つにまとめられることが特徴です。

コンテナには、アプリケーションを実行する機能はありますが、コンテナを管理したり、ほかのサーバーと連携させたりする機能を持ってはいません。そこで、「連携できない」という問題点を解決してくれるのがKubernetesです。

Kubernetesはコンテナオーケストレーションツールのひとつであり、Kubernetes=コンテナオーケストレーションと考えても差し支えありません。

コンテナオーケストレーションとは、複数あるコンテナを管理する技術のことです。複数のコンテナを運用する場合、ネットワークやストレージなどの連携管理を行う必要があります。コンテナオーケストレーションツールは、これらの管理を行ってくれるため、コンテナがダウンしたり、アプリケーションに高負荷がかかったりした場合もスムーズに運用できるのです。

Kubernetesには、複数のコンテナを管理するKubernetes Podがあり、さらに複数のPodがNodeにまとめられています。そして、Nodeが集まったものが「クラスター」です。クラスターは「まとまり」を意味します。

クラスターは、Kubernetes全体構造の最上位階層に位置する部分といえます。

Kubernetesがコンテナの配置や削除を行うとき、直接指示を出すのがクラスターです。これにより、システム効率がよくなり、リソースを最大限活用できたり、機密情報の管理なども容易に行えたりするのです。

なお、KubernetesをPaaSと混同してしまう場合がありますが、PaaSはアプリケーションを開発する環境を提供してくれるサービスです。したがって、コンテナレベルで動作するKubernetesとは異なります。

コンテナ

Kubernetesのメリットとは?

Kubernetesには下記のようなメリットがあります。

  • サービスディスカバリー
  • 自己回復機能
  • オンプレミスとクラウドで利用できる
  • ストレージの管理

それぞれのメリットを詳しく解説していきます。

  • サービスディスカバリー

サービスディスカバリーによって、サーバーにあるアプリケーションのポート番号やIPアドレスなどを知ることができます。また、どのようなアプリケーションが動いているのかを知ることもできます。

  • 自己回復機能

自己回復機能により、コンテナがダウンしてしまったり、間違えて削除してしまったりした場合も自動で回復させることができます。つまり、Kubernetesは障害に強いといえます。

  • オンプレミスとクラウドで利用できる

Kubernetesは、オンプレミスとクラウドで運用できる点もメリットです。自社サーバーでもクラウドでも使えるので、利用する場所を選びません。

  • ストレージの管理

Kubernetesでは、ストレージの管理ができます。データはコンテナに記録され、有効期限が定められた状態でPod内に保存されます。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

KubernetesとDockerの関係とは?

Kubernetesと比較して語られることの多いDockerとの違いについて見ていきます。

Dockerとは、アプリケーションをコンテナの中で管理し、実行できるようにする実行環境およびツール群のことです。Kubernetesとの大きな違いは、実行される場所です。Dockerはシングルノードで実行されますが、Kubernetesの場合はクラスターです。

また、Dockerはアプリケーションを各コンテナに分離する目的で使用されます。一方、Kubernetesはそれぞれのコンテナを管理するために使われるため、役割にも違いがあるといえます。

DockerKubernetes
実行される場所シングルノードクラスター
使われる目的アプリケーションを各コンテナに分離するためそれぞれのコンテナを管理するため

 

さらに、記事の初めに載せた図で確認できるように、DockerとKubernetesは使い分けられるのではなく、連携して使われます。DockerとKubernetesは敵対関係ではなく、協力し合う関係性であるといえるでしょう。

 

Kubernetes用語を解説!Pod、Service、Namespaceとは?

以下では、Kubernetesにおいて疑問点となりやすいPodとService、Namespaceについて解説します。

Kubernetesの「Pod」とは何か?

Podとは、Kubernetesで実行できるアプリケーションの最小単位です。基本的にPodは1つのコンテナから構成されますが、複数のコンテナを共存させることもできます。コンテナが詰め込まれたひとつの空間というと、イメージしやすいのではないでしょうか。Podは、共有ストレージやネットワーク、APIバージョンなどをファイルで設定することができます。

Kubernetesの「Service」とは何か?

Serviceとは、Podとの通信を容易に行うためにエンドポイントの提供を行ってくれる機能です。通常、NodeのIPアドレスは一定ではありません。つまり、通信するためには、その都度IPアドレスを指定しなければなりませんし、IPアドレスが突然変わって通信が途切れてしまう可能性もあるのです。Serviceという機能があることで、容易に通信するためのDNSラベルが発行されるため、アプリケーションがほかのPodと簡単に通信できるようになります。

アプリケーション

また、サービスディスカバリの利用が可能です。この機能を使うことで、どのようなアプリケーションが稼働しているのかだけでなく、クラスターIPやポートも知ることできます。

Serviceは下記の4種類があます。

  • ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName

それぞれのServiceを簡単にご説明します。

  • ClusterIP

ClusterIPはクラスター内でPodが利用できるIPアドレスです。ちなみに、ClusterIP はKubernetesの外からアクセスすることはできません。

  • NodePort

NodePortは外部に公開されるポートのことです。ClusterIPの機能も持っているため、外部のサーバーと通信できるClusterIPと考えれば理解しやすいでしょう。

  • LoadBalancer

簡単にまとめると、LoadBalancerはNodePortをさらに拡張した機能のことで、Upstreamとして外部サーバーと疎通できます。

  • ExternalName

ExternalNameは外部サービスに公開する名前です。ちなみに、ExternalNameはService NAMEとは別名になります。

Kubernetesの「Namespace」とは何か?

Namespaceとは、クラスターの分離機能のことです。また、複数のユーザーでクラスターリソースを分割する方法ともいえるでしょう。

Namespace を使うことで、Kubernetes内の環境に名前を付けて利用することができます。他の環境と分離させることができ、ユーザーによって権限を変えることも可能です。セキュリティを向上させたい、効率的に開発を進めたいという場面で利用すると効果を得られるでしょう。

 

この記事では、Kubernetesについての基礎知識とメリット、関連用語に関して解説しました。軽量、高速に起動できるなど、数多くのメリットを持つKubernetesは、役に立つ知識となるでしょう。今後、インフラエンジニアとして活躍したいという方は、習得をおすすめします。