9.3. ノードプールの設定
KafkaNodePool カスタムリソースの spec プロパティーを更新して、ノードプールデプロイメントを設定します。
ノードプールは、Kafka クラスター内の Kafka ノードの個別のグループを指します。各プールには独自の固有の設定があり、これにはレプリカの数、ロール、ストレージ割り当ての必須設定が含まれます。
オプションで、次のプロパティーの値を指定することもできます。
-
メモリーと CPU のリクエストと制限を指定する
resources -
Pod およびその他の OpenShift リソースのカスタム設定を指定する
template -
jvmOptions :ヒープサイズ、ランタイム、その他のオプションのカスタム JVM 設定を指定します。
Kafka リソースは、Kafka クラスター内のすべてのノードの設定を表します。KafkaNodePool リソースは、ノードプール内のノードのみの設定を表します。設定プロパティーが KafkaNodePool で指定されていない場合は、Kafka リソースから継承されます。両方のリソースで設定されている場合は、KafkaNodePool リソースで指定された設定が優先されます。たとえば、ノードプールと Kafka 設定の両方に jvmOptions が含まれている場合、ノードプール設定で指定された値が使用されます。-Xmx: 1024m が KafkaNodePool.spec.jvmOptions に設定され、-Xms: 512m が Kafka.spec.kafka.jvmOptions に設定されている場合、ノードはノードプール設定の値を使用します。
Kafka と KafkaNodePool スキーマのプロパティーは組みわせることができません。明確にするために、KafkaNodePool.spec.template に podSet.metadata.labels のみが含まれており、Kafka.spec.kafka.template に podSet.metadata.annotations および pod.metadata.labels が含まれている場合、ノードプール設定内のテンプレート値があるため、Kafka 設定のテンプレート値は無視されます。
ノードプールの設定オプションの詳細は、Streams for Apache Kafka カスタムリソース API リファレンス を参照してください。
KRaft モードを使用したクラスター内のノードプールの設定例
Kafka リソースの設定は、KRaft モードに適している必要があります。現在、KRaft モードには 多くの制限 があります。
ZooKeeper を使用したクラスター内のノードプールの設定例
- 1
- ノードプール内のノードのロール。ZooKeeper で Kafka を使用する場合にのみ
brokerでありえます。
9.3.1. スケーリング操作のためのノードプールへの ID の割り当て リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ノードプールでスケーリング操作を実行するときに、Cluster Operator による高度なノード ID 処理にアノテーションを使用する方法について説明します。Cluster Operator が順番に次の ID を使用するのではなく、使用するノード ID を指定します。この方法でノード ID を管理すると、より詳細な制御が可能になります。
ID の範囲を追加するには、以下のアノテーションを KafkaNodePool リソースに割り当てます。
-
新しいブローカーに使用される ID の範囲を追加する
strimzi.io/next-node-ids -
既存のブローカーを削除するための ID の範囲を追加する
strimzi.io/remove-node-ids
個別のノード ID、ID 範囲、または両方の組み合わせを指定できます。たとえば、Kafka ノードプールをスケールアップするために [0, 1, 2, 10-20, 30] の ID の範囲を指定できます。この形式では、個々のノード ID (0、1、2、30) の組み合わせと ID の範囲 (10-20) を指定できます。
一般的なシナリオでは、スケールアップする場合は ID の範囲を指定し、スケールダウンする場合は特定のノードを削除する場合は単一のノード ID を指定します。
この手順では、次のようにスケーリングアノテーションをノードプールに追加します。
-
pool-aにはスケールアップ用の ID 範囲が割り当てられます -
pool-bには、スケールダウン用の ID 範囲が割り当てられます
スケーリング操作中、ID は次のように使用されます。
- スケールアップでは、新しいノードの範囲内で使用可能な最小の ID が選択されます。
- スケールダウンすると、範囲内で使用可能な最大の ID を持つノードが削除されます。
ノードプールに割り当てられたノード ID のシーケンスにギャップがある場合、次に追加されるノードにはギャップを埋める ID が割り当てられます。
アノテーションは、スケーリング操作のたびに更新する必要はありません。未使用の ID は、次のスケーリングイベントでも引き続き有効です。
Cluster Operator を使用すると、ID の範囲を昇順または降順で指定できるため、ノードがスケーリングされる順序で ID を定義できます。たとえば、スケールアップする場合、[1000-1999] などの範囲を指定すると、次に低い ID (1000、1001、1002、1003 など) が新しいノードに割り当てられます。逆に、スケールダウンする場合は、[1999-1000] などの範囲を指定して、次に高い ID (1003、1002、1001、1000 など) を持つノードが削除されるようにすることができます。
アノテーションを使用して ID 範囲を指定しない場合、Cluster Operator はスケーリング操作中に ID を処理するデフォルトの動作に従います。ノード ID は 0 (ゼロ) から始まり、Kafka クラスター全体で順番に実行されます。次に小さい ID が新しいノードに割り当てられます。ノード ID とのギャップはクラスター全体で埋められます。これは、ノードプール内で順番に実行できない可能性があることを意味します。スケールアップのデフォルトの動作では、クラスター全体で次に小さい使用可能なノード ID を追加します。スケールダウンの場合は、ノードプール内の使用可能なノード ID が最も大きいノードを削除します。デフォルトのアプローチは、割り当てられた ID 範囲の形式が間違っている場合、スケールアップ範囲で ID が不足する場合、またはスケールダウン範囲が使用中のノードに適用されない場合にも適用されます。
前提条件
- Cluster Operator がデプロイされている。
-
(オプション)
reserved.broker-max.id設定プロパティーを使用して、ノードプール内のノード ID の許容範囲を拡張します。
デフォルトでは、Apache Kafka はノード ID を 0 ~ 999 の範囲の数値に制限します。999 より大きいノード ID 値を使用するには、reserved.broker-max.id 設定プロパティーを Kafka カスタムリソースに追加し、必要な最大ノード ID 値を指定します。
この例では、最大ノード ID は 10000 に設定されます。その後、ノード ID をその値に割り当てることができます。
最大ノード ID 番号の設定例
手順
次の例に示すように、スケールアップまたはスケールダウン時に使用する ID でノードプールにアノテーションを付けます。
スケールアップ用の ID は、ノードプール
pool-aに割り当てられます。スケールアップ用の ID の割り当て
oc annotate kafkanodepool pool-a strimzi.io/next-node-ids="[0,1,2,10-20,30]"
oc annotate kafkanodepool pool-a strimzi.io/next-node-ids="[0,1,2,10-20,30]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードを
pool-aに追加するときに、この範囲内で使用可能な最小の ID が使用されます。スケールダウン用の ID はノードプール
pool-bに割り当てられます。スケールダウン用の ID の割り当て
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[60-50,9,8,7]"
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[60-50,9,8,7]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow pool-bをスケールダウンすると、この範囲内で使用可能な最大の ID が削除されます。注記特定のノードを削除する場合は、単一のノード ID をスケールダウンアノテーションに割り当てることができます (
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[3]")。ノードプールをスケーリングできるようになりました。
詳細は、以下を参照してください。
調整時に、アノテーションの形式が間違っている場合は警告が表示されます。
スケーリング操作の実行後に、アノテーションが不要になった場合は削除できます。
スケールアップ用のアノテーションの削除
oc annotate kafkanodepool pool-a strimzi.io/next-node-ids-
oc annotate kafkanodepool pool-a strimzi.io/next-node-ids-Copy to Clipboard Copied! Toggle word wrap Toggle overflow スケールダウン用のアノテーションの削除
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids-
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids-Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.2. ノードプールからノードを移動する場合のラックに与える影響 リンクのコピーリンクがクリップボードにコピーされました!
Kafka クラスターでラック認識が有効になっている場合、レプリカを異なるラック、データセンター、またはアベイラビリティーゾーンに分散できます。ノードプールからノードを移動する場合、特にラック認識に関して、クラスタートポロジーへの影響を考慮してください。特定の Pod をノードプールから削除すると (特に順序どおりに削除しない場合)、クラスタートポロジーが壊れたり、ラック間の分散に不均衡が生じたりする可能性があります。不均衡が発生すると、ノード自体の分散とクラスター内のパーティションレプリカの両方に影響を与える可能性があります。ラック間でのノードとパーティションで分散が不均一になると、Kafka クラスターのパフォーマンスと回復力に影響を与える可能性があります。
ラック全体で必要なバランスと復元力を維持するために、ノードの削除を戦略的に計画します。特定の ID を持つノードを慎重に移動するには、strimzi.io/remove-node-ids アノテーションを使用します。パーティションのレプリカをラック全体に分散して、クライアントが最も近隣にあるレプリカから消費できるように、設定が壊れていなことを確認します。
RackAwareGoal で Cruise Control と KafkaRebalance リソースを使用して、レプリカが異なるラックに分散していることを確認します。
9.3.3. ノードプールへのノードの追加 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ノードプールをスケールアップして新しいノードを追加する方法について説明します。現在スケールアップが可能なのは、専用ブローカーとして実行されるノードを含む、ブローカー専用ノードプールのみです。
この手順では、ノードプール pool-a の 3 つのノードから始めます。
ノードプール内の Kafka ノード
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0
NAME READY STATUS RESTARTS
my-cluster-pool-a-0 1/1 Running 0
my-cluster-pool-a-1 1/1 Running 0
my-cluster-pool-a-2 1/1 Running 0
ノード ID は、作成時にノードの名前に追加されます。ノード ID が 3 であるノード my-cluster-pool-a-3 を追加します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
(オプション) スケールアップ操作の場合、操作で使用するノード ID を指定できます。
操作にノード ID の範囲を割り当てた場合、追加されるノードの ID は、指定されたノードの順序によって決まります。単一のノード ID を割り当てた場合は、指定した ID でノードが追加されます。それ以外の場合は、クラスター全体で使用可能な最小のノード ID が使用されます。
手順
ノードプールに新しいノードを作成します。
たとえば、ノードプール
pool-aには 3 つのレプリカがあります。レプリカの数を増やしてノードを追加します。oc scale kafkanodepool pool-a --replicas=4
oc scale kafkanodepool pool-a --replicas=4Copy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、ノードプール内の 4 つの Kafka ノードが表示されます
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0 my-cluster-pool-a-3 1/1 Running 0
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0 my-cluster-pool-a-3 1/1 Running 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードプール内のノードの数を増やした後、パーティションを再割り当てします。
ノードプールをスケールアップした後、Cruise Control の
add-brokersモードを使用して、パーティションレプリカを既存のブローカーから新しく追加したブローカーに移動します。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パーティションをノード
my-cluster-pool-a-3に再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
9.3.4. ノードプールからのノードの削除 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ノードプールをスケールダウンしてノードを削除する方法について説明します。現在スケールダウンが可能なのは、専用ブローカーとして実行されるノードを含む、ブローカー専用ノードプールのみです。
この手順では、ノードプール pool-a の 4 つのノードから開始します。
ノードプール内の Kafka ノード
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0 my-cluster-pool-a-3 1/1 Running 0
NAME READY STATUS RESTARTS
my-cluster-pool-a-0 1/1 Running 0
my-cluster-pool-a-1 1/1 Running 0
my-cluster-pool-a-2 1/1 Running 0
my-cluster-pool-a-3 1/1 Running 0
ノード ID は、作成時にノードの名前に追加されます。ノード ID が 3 であるノード my-cluster-pool-a-3 を削除します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
(オプション) スケールダウン操作の場合、操作で使用するノード ID を指定できます。
操作にノード ID の範囲を割り当てた場合、削除されるノードの ID は、指定されたノードの順序によって決まります。単一のノード ID を割り当てた場合は、指定の ID が割り当てられたノードが削除されます。それ以外の場合は、ノードプール内で使用可能な ID が最も大きいノードが削除されます。
手順
ノードプール内のノードの数を減らす前に、パーティションを再割り当てします。
ノードプールをスケールダウンする前に、Cruise Control の
remove-brokersモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード
my-cluster-pool-a-3からパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。再割り当てプロセスが完了し、削除されるノードにライブパーティションがなくなったら、ノードプール内の Kafka ノードの数を減らします。
たとえば、ノードプール
pool-bには 4 つのレプリカがあります。レプリカの数を減らしてノードを削除します。oc scale kafkanodepool pool-a --replicas=3
oc scale kafkanodepool pool-a --replicas=3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、ノードプール内の 3 つの Kafka ノードが表示されます
NAME READY STATUS RESTARTS my-cluster-pool-b-kafka-0 1/1 Running 0 my-cluster-pool-b-kafka-1 1/1 Running 0 my-cluster-pool-b-kafka-2 1/1 Running 0
NAME READY STATUS RESTARTS my-cluster-pool-b-kafka-0 1/1 Running 0 my-cluster-pool-b-kafka-1 1/1 Running 0 my-cluster-pool-b-kafka-2 1/1 Running 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.5. ノードプール間でのノードの移動 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ダウンタイムなしでソース Kafka ノードプールとターゲット Kafka ノードプール間でノードを移動する方法について説明します。ターゲットノードプールに新しいノードを作成し、パーティションを再割り当てして、ソースノードプールの古いノードからデータを移動します。新しいノード上のレプリカが同期している場合、古いノードを削除できます。
この手順では、2 つのノードプールから始めます。
-
3 つのレプリカを持つ
pool-aがターゲットノードプールです -
4 つのレプリカを持つ
pool-bがソースノードプールです
pool-a をスケールアップし、パーティションを再割り当てして pool-b をスケールダウンします。その結果、次のようになります。
-
4 つのレプリカを持つ
pool-a -
3 つのレプリカを持つ
pool-b
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
(オプション) スケールアップおよびスケールダウン操作の場合は、使用するノード ID の範囲を指定できます。
操作にノード ID を割り当てた場合、追加または削除されるノードの ID は、指定されたノードの順序によって決まります。それ以外の場合は、ノードを追加するときにクラスター全体で使用可能な最小のノード ID が使用されます。そして、ノードプール内で使用可能な ID が最も大きいノードが削除されます。
手順
ターゲットノードプールに新しいノードを作成します。
たとえば、ノードプール
pool-aには 3 つのレプリカがあります。レプリカの数を増やしてノードを追加します。oc scale kafkanodepool pool-a --replicas=4
oc scale kafkanodepool pool-a --replicas=4Copy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、ソースノードプールとターゲットノードプール内の 4 つの Kafka ノードが表示されます
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード ID は、作成時にノードの名前に追加されます。ノード ID が
7であるノードmy-cluster-pool-a-7を追加します。パーティションを古いノードから新しいノードに再割り当てします。
ソースノードプールをスケールダウンする前に、Cruise Control の
remove-brokerモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード
my-cluster-pool-b-6からパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。再割り当てプロセスが完了したら、ソースノードプール内の Kafka ノードの数を減らします。
たとえば、ノードプール
pool-bには 4 つのレプリカがあります。レプリカの数を減らしてノードを削除します。oc scale kafkanodepool pool-b --replicas=3
oc scale kafkanodepool pool-b --replicas=3Copy to Clipboard Copied! Toggle word wrap Toggle overflow プール内で最も数値の大きい ID (
6) を持つノードが削除されます。出力には、ソースノードプール内の 3 つの Kafka ノードが表示されます
NAME READY STATUS RESTARTS my-cluster-pool-b-kafka-2 1/1 Running 0 my-cluster-pool-b-kafka-3 1/1 Running 0 my-cluster-pool-b-kafka-5 1/1 Running 0
NAME READY STATUS RESTARTS my-cluster-pool-b-kafka-2 1/1 Running 0 my-cluster-pool-b-kafka-3 1/1 Running 0 my-cluster-pool-b-kafka-5 1/1 Running 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.6. ノードプールのロールの変更 リンクのコピーリンクがクリップボードにコピーされました!
ノードプールは、KRaft モード (Kafka Raft メタデータを使用) で動作する Kafka クラスターで使用することも、メタデータ管理に ZooKeeper を使用する Kafka クラスターで使用することもできます。KRaft モードを使用している場合は、ノードプール内のすべてのノードがブローカー、コントローラー、またはその両方として動作するようにロールを指定できます。ZooKeeper を使用している場合は、ノードをブローカーのみとして設定する必要があります。
状況により、ノードプールに割り当てられたロールを変更することが必要な場合があります。たとえば、broker と controller の二重のロールを実行するノードを含むノードプールがあり、それらのロールを 2 つのノードプール間で分割すると決定したとします。この場合、ブローカーとしてのみ機能するノードを含む新しいノードプールを作成し、二重のロールを持つノードから新しいブローカーにパーティションを再割り当てします。その後、古いノードプールのロールを controller 専用ロールに切り替えることができます。
controller 専用ロールを持つノードプールと broker 専用ロールを持つノードプールから、broker と controller の二重のロールを実行するノードを含むノードプールに移動することで、逆の操作を実行することもできます。この場合、broker ロールを既存のコントローラー専用ノードプールに追加し、ブローカー専用ノードから二重のロールを持つノードにパーティションを再割り当てしてから、ブローカー専用ノードプールを削除します。
ノードプール設定で broker ロールを削除する場合は、Kafka がパーティションを自動的に再割り当てしない点に注意してください。broker ロールを削除する前に、controller 専用ロールに変更するノードにパーティションが割り当てられていないことを確認してください。パーティションが割り当てられている場合、変更は妨げられます。broker ロールを削除する前に、ノードにレプリカが残っていないようにしてください。ロールを変更する前にパーティションを再割り当てする最良の方法は、remove-brokers モードで Cruise Control の最適化プロポーザルを適用することです。詳細は、「最適化プロポーザルの生成」 を参照してください。
9.3.7. 個別の broker ロールと controller ロールへの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、別のロールを持つノードプールを使用するように移行する方法を説明します。Kafka クラスターが controller ロールと broker ロールを組み合わせたノードプールを使用している場合は、別のロールを持つ 2 つのノードプールを使用するように移行できます。そのためには、クラスターをリバランスして、パーティションレプリカを broker 専用ロールを持つノードプールに移動してから、古いノードプールを controller 専用ロールに切り替えます。
この手順では、controller ロールと broker ロールを持つノードプール pool-a から始めます。
二重のロールを持つノードプール
ノードプールには 3 つのノードがあります。
ノードプール内の Kafka ノード
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0
NAME READY STATUS RESTARTS
my-cluster-pool-a-0 1/1 Running 0
my-cluster-pool-a-1 1/1 Running 0
my-cluster-pool-a-2 1/1 Running 0
各ノードは、broker と controller を組み合わせたロールを実行します。ブローカーとしてのみ機能する 3 つのノードを含む、pool-b という 2 番目のノードプールを作成します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
手順
brokerロールを持つノードプールを作成します。ノードプール設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいノードプールにも 3 つのノードがあります。ブローカー専用ノードプールがすでにある場合は、この手順をスキップできます。
-
新しい
KafkaNodePoolリソースを適用してブローカーを作成します。 デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、2 つのノードプールで実行されている Pod が表示されます
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード ID は、作成時にノードの名前に追加されます。
Cruise Control の
remove-brokersモードを使用して、二重のロールを持つノードから新しく追加されたブローカーにパーティションレプリカを再割り当てします。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
注記controller 専用のロールに変更するノードにパーティションが割り当てられている場合、変更は阻止されます。
Kafkaリソースのstatus.conditionsは、変更を妨げるイベントの詳細を提供します。元々ロールを組み合わせて有していたノードプールから
brokerロールを削除します。二重のロールを持つノードの controller への切り替え
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 設定変更を適用して、ノードプールを controller 専用ロールに切り替えます。
9.3.8. 二重のロールを持つノードへの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、broker 専用ロールと controller 専用ロールを持つ個別のノードプールから、二重のロールを持つノードプールの使用に移行する方法について説明します。Kafka クラスターが専用のコントローラーノードとブローカーノードを持つノードプールを使用している場合は、両方のロールを持つ単一のノードプールを使用するように移行できます。これを行うには、broker ロールをコントローラー専用ノードプールに追加し、クラスターをリバランスしてパーティションレプリカを二重のロールを持つノードプールに移動してから、古いブローカー専用ノードプールを削除します。
この手順では、controller ロールのみを持つ pool-a と、broker ロールのみを持つ pool-b の 2 つのノードプールから始めます。
単一ロールのノードプール
Kafka クラスターには 6 つのノードがあります。
ノードプール内の Kafka ノード
pool-a ノードは controller のロールを実行します。pool-b ノードは broker のロールを実行します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
手順
ノードプール
pool-aを編集し、それにbrokerロールを追加します。ノードプール設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステータスを確認し、ノードプール内の Pod が再起動して準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、2 つのノードプールで実行されている Pod が表示されます
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノード ID は、作成時にノードの名前に追加されます。
Cruise Control の
remove-brokersモードを使用して、ブローカー専用ノードから二重のロールを持つノードにパーティションレプリカを再割り当てします。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
古いブローカー専用ノードが含まれる
pool-bノードプールを削除します。oc delete kafkanodepool pool-b -n <my_cluster_operator_namespace>
oc delete kafkanodepool pool-b -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.9. ノードプールを使用したストレージの管理 リンクのコピーリンクがクリップボードにコピーされました!
通常、Streams for Apache Kafka でのストレージ管理は簡単で、セットアップ時の変更はほとんど不要です。ただし、場合によっては、ストレージ設定を変更する必要があります。ノードプールを使用すると、新しいストレージ要件を指定する個別のノードプールを設定できるため、このプロセスが簡素化されます。
この手順では、3 つのノードを含む pool-a というノードプールのストレージを作成および管理します。使用する永続ストレージのタイプを定義するストレージクラス (volume.class) を変更する方法を示します。同じ手順を使用して、ストレージサイズ (volume.size) を変更できます。
ブロックストレージを使用することを強く推奨します。Streams for Apache Kafka は、ブロックストレージでの使用についてのみテストされています。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
- 動的ボリューム割り当てに永続ボリューム要求を使用するストレージの場合、必要なストレージソリューションに対応するストレージクラスが OpenShift クラスターで定義され、使用可能になります。
手順
独自のストレージ設定でノードプールを作成します。
たとえば、ノードプール
pool-aは永続ボリュームが含まれる JBOD ストレージを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow pool-aのノードは、Amazon EBS (Elastic Block Store) GP2 ボリュームを使用するように設定されています。-
pool-aのノードプール設定を適用します。 デプロイメントのステータスを確認し、
pool-a内の Pod が作成されて準備完了 (1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、ノードプール内の 3 つの Kafka ノードが表示されます
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいストレージクラスに移行するには、必要なストレージ設定で新しいノードプールを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pool-bのノードは、Amazon EBS (Elastic Block Store) GP3 ボリュームを使用するように設定されています。-
pool-bのノードプール設定を適用します。 -
デプロイメントのステータスを確認し、
pool-b内の Pod が作成されて準備完了となるまで待ちます。 パーティションを
pool-aからpool-bに再割り当てします。新しいストレージ設定に移行する場合、Cruise Control の
remove-brokersモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pool-aからパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。再割り当てプロセスが完了したら、古いノードプールを削除します。
oc delete kafkanodepool pool-a
oc delete kafkanodepool pool-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.10. ノードプールを使用したストレージアフィニティーの管理 リンクのコピーリンクがクリップボードにコピーされました!
ローカル永続ボリュームなどのストレージリソースが特定のワーカーノードまたはアベイラビリティーゾーンに制限されている状況では、ストレージアフィニティーを設定すると、適切なノードを使用するように Pod をスケジュールする場合に役立ちます。
ノードプールを使用すると、アフィニティーを個別に設定できます。この手順では、zone-1 と zone-2 の 2 つのアベイラビリティゾーンのストレージアフィニティーを作成および管理します。
ノードプールを個別のアベイラビリティーゾーンに設定できますが、同じストレージクラスを使用します。各ゾーンで利用可能なストレージリソースを表す all-zones 永続ストレージクラスを定義します。
また、.spec.template.pod プロパティーを使用してノードアフィニティーを設定し、zone-1 および zone-2 のワーカーノードで Kafka Pod をスケジュールします。
ストレージクラスとアフィニティーは、各アベイラビリティーゾーンのノードを表すノードプールで指定されます。
-
pool-zone-1 -
pool-zone-2
前提条件
- Cluster Operator がデプロイされている。
- アフィニティーの概念に詳しくない場合は、Kubernetes ノードと Pod のアフィニティーのドキュメント を参照してください。
手順
各アベイラビリティーゾーンで使用するストレージクラスを定義します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow all-zonesのストレージクラスと各ゾーンのアフィニティーを指定して、2 つのアベイラビリティーゾーンを表すノードプールを作成します。zone-1 のノードプール設定
Copy to Clipboard Copied! Toggle word wrap Toggle overflow zone-2 のノードプール設定
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ノードプール設定を適用します。
デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>
oc get pods -n <my_cluster_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、
pool-zone-1の 3 つの Kafka ノードと、pool-zone-2の 4 つの Kafka ノードが表示されますCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.11. Kafka ノードプールを使用するための既存の Kafka クラスターの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、既存の Kafka クラスターを移行して Kafka ノードプールを使用する方法について説明します。Kafka クラスターを更新した後、ノードプールを使用して各プール内のノードの設定を管理できます。
現在、KafkaNodePool リソースのレプリカとストレージ設定は Kafka リソースにも存在する必要があります。ノードプールが使用されている場合、設定は無視されます。
手順
新しい
KafkaNodePoolリソースを作成します。-
リソースに
kafkaという名前を付けます。 -
strimzi.io/clusterラベルが既存のKafkaリソースを指すようにします。 - 現在の Kafka クラスターと一致するようにレプリカ数とストレージ設定を設定します。
-
ロールを
Brokerに設定します。
Kafka クラスターの移行で使用されるノードプールの設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告クラスターデータとそのノードおよびリソースの名前を保持するには、ノードプール名を
Kafkaにし、strimzi.io/clusterラベルを Kafka リソース名と一致させる必要があります。それ以外の場合、ノードとリソースは、ノードによって使用される永続ボリュームストレージを含めて、新しい名前で作成されます。そのため、以前のデータが利用できなくなる可能性があります。-
リソースに
KafkaNodePoolリソースを適用します。oc apply -f <node_pool_configuration_file>
oc apply -f <node_pool_configuration_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このリソースを適用すると、Kafka がノードプールの使用に切り替わります。
変更やローリングアップデートはなく、リソースは以前と同じです。
strimzi.io/node-pools: enabledアノテーションを使用して、Kafkaリソース内のノードプールのサポートを有効にします。ZooKeeper を使用したクラスター内のノードプールの設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafkaリソースを適用します。oc apply -f <kafka_configuration_file>
oc apply -f <kafka_configuration_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更やローリング更新はありません。リソースは、以前と同じままです。
-
Kafkaカスタムリソースから複製されたプロパティーを削除します。KafkaNodePoolリソースが使用されている場合、.spec.kafka.replicasプロパティーや.spec.kafka.storageプロパティーなど、KafkaNodePoolリソースにコピーしたプロパティーを削除できます。
移行の取り消し
Kafka カスタムリソースのみを使用して Kafka ノードを管理するように戻すには以下を実行します。
-
複数のノードプールがある場合は、ノード ID が 0 から N に、
kafkaという名前の単一のKafkaNodePoolに連結します(N はレプリカの数です)。 -
Kafkaリソースの.spec.kafka設定が、ストレージ、リソース、レプリカを含むKafkaNodePool設定と一致していることを確認します。 -
strimzi.io/node-pools: disabledアノテーションを使用して、Kafkaリソース内のノードプールのサポートを無効にします。 -
kafkaという名前の Kafka ノードプールを削除します。