概要
パターンとは、問題に対する反復可能なソリューションのことです。Kubernetes パターンは、コンテナベースのアプリケーションおよびサービス向けの設計パターンです。
Kubernetes はクラウドネイティブ・アプリケーションの作成に役立ち、アプリケーション・プログラミング・インタフェース (API) のライブラリと、アプリケーションをビルドするためのツールを提供します。
しかし、これらの機能を使用してビジネスニーズを満たし、目標を達成するための完全なシステムを構築する方法についての開発者やアーキテクト向けガイドラインが、Kubernetes では提供されていません。
パターンとは、アーキテクチャを再利用する方法です。アーキテクチャをすべて自作するのではなく、既存の Kubernetes パターンを使用できるので、機能が想定どおりに動作することも保証されます。
Kubernetes 上で重要なビジネスサービスを提供しようとすると、試行錯誤による学習に時間がかかりすぎ、ダウンタイムや中断などの問題が生じる可能性があります。
パターンはいわば青写真のようなもので、1 つのパターンを流用して同様の多くの問題を解決できます。パターンは、単に特定の問題を修正するための手順を提供するものではありません。
常に同じソリューションを提供することを意図したものではないため、同じパターンを使用しても結果が同一にならない場合があります。あるパターンを使用したシステムが、同じパターンを使用した別のシステムとは異なって見えることもあります。しかし、どちらのシステムも同じ特性を持ちます。
Kubernetes パターンを使用することで、開発者は Kubernetes をランタイム・プラットフォームとしてクラウドネイティブ・アプリケーションを作成できます。
Kubernetes パターンのタイプ
パターンは Kubernetes 開発者が必要とするツールであり、システムの構築方法を示します。
- 基本パターン:Kubernetes の中核的なコンセプトをカバーします。これらのパターンは、コンテナベースのクラウドネイティブ・アプリケーションを構築するための基本的な原則と手法について説明します。
- 動作パターン:基本パターンをベースとし、さまざまなタイプのコンテナとプラットフォームの相互作用を管理するためのコンセプトに粒度を追加するパターンについて説明します。
- 構造パターン:Kubernetes ポッド内のコンテナの整理に関連するパターンです。
- 構成パターン:アプリケーション構成を Kubernetes で処理するさまざまな方法に使用されます。これらのパターンには、アプリケーションと構成を接続するための具体的な手順などがあります。
- 高度なパターン:プラットフォーム自体を拡張する方法や、クラスタ内でコンテナイメージを直接構築する方法などの高度なコンセプトを扱います。
Kubernetes パターンのユースケース
予測可能な要求のパターン
予測可能な要求のパターンは、Kubernetes の基本パターンです。このタイプのパターンを使用すると、アプリケーションはコンテナ化されたアプリケーションの基本原則に準拠し、Kubernetes を使用して自動化できるようになります。
予測可能な要求のパターンは、すべてのコンテナがアプリケーションのリソース要件とランタイム依存関係を宣言すべき理由を説明します。このような要件を定義することで、Kubernetes がクラスタ内の適切な場所にアプリケーションをデプロイできるようになります。
これらのパターンを使用して定義できるものの例としては、ランタイム依存関係、リソースプロファイル、ポッドの優先度、プロジェクトリソースがあります。
例:リソースプロファイル
CPU やメモリなどのコンテナのリソース要件を、要求と制限の形式で指定します。要求は、最低限必要なリソースの量を指し、制限は、コンテナが消費できるリソースの最大量を指します。
スケジューラーがノードにポッドを配置する際には、この要求量を使用します。スケジューラーは、ポッドを収容するのに十分な容量があるノードにのみポッドをスケジュールします。
リソース要件を設定しない場合、そのコンテナの優先度は低いと見なされ、ノードで使用可能なリソースが不足すると最初に強制終了されます。
構成パターン
すべてのアプリケーションには構成が必要です。ソースコードに構成を保存すれば簡単ですが、そうすると柔軟性が犠牲になり、アプリケーションのイメージを再作成せずに構成を調整することはできません。構成を外部に置くと、環境に基づいて適応させることができます。
構成パターンは、さまざまな開発、統合、実稼働環境向けに外部構成を使用してアプリケーションをカスタマイズおよび調整するのに役立ちます。
例:EnVar 構成
EnVar 構成パターンは、構成変数が小数であり、広範囲にサポートされる環境変数を使用して構成を外部化できる場合に最適です。
ハードコーディングされた構成を変更するとアプリケーションの再構築が必要になりますが、アプリケーションの構成を外部化している場合、アプリケーションのビルド後でも構成を変更できます。
環境変数はあらゆるオペレーティングシステムで定義でき、あらゆるプログラミング言語からアクセスできるので、これらを使用して構成を外部化するとうまく機能します。
環境変数を使用する場合、通常、ハードコーディングされたデフォルト値がビルド中に定義され、それがランタイム時に上書きされます。
Kubernetes では、デプロイメントやレプリカセットなどのコントローラーの Pod 仕様で変数を直接設定できます。環境変数に値を直接代入し、それらの環境変数を Pod 定義とは別に管理することが可能です。
また、Kubernetes Secrets (機密データ用) や ConfigMaps (非機密構成用) への委任を使用することもできます。
高度なパターン
このタイプのパターンには、複雑なトピックや最新のパターン実装があります。例としては、コントローラー、オペレーター、エラスティック・スケーリング、イメージビルダーパターンなどがあります。
例:エラスティック・スケーリング
エラスティック・スケーリング・パターンは、ポッドレプリカ数とポッドのリソース要件を調整することによってアプリケーションを水平にスケーリングするために使用され、クラスタノード数を変更することでクラスタ自体をスケーリングできます。
スケーリングの処理は手動でもできますが、エラスティック・スケーリング・パターンを使用すると、Kubernetes で負荷に応じて自動的にスケーリングさせることができます。
Kubernetes では、コンテナのリソース、サービスに必要なレプリカ、またはクラスタ内のノード数を変更できます。また、外部の負荷と容量に関連するイベントを監視してコンテナの状態を分析し、目的のパフォーマンスに合わせてスケーリングすることもできます。
ポッドの自動水平スケーリングにより、固定ではなく、さまざまな負荷の処理に対応できる可変のアプリケーション容量を定義できます。ポッドのスケーリングには、ポッド自動水平スケーラーが使用されます。
ポッド自動水平スケーラーを使用するには、リソース使用量データのクラスタ全体の集計機能であるメトリックサーバーを有効にし、CPU リソース制限を定義する必要があります。ポッド自動水平スケーラーの定義はコマンドラインから作成できます。
ポッド自動水平スケーラーのコントローラーは、コマンドラインから設定する、あらかじめ決められた定義に基づいて、スケーリングに関連するポッドに関するメトリックを継続的に取得します。
また、現在値と目標値に基づいて、必要なレプリカ数を計算し、宣言されたレプリカを変更して新たに目標とされる状態を維持します。
エンタープライズ向け Kubernetes
Red Hat® OpenShift® はエンタープライズ対応 Kubernetes プラットフォームです。開発者にとってセルフサービスの環境となり、どのようなインフラストラクチャでも自動化されたフルスタックの処理を構築できます。
Red Hat OpenShift は、Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。
Red Hat OpenShift を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアが迅速かつ簡単にビジネスにつながるのを助けます。