Trending keywords: security, cloud, container,

Kubernetes のコンポーネント

SHARE:

Kubernetes は、単一のものであるようによく語られますが、実際には多数の異なるコンポーネントで構成されています。Kubernetes を習得するための最初のステップの 1 つは、統合されたときに Kubernetes 環境を作成するさまざまなパーツについて理解することです。

そこで、この記事では Kubernetes のさまさまなコンポーネントを取り上げ、それらをどのように統合するか、各コンポーネントの説明、およびよくある誤解について学びましょう。

Kubernetes のコンポーネントとは

Kubernetes のコンポーネントは、主に 3 つのカテゴリ、コントロールプレーンコンポーネントノード、およびオプションの拡張機能やアドオンに分類されます。各コンポーネントの具体的な内容は記事の後半で取り上げることにし、まずは主要コンポーネントカテゴリについて見てみましょう。

Kubernetes コントロールプレーン

Kubernetes コントロールプレーンは、クラスターおよびクラスター上で実行されるワークロードを管理するツールセットです。具体的には、API サーバー、ワークロードスケジューラ、キーバリューストア、オブジェクトコントローラなどがあります(これらに限りません)。

Kubernetes のノード

Kubernetes のノードは、ワークロードをホストする物理マシンまたは仮想マシンです。次の 2 つのタイプのノードがあります:

  • マスターノード: コントロールプレーンソフトウェアをホストします。
  • ワーカーノード: 各ワークロードをホストします。

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

オプションの Kubernetes 拡張機能

必要に応じて、Kubernetes クラスターにさまざまなコンポーネントを追加して、ロギング、モニタリング、Web ベースの管理などのタスクを処理することもできます。

Kubernetes の各パーツについて

Kubernetes を構成する主なコンポーネントについて学んだ後は、各コンポーネントについて詳しく見てみましょう。

API サーバー

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

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

Kubernetes スケジューラ

Kubernetes を使用する主な理由は、ワークロードをサーバークラスターにどのように分散するかが自動的に決定されることです。この決定を行うソフトウェアが、kube-scheduler と呼ばれるスケジューラです。

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

Kubernetes コントローラ

kube-controller-manager と呼ばれる Kubernetes コントローラは、実際にはコントローラのセットです。コントローラは、ノードをモニタリングしたり、サービスや Pod 用のエンドポイントを管理したりするといったタスクを処理します。

etcd

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

重要なことは、Kubernetes で実行中のアプリケーションに関連付けられたデータは etcd に保存されないことです。アプリケーションが作成、ロギング、またはその他の方法で生成するデータは、別途保存する必要があります。この目的には一般的に、何らかのストレージボリュームが使用されます。etcd はストレージボリュームと異なり、クラスター状態の追跡やアクセスリクエストの管理などに必要なデータをホストする役割のみを担います。

Kubernetes Pod

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

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

Kubernetes のノード

ノードは、Kubernetes の主要インフラストラクチャ構成要素です。ノードは物理マシンまたは仮想マシンで、Kubernetes のコントロールプレーンソフトウェアと Pod の両方をホストする役割を担います。

前述のとおり、ノードにはマスターノードとワーカーノードの 2 つのタイプがあります。マスターノードは、Linux ベースオペレーティングシステムを実行する必要があります。ワーカーノードは、Linux または Windows を実行できます。

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

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

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

Kubernetes DNS サーバー

ほとんどの Kubernetes 環境には、クラスターの内部状態を認識し、それに応じて DNS 名を解決できる DNS サーバーが必要です。これを簡素化するために、Kubernetes にはクラスター DNS と呼ばれる独自の DNS サーバーが用意されています。

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

Kubernetes ダッシュボード

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 タイプです。