Kubernetesコンポーネントの概要を解説

SHARE:

一般的にKubernetes は、一つのツールとして扱われます。しかし、実際には、コントロールブレーン・ノードなど複数のコンポーネントで構成されており、それぞれ連携し合う形で稼働する複雑なシステムです。

よってKubernetesを使いこなす最初のステップは、「各コンポーネントの特徴と役割を知ること」です。システムを構成する要素を理解できれば、自身のニーズに合わせた最適な設定が見えてきます。セキュリティの強化、障害発生時の原因特定などもスムーズに進めやすくなるでしょう。

この記事では Kubernetesを構成するコンポーネントの基本として、各カテゴリやパーツの概要と、システムとして統合された際の役割を解説。さらにFAQとして、よくある関連質問とその回答も紹介します。

関 連 記 事

Kubernetesとは?Kubernetesセキュリティ
の基礎
Kubernetesアーキテクチャの
設計方法
AWSのEKS
(Elastic Kubernetes Service)
Kubernetesの
クラスターとは?
 
Kubernetes のノードとは?
KubernetesのPodとは?KubernetesのHelmとは?クラウドセキュリティと
ランタイムインサイト

Kubernetes のコンポーネントとは

コンポーネントとは、システムを構成する部品や要素のことです。

Kubernetesのコンポーネントは多くのパーツで構成されており、主に「コントロールプレーン」、「ノード」、「オプションの拡張機能やアドオン」の3つカテゴリに分類できます。

コントロールプレーン

Kubernetes のコントロールプレーンは、クラスター上で実行されるワークロードや、クラスターを管理するツールセットです。クラスターでの決定、クラスターイベントの検出・応答などを担当します。

含まれるパーツとして、API サーバー、ワークロードスケジューラ、キーバリューストア、オブジェクトコントローラなどがあります。

関連ページ:SysdigでKubernetes Control Planeを監視する方法

ノード

Kubernetes のノードは、ワークロードを動かす仮想マシンや物理マシンのことです。

コントロールプレーンを動かす「マスターノード」と、それぞれのワークロードを動かす「ワーカーノード」の2種類があります。マスターノードは、Linuxベースオペレーティングシステムを実行可能。ワーカーノードは、LinuxまたはWindowsを実行できます。


kubeletと呼ばれるエージェントによって管理され、kube-proxyと呼ばれるネットワークプロキシを各ノードが実行します。稼働するには、オペレーティングシステムに加え、コンテナをホストするためのコンテナランタイムが必要です。


なお、Kubernetesはクラスター内でどのノードが空いているかを追跡する役割を担いますが、ノード自体を管理しない点には注意が必要です。ノードオペレーティングシステム、ファイルシステム、およびハイパーバイザー(ノードが仮想マシンの場合)の管理と保護は、ユーザーが行うタスクです。


有名な「ペットと家畜」のたとえ話を用いるなら、Kubernetesにおけるノードは、クラスターに参加したりリソースのホストに使用したりできる「家畜」であり、特別な取り扱いや管理を必要とする「ペット」ではありません。ノードの準備が完了し、ノードがワークロードをホストできる場合には、Kubernetesはノード内で起きていることにあまり関わりません。


各ノードは「kubelet」というエージェントで管理され、インスタンスは各ノードで実行され、Kubernetesがそのノードの状態を追跡します。また、各ノードはkube-proxyと呼ばれるネットワークプロキシをホストし、kube-proxyがノードでホストされる Pod のネットワーク構成を管理します。

オプションの拡張機能

Kubernetesの拡張機能(アドオン)は、オプションで追加できる機能のことです。必要に応じてクラスターを拡張できます。

さまざまな種類があり、対応する機能の追加により、ロギング、モニタリング、Web ベースの管理などのタスク処理を実行できるようになります。

Kubernetes の各パーツ

Kubernetesのコンポーネントに含まれる各パーツの特徴を解説します。

API サーバー

Kubernetes API サーバー(kube-apiserver と呼ばれます)は、クラスターの他のパーツを管理し、管理者がクラスターとやり取りできるようにする API をホストする役割を担います。つまり、kube-apiserver Kubernetes で実行される他のすべてのものの基盤です。

この API サーバーは、マスターノードまたはクラスター内のノード(マスターノードが複数ある場合)でホストされます。

スケジューラ

Kubernetesスケジューラは、スケジューリング(Podが動作するよう、Nodeへ割り当てること)を担うパーツです。

Kubernetesが選ばれる理由として、「ワークロードをサーバークラスターにどのように分散するかが自動的に決定される」という強みが挙げられることがよくあります。この決定を実現するのがkube-schedulerです。


Kubernetes内で実行されるPodの状態を常時モニタリングし、どのノードが Pod をホストすべきかを判断します(管理者が DaemonSet または類似の構成を使用するノードを指定した場合を除く)。割り当ての目的は、負荷をクラスターに均等に分散し、ワークロード間の干渉を回避し、ワークロードを正常なノードのみがホストするようにすることです

コントローラ

Kubernetes コントローラは、kube-controller-manager と呼ばれ、実際にはコントローラのセットです。

ノードをモニタリングしたり、サービスや Pod 用のエンドポイントを管理したりするといったタスクを処理します。

関連ページ:5分でKubernetesのアドミッションコントローラーについて学ぶ

etcd

etcd は、Kubernetesにあらかじめ用意されているキーバリューストアです。クラスター管理に必要なデータを保管します。


注意したいのは、Kubernetesで実行中のアプリケーションに関連付けられたデータはetcdに保存されないことです。アプリケーションが作成、ロギング、またはその他の方法で生成するデータは、別途保存しなくてはなりません。その際は一般的に、何らかのストレージボリュームが使用されます。


etcdはストレージボリュームと異なり、クラスター状態の追跡やアクセスリクエストの管理などに必要なデータをホストする役割のみを担います。

Pod

Kubernetes Pod は、ワークロードをホストする役割を持つオブジェクトです。PodはYAMLファイルで定義されます。これらのファイルによって、各Podが実行すべきコンテナ、公開するネットワーキングポートや実行するコマンドといったオプション構成データを識別します。

Podは、Kubernetes内のワークロードの主要構成要素です。実行するアプリケーションはPodでホストされます。これには、ロギングエージェントなど、アプリケーションを管理するために必要なユーティリティも含まれます。

Pod は、Kubernetes 内のワークロードの主要構成要素です。Kubernetes で実行するアプリケーションは Pod でホストされます。これには、ロギングエージェントなど、アプリケーションを管理するために必要なユーティリティも含まれます。

DNSサーバー

一般的なKubernetes 環境には、クラスターの内部状態を認識し、それに応じて DNS 名を解決できるDNSサーバーが必要です。これをシンプル化するために、Kubernetes には「クラスターDNS」と呼ばれる独自のDNSサーバーが用意されています。


Kubernetes ディストリビューションの中でも、クラウド内で実行するように設計されたディストリビューションの多くは、代替 DNS サーバーを提供しています。これは、クラウドベース環境内のネットワーク構成を Kubernetes 用の内部ネットワーキングに合わせて調整するのに役立ちます。

関連ページ:クラウドDNSセキュリティ – クラウド上のDNSを保護する方法

ダッシュボード

Kubernetes ダッシュボードは、基本操作やクラスターイベント確認ができるWebベースのダッシュボードのことです。クラスターの基本的なモニタリングと管理に役立ちます。

ただし、すべてのタスクをダッシュボードで管理できるわけではなく、一部のタスクはkubectlと呼ばれるKubernetes CLIツールで管理する必要があります。

なおOpenShiftなど一部のKubernetesディストリビューションでは、代替のダッシュボード、もしくは専用にカスタマイズしたダッシュボードを提供しています。

KubernetesコンポーネントのFAQ

Kubernetesは複数のパーツから成る複雑なプラットフォームのため、「コンポーネントがどう連携するか」、「それぞれのコンポーネントはどう違うか」が分かりづらい傾向にあります。ここでは、Kubernetesのコンポーネントに関するよくある質問と、その答えをまとめました。

Kubernetes のクラスター、Pod、ノードの違いは何ですか?

クラスターは、Kubernetes で管理されるノードのセットです。ノードは、そのクラスター内の個々のサーバーです。Pod は、ノード上で実行されるワークロードです。

クラスターとノードは Pod なしでも作成できます。しかし、ノードなしで Pod を実行できず、ノードなしでクラスターは作成できません。(単一ノードのクラスターは作成できます。Minikube のような軽量 Kubernetes ディストリビューションでは、デフォルトでそうなります。)

Kubernetes マスターノードは何をしますか?

Kubernetes マスターノードは、Kubernetes コントロールプレーンを実行するソフトウェアをホストします。単一ノードクラスターでは、Pod をホストすることで、マスターノードをワーカーとして機能させることもできます。

ただし、Kubernetes の自動スケジューリングやレジリエンス機能を最大限に活用するには、マスターとワーカーで別個のノードが必要です。

Kubernetes ノードではどのプロセスが実行されますか?

ノードで実行されるプロセスは、マスターノードとワーカーノードで異なります。また、その基盤となるノードオペレーティングシステムの構成によっても変わります。

前述のとおり、マスターノードはコントロールプレーンソフトウェアをホストし、ワーカーノードは Pod とその Pod に含まれるコンテナをホストします。

Kubernetes では複数のクラスターを構成できますか?

はい。複数のクラスターを単一コントロールプレーンで管理できます。ただし、デフォルトでは、Kubernetes が作成するクラスターは 1 つのみです。

新しいツーリングによって Kubernetes 内での複数クラスターの管理が容易になりつつありますが、設定が複雑であるため、基本を十分に理解するまではお勧めしません。

Kubernetes オブジェクトとは何ですか?

Kubernetes オブジェクトは、ワークロードの望ましい状態の記述です。オブジェクトは開発者または管理者が定義します。Kubernetes はオブジェクトの望ましい状態に対応するワークロードを作成しようと試みます。

つまり、オブジェクトは Kubernetes のコンポーネントではありませんが、構成の 1 タイプです。