Content
Kubernetes クラスターは、最新のクラウド環境の数々で基本要素となっています。簡単に説明すると、各クラスターで一連のマシンを連携させて、ワークロードを利用できるようにします。
この記事では Kubernetes クラスターの仕組み、インストール方法、管理方法を詳しく説明します。
Kubernetes クラスターとは
Kubernetes クラスターは、ワークロードをホストする一連のノードで構成されます。クラスターでは Kubernetes 自体もホストします。つまり、Kubernetes のコントロールプレーンソフトウェアを実行します。
各ノードは独立した物理マシンまたは仮想マシンです。クラスターは物理マシンと仮想マシンの組み合わせで構成されている場合もありますが、VM のみ、あるいは物理サーバーのみを使用する方が一般的です。クラスターの一部のノードはマスターとして稼働し、その他のノードやそこにデプロイされたワークロードを管理する Kubernetes コントロールプレーンソフトウェアをホストします。その他のノードとはワーカーノードであり、ここで管理者が Kubernetes 経由で実行するアプリケーションをホストします。
Kubernetes クラスターが重要である理由
Kubernetes ではクラスターを中心に機能が構築されています。
その目的は、Kubernetes の中核として、複数のサーバーにデプロイされているアプリケーションを一度に管理するための、ほぼ自動化された信頼性の高い手段を提供することにあります。したがって、Kubernetes を単一のサーバー、つまりノードを 1 つだけ構成したクラスターで実行することもできますが、Kubernetes の機能をフル活用するにはクラスターで複数のノードを構成する必要があります。
クラスターで複数のノードを構成すると、使用するリソースをサーバー間で分散させる形でワークロードを割り当てることができます。また、あるノードで障害が生じたりノードが利用不可となったりしても、ワークロードを別のノードに移動させることができます。
クラスターに配置できるノード数
クラスター内で実行できるノードの合計は、1 つから最大 5,000 です。これは現時点で公表されているノード数の上限ですが、実際には合計が 500 を超えるとノードを信頼できる状態で管理するのが難しくなる可能性があります。
単一ノードのクラスターは、一般に試験的な用途にのみ使用されます。たとえば、Kubernetes の使用を開始したばかりで、Minikube などの軽量のディストリビューションを使用している場合、通常はまず単一ノードのクラスターを作成します。
ただし、本番環境の場合はほぼ確実に、クラスターに最低でも複数、場合によっては数百や数千のノードが必要になります。1 つのクラスターで作成するノードの合計数は、実行するワークロードの数によって異なります。また、これらのワークロードで必要なリソースの数や、各ノードの信頼性も考慮する必要があります。
Kubernetes クラスターの設定方法
Kubernetes クラスターを適切に構成するプロセスは、使用している Kubernetes のディストリビューションと、デプロイする場所に応じて異なりますが、一般的な手順は以下のとおりです:
- ノードを作成する: まず、ノードとして使用する物理サーバーまたは仮想マシンを設定します。
- 各ノードのプロビジョニングにはオペレーティングシステムを使用する必要があり、大半の場合、いずれかの Linux ディストリビューションになります。
- ノードごとにコンテナランタイムも必要です。コンテナランタイムは、コンテナを実行するソフトウェアであり、Pod を実行できます。
- Kubernetes のコントロールプレーンをデプロイする: マスターノードに、Kubernetes のコントロールプレーンのコンポーネント(APIサーバー、スケジューラ、etcd のキー/値ストアなど)をデプロイします。
- クラスターにワーカーノードを追加する: マスターノードにワーカーノードを接続して、クラスターにワーカーノードを追加します。一般的に、接続対象のノードに対して kubeadm join コマンドを実行して追加します。
Kubernetes クラスターをインストールする最も簡単な方法
クラスターのインストールと聞くと尻込みしてしまいますが、実際難しいので仕方ありません。経験を積んだ管理者であっても、本番環境グレードの Kubernetes クラスターを設定するには手間取ります。
ですが、クラスターの設定を簡素化する方法はいくつかあります。ノードやクラスターの設定タスクの大半を自動化できる軽量のディストリビューションを使用することも、クラスターを自動的に構築するクラウドのマネージドサービスを利用して Kubernetes を実行することもできます。
では、この両方のアプローチについて見ていきましょう。
軽量の Kubernetes クラスターを設定する
Minikube や MicroK8s など軽量の Kubernetes ディストリビューションの多くでは、ノードの作成とクラスターへの追加が自動的に行われます。
たとえば Minikube では、次のコマンドを使用してクラスターを作成できます:
minikube start
このコマンドを実行すると、クラスターの作成と起動が行われます。Minikube はデフォルトで、単一ノードのクラスターを作成します。使用する Minikube ドライバに応じて、ノードは VM として、または Minikube を実行している同じマシンとして実行されます。
クラウドで Kubernetes クラスターを設定する
クラウドベースの Kubernetes サービス(Amazon Elastic Kubernetes Service、Azure Kubernetes Service、Google Kubernetes Engine など)の多くでは、クラウドベースの VM インスタンスを使用してクラスターを自動的に設定できます。
たとえば、Amazon クラウドにクラスターを作成する場合は、Amazon の Kubernetes CLI 管理ツールである eks を使用して、次のコマンドを実行します:
eksctl create cluster
デフォルトでは、このコマンドで 2 つのノードからなるクラスターが作成されます。これらのノードは EC2 インスタンスであり、デフォルトで使用している AWS クラウドリージョンで実行されます。
クラウドベースの Kubernetes サービスでクラスターを自動設定する必要はありません。大抵の場合、必要であればノードを手動で作成、管理できます。ただし、クラウドでクラスターの設定を自動化すれば、とても簡単かつ速やかにクラスターの運用を始められます。その一方で、ノードで使用されるクラウドリソースのコストが高くなるというデメリットもあります。
マルチクラスターの Kubernetes
初期の Kubernetes は、1 つの環境で運用するクラスターは 1 つのみという前提で設計されていました。
しかし現在では、Kubernetes のマルチクラスター構成に対する関心が高まっています。Kubernetes のマルチクラスター構成では、単一のコントロールプレーンで複数のクラスターを管理します。つまり、サーバー上の複数のクラスターを個別に、他のクラスターとは分けて稼働させながら、1 つのコントロールプレーンソフトウェアだけで、すべてのクラスターを管理できます。
マルチクラスター環境の利点は、ワークロードを可能な限り分離させた状態で運用できることです。こうした環境は、1 つのクラスターで発生したセキュリティや安定性に関する問題が波及して、他のクラスターでホストされているワークロードを停止させるリスクを最小限にできます。
さらに、マルチクラスター構成の場合、サーバーで複数のクラスターを個々に稼働させて一元管理する必要がある環境で、管理の複雑さを軽減することができます。たとえば、複数の各データセンターでクラスターを個別に運用しながら、1 つのコントロールプレーンですべてのクラスターを管理するとします。マルチクラスターを適切に構成できれば、管理上の負荷が軽減され、データセンターごとにコントロールプレーンをデプロイして管理する必要がなくなります。
ただし、Kubernetes のマルチクラスター構成にはデメリットもあります。それは、設定と管理がシングルクラスター構成と比べて大幅に難しくなることです。特に、マルチクラスター環境では次の 2 つの大きな課題があります:
- 各クラスター用のネットワークリソースを管理するための一貫した方法を確立する。物理的に複数の拠点にクラスターをデプロイしているため、IP アドレスやルーティングなどの構成が異なるさまざまなネットワークを運用しなければならない環境で特に難しい課題となります。
- コントロールプレーンのデータを複数のクラスター間で同期する方法を見つける。これも物理的に複数の拠点にクラスターをデプロイしている場合は非常に難しい課題です。ネットワークで遅延が生じると、各クラスターを追跡するコントロールプレーンのコンポーネントを完全に同期することが難しくなります。わずか数秒のずれであっても、コントロールプレーンで環境全体の実際の状態を把握できなければ何かしらの問題につながる可能性があります。
こうした課題には、Virtual Kubelet のようなツールを使用することで、問題なく対処できます。とはいえ、Kubernetes が元々複雑であることに加えて、他にもさまざまな複雑な点が存在します。こうした理由から、マルチクラスター構成は気軽には取り組めないのです。
複数のクラスターを使用する具体的なニーズがなければ、ネームスペースをいくつか構成してワークロードを個別に運用するのが簡単なアプローチです。ネームスペースは、マルチクラスター構成よりも Kubernetes で簡単に設定、管理できます。
まとめ
Kubernetes でのクラスターの設定と管理には数々の方法があります。Kubernetes を使い始めたばかりで、試験的に使用してみたい場合は、自分の PC やノートパソコンに単一ノードのクラスターを作成することを検討してください。ただし本番環境のワークロードの場合は、ワークロードの要件に応じて、クラスターのアーキテクチャとノードの合計数を慎重に計画する必要があります。