ポイント
- Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するためのノードマシン群です。
- Kubernetes クラスタの望ましい状態は、ワークロード、イメージ、リソース、構成を定義したものです。
- Kubernetes クラスタは、ノードを管理するコントロールプレーンで構成され、ノードは Pod を介してタスクを実行します。ネットワーク向けのサービス、永続的にデータを格納するためのボリューム、仮想的に分離するための namespace によって支えられています。
- Kubernetes クラスタ管理とは、IT チームが Kubernetes クラスタのグループを管理する方法のことです。
- OpenShift、Advanced Cluster Management、Ansible Automation Platform などの Red Hat 製品は、クラウド、オンプレミス、エッジにわたるマルチクラスタ・デプロイメントを効率的に管理します。
Kubernetes クラスタとは
Kubernetes クラスタは、コンテナ化されたアプリケーションを実行するためのノードマシン群です。Kubernetes を実行しているなら、クラスタを実行しています。
クラスタには少なくとも 1 つのコントロールプレーンと 1 つ以上のコンピュートマシン (ノード) が含まれます。コントロールプレーンの役割は、どのアプリケーションが実行されているか、どのコンテナイメージが使用されているかといった、クラスタの望ましい状態を維持することです。ノードは、実際にアプリケーションとワークロードを実行します。
Kubernetes の主な利点を生み出しているのがクラスタです。つまり、物理または仮想、オンプレミスまたはクラウドを問わず、マシンのグループ全体でコンテナをスケジュールして実行することができます。Kubernetes コンテナは個々のマシンに関連付けられておらず、クラスタ上で抽象化されています。
Kubernetes クラスタの望ましい状態とは
Kubernetes クラスタの望ましい状態とは、アプリケーションとインフラストラクチャが特定の時点でどのように動作し、どのように機能するかを示すブループリントのことです。
クラスタにステップバイステップの指示 (命令型) を与えるのではなく、必要な最終結果を YAML または JSON ファイルで宣言 (宣言型) すると、Kubernetes はそれを維持するために継続的に動作します。
このブループリントでは通常、次のことを指定します。
- ワークロード:どのアプリケーション、マイクロサービス、または一括ジョブが実行されているか
- スケーリング:各コンテナのコピー (レプリカ) がいくつ存在する必要があるか
- リソース:各アプリケーションにどのくらいの量の CPU とメモリーを割り当てるか
- ネットワークとセキュリティ:開いているポートはどれか、トラフィックをどのようにルーティングするか、どのユーザーがアクセス権を持つか
- 回復力:コンテナがクラッシュした場合や、ハードウェアノードに障害が発生した場合にどうするか
Kubernetes クラスタの望ましい状態は、どのアプリケーションまたは他のどのワークロードを実行する必要があるか、どのイメージを使用するか、どのリソースを利用できるようにするべきかといった構成の詳細を定義します。
望ましい状態は、マニフェストで構成される設定ファイルによって定義します。このファイルは JSON または YAML ファイルであり、実行するアプリケーションのタイプおよび正常なシステムの実行に必要なレプリカの数を宣言します。
クラスタの望ましい状態は、Kubernetes API で定義します。これは、コマンドラインから (kubectl を使用)、または API を使用してクラスタとやり取りし、望ましい状態を設定または変更することで実行できます。
Kubernetes は、自動的にクラスタを管理して望ましい状態に一致させます。簡単な例として、望ましい状態を「3」に設定してアプリケーションをデプロイするとします。この設定は、アプリケーションの 3 つのレプリカが実行されている必要があることを意味します。これらのコンテナの 1 つがクラッシュした場合、Kubernetes は、実行されているレプリカが 2 つだけだということを認識し、レプリカを 1 つ追加して望ましい状態を保持します。
また、Kubernetes パターンを使用して、負荷に基づいてクラスタの規模を自動的に管理することもできます。
Kubernetes クラスタとノードおよび Pod との関係
冒頭でクラスタをノードのセットとして定義しました。ここではクラスタの動作を理解するのに役立つ、その他の Kubernetes 用語をいくつか見ていきましょう。
- コントロールプレーン:Kubernetes ノードを制御する一連のプロセス。すべてのタスクの割り当てはここで発生します。
- ノード:これらのマシンは、コントロールプレーンによって割り当てられた、要求されたタスクを実行します。
- Pod:1 つのノードにデプロイされた 1 つ以上のコンテナのセット。Pod は、最も小さくて単純な Kubernetes オブジェクトです。
- サービス:Pod のセットで実行されているアプリケーションをネットワークサービスとして公開する方法。これにより、作業の定義が Pod から切り離されます。
- ボリューム:データを含むディレクトリ。Pod のコンテナからアクセスできます。Kubernetes ボリュームの有効期間は、それを格納している Pod と同じです。ボリュームは、Pod 内で実行されるコンテナよりも長く存続し、コンテナが再起動してもデータは保持されます。
- namespace:仮想クラスタ。namespace を使用すると、Kubernetes は同じ物理クラスタ内で (複数のチームまたはプロジェクト用の) 複数のクラスタを管理できます。
Kubernetes クラスタ管理とは
Kubernetes クラスタ管理とは、IT チームが Kubernetes クラスタのグループを管理する方法のことです。
先進的なクラウドネイティブ・アプリケーションにより、Kubernetes 環境は高度に分散されています。オンプレミス、パブリッククラウド、およびエッジの複数のデータセンターをまたいでデプロイすることが可能です。
大規模に、あるいはプロダクション環境で Kubernetes を使用する組織は、開発用、テスト用、プロダクション用に複数のクラスタを環境全体に分散させ、それらを効果的に管理できるようにすることが必要です。
Kubernetes クラスタ管理のメリット
Kubernetes クラスタを効果的に管理すれば、コンテナ化されたアプリケーションのデプロイ、スケーリング、運用を自動化し、組織によるソフトウェアの提供方法を変革できます。
主なメリットには次のようなものがあります。
- スケーラビリティの向上:要求に応じて即座にアプリケーションをスケールアップまたはスケールダウンできます。トラフィックの急増に対処したり、オフピーク時のコストを節約したりするために、クラスタはワークロードを自動的に調整します。
- 回復力の強化:Kubernetes は、高可用性を維持するために、コンテナとノードの正常性を常に監視します。コンテナがクラッシュしたりハードウェア障害が発生したりした場合、Kubernetes は自動的に再起動または置き換えを行い、ダウンタイムをゼロに抑えます。
- リソースの効率:Kubernetes は、ワークロードの CPU およびメモリーの要件を評価し、インフラストラクチャの使用率を最大化して無駄を最小限に抑えられるようにワークロードをノードに割り当てます。
- DevOps と CI/CD のサポート:Kubernetes の宣言型の性質により、インフラストラクチャをコードとして扱うことができ、CI/CD パイプラインにシームレスに統合してテスト、デプロイ、ロールアウトを自動化できると同時に、DevOps チームはより迅速かつ俊敏にコラボレーションできるようになります。
Kubernetes に Red Hat OpenShift を選ぶ理由
Red Hat は、Kubernetes を含むオープンソース・コンテナ・テクノロジーのリーダー企業であるとともに積極的に開発も行っており、コンテナ・インフラストラクチャの保護、単純化、自動更新に不可欠なツールを生み出しています。
Red Hat® OpenShift® は、アプリケーションを大規模に構築、モダナイズ、デプロイするための統合プラットフォームです。Red Hat OpenShift によって、運用チームと開発チーム向けの単一の統合プラットフォームを得ることができます。組み込みの CI/CD パイプラインや、アプリケーションコードから直接コンテナを作成できる Source-to-Image (S2I) 機能など、開発者にとって使いやすいワークフローが付属しています。Kubernetes 上に構築された Red Hat OpenShift は、任意のインフラストラクチャでのアプリケーションの市場投入に必要なサービス一式を備えており、よりスマートかつ迅速な作業に役立ちます。
OpenShift とともに、Red Hat Advanced Cluster Management および Red Hat Ansible® Automation Platform を組み合わせて使用することで、パブリッククラウド、オンプレミス、エッジ環境など、複数のリージョンにまたがる複数の Kubernetes クラスタを効率的にデプロイし、管理することもできます。