10.4. ノードプールの設定
KafkaNodePool カスタムリソースの spec プロパティーを更新して、ノードプールデプロイメントを設定します。
ノードプールは、Kafka クラスター内の Kafka ノードの個別のグループを指します。各プールには独自の固有の設定があり、これにはレプリカの数、ロール、ストレージ割り当ての必須設定が含まれます。
オプションで、次のプロパティーの値を指定することもできます。
-
メモリーと CPU のリクエストと制限を指定する
resources -
Pod およびその他の OpenShift リソースのカスタム設定を指定する
template -
jvmOptions :ヒープサイズ、ランタイム、その他のオプションのカスタム JVM 設定を指定します。
Kafka と KafkaNodePool リソースの関係は次のとおりです。
-
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 モードを使用したクラスター内のノードプールの設定例
# Basic configuration (required)
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: kraft-dual-role
labels:
strimzi.io/cluster: my-cluster
# Node pool specifications
spec:
# Replicas (required)
replicas: 3
# Roles (required)
roles:
- controller
- broker
# Storage configuration (required)
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
# Resources requests and limits (recommended)
resources:
requests:
memory: 64Gi
cpu: "8"
limits:
memory: 64Gi
cpu: "12"
Kafka リソースの設定は、KRaft モードに適している必要があります。現在、KRaft モードには いくつかの制限 があります。
ZooKeeper を使用したクラスター内のノードプールの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: pool-a
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
resources:
requests:
memory: 64Gi
cpu: "8"
limits:
memory: 64Gi
cpu: "12"
- 1
- ノードプール内のノードのロール。ZooKeeper で Kafka を使用する場合にのみ
brokerでありえます。
10.4.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 番号の設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
config:
reserved.broker.max.id: 10000
# ...
手順
次の例に示すように、スケールアップまたはスケールダウン時に使用する ID でノードプールにアノテーションを付けます。
スケールアップ用の ID は、ノードプール
pool-aに割り当てられます。スケールアップ用の ID の割り当て
oc annotate kafkanodepool pool-a strimzi.io/next-node-ids="[0,1,2,10-20,30]"ノードを
pool-aに追加するときに、この範囲内で使用可能な最小の ID が使用されます。スケールダウン用の ID はノードプール
pool-bに割り当てられます。スケールダウン用の ID の割り当て
oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[60-50,9,8,7]"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-b strimzi.io/remove-node-ids-
10.4.2. ノードプールからノードを移動する場合のラックに与える影響 リンクのコピーリンクがクリップボードにコピーされました!
Kafka クラスターでラックアウェアネスが有効になっている場合、レプリカを異なるラック、データセンター、またはアベイラビリティーゾーンに分散できます。ノードプールからノードを移動する場合、特にラックアウェアネスに関して、クラスタートポロジーへの影響を考慮してください。特定の Pod をノードプールから削除すると (特に順序どおりに削除しない場合)、クラスタートポロジーが壊れたり、ラック間の分散に不均衡が生じたりする可能性があります。不均衡が発生すると、ノード自体の分散とクラスター内のパーティションレプリカの両方に影響を与える可能性があります。ラック間でのノードとパーティションで分散が不均一になると、Kafka クラスターのパフォーマンスと回復力に影響を与える可能性があります。
ラック全体で必要なバランスと復元力を維持するために、ノードの削除を戦略的に計画します。特定の ID を持つノードを慎重に移動するには、strimzi.io/remove-node-ids アノテーションを使用します。パーティションのレプリカをラック全体に分散して、クライアントが最も近隣にあるレプリカから消費できるように、設定が壊れていなことを確認します。
RackAwareGoal で Cruise Control と KafkaRebalance リソースを使用して、レプリカが異なるラックに分散していることを確認します。
10.4.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
ノード ID は、作成時にノードの名前に追加されます。ノード ID が 3 であるノード my-cluster-pool-a-3 を追加します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
-
(オプション) 自動リバランスが有効 になっている。
自動リバランスが有効になっている場合、ノードのスケーリングプロセス中にパーティションの再割り当てが自動的に実行されるため、Cruise Control を通じて手動で再割り当てを開始する必要はありません。 -
(オプション) スケールアップ操作の場合、操作で使用するノード ID を指定できます。
操作にノード ID の範囲を割り当てた場合、追加されるノードの ID は、指定されたノードの順序によって決まります。単一のノード ID を割り当てた場合は、指定した ID でノードが追加されます。それ以外の場合は、クラスター全体で使用可能な最小のノード ID が使用されます。
手順
ノードプールに新しいノードを作成します。
たとえば、ノードプール
pool-aには 3 つのレプリカがあります。レプリカの数を増やしてノードを追加します。oc scale kafkanodepool pool-a --replicas=4デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、ノードプール内の 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ノードプール内のノードの数を増やした後、パーティションを再割り当てします。
- 自動リバランスが有効になっている場合、パーティションは新しいノードに自動的に再割り当てされるため、この手順をスキップできます。
自動リバランスが有効になっていない場合は、Cruise Control の
add-brokersモードを使用して、パーティションレプリカを既存のブローカーから新しく追加されたブローカーに移動します。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: add-brokers brokers: [3]パーティションをノード
my-cluster-pool-a-3に再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
10.4.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
ノード ID は、作成時にノードの名前に追加されます。ノード ID が 3 であるノード my-cluster-pool-a-3 を削除します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
-
(オプション) 自動リバランスが有効 になっている。
自動リバランスが有効になっている場合、ノードのスケーリングプロセス中にパーティションの再割り当てが自動的に実行されるため、Cruise Control を通じて手動で再割り当てを開始する必要はありません。 -
(オプション) スケールダウン操作の場合、操作で使用するノード ID を指定できます。
操作にノード ID の範囲を割り当てた場合、削除されるノードの ID は、指定されたノードの順序によって決まります。単一のノード ID を割り当てた場合は、指定の ID が割り当てられたノードが削除されます。それ以外の場合は、ノードプール内で使用可能な ID が最も大きいノードが削除されます。
手順
ノードプール内のノードの数を減らす前に、パーティションを再割り当てします。
- 自動リバランスが有効になっている場合、パーティションは自動的に削除されるブローカーから移動されるため、この手順をスキップできます。
自動リバランスが有効になっていない場合は、Cruise Control の
remove-brokersモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: remove-brokers brokers: [3]ノード
my-cluster-pool-a-3からパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
再割り当てプロセスが完了し、削除されるノードにライブパーティションがなくなったら、ノードプール内の Kafka ノードの数を減らします。
たとえば、ノードプール
pool-aには 4 つのレプリカがあります。レプリカの数を減らしてノードを削除します。oc scale kafkanodepool pool-a --replicas=3出力には、ノードプール内の 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
10.4.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 とともにデプロイされている。
-
(オプション) 自動リバランスが有効 になっている。
自動リバランスが有効になっている場合、ノードのスケーリングプロセス中にパーティションの再割り当てが自動的に実行されるため、Cruise Control を通じて手動で再割り当てを開始する必要はありません。 -
(オプション) スケールアップおよびスケールダウン操作の場合は、使用するノード ID の範囲を指定できます。
操作にノード ID を割り当てた場合、追加または削除されるノードの ID は、指定されたノードの順序によって決まります。それ以外の場合は、ノードを追加するときにクラスター全体で使用可能な最小のノード ID が使用されます。そして、ノードプール内で使用可能な ID が最も大きいノードが削除されます。
手順
ターゲットノードプールに新しいノードを作成します。
たとえば、ノードプール
pool-aには 3 つのレプリカがあります。レプリカの数を増やしてノードを追加します。oc scale kafkanodepool pool-a --replicas=4デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、ソースノードプールとターゲットノードプール内の 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-4 1/1 Running 0 my-cluster-pool-a-7 1/1 Running 0 my-cluster-pool-b-2 1/1 Running 0 my-cluster-pool-b-3 1/1 Running 0 my-cluster-pool-b-5 1/1 Running 0 my-cluster-pool-b-6 1/1 Running 0ノード ID は、作成時にノードの名前に追加されます。ノード ID が
7であるノードmy-cluster-pool-a-7を追加します。自動リバランスが有効になっている場合、パーティションは新しいノードに再度割り当てられ、削除されるブローカーから自動的に移動されるため、次の手順をスキップできます。
自動リバランスが有効になっていない場合は、ソースノードプール内のノード数を減らす前にパーティションを再度割り当てます。
Cruise Control の
remove-brokersモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: remove-brokers brokers: [6]ノード
my-cluster-pool-b-6からパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。再割り当てプロセスが完了したら、ソースノードプール内の Kafka ノードの数を減らします。
たとえば、ノードプール
pool-bには 4 つのレプリカがあります。レプリカの数を減らしてノードを削除します。oc scale kafkanodepool pool-b --replicas=3プール内で最も数値の大きい 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
10.4.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 の最適化プロポーザルを適用することです。詳細は、「最適化プロポーザルの生成」 を参照してください。
10.4.7. 個別の broker ロールと controller ロールへの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、別のロールを持つノードプールを使用するように移行する方法を説明します。Kafka クラスターが controller ロールと broker ロールを組み合わせたノードプールを使用している場合は、別のロールを持つ 2 つのノードプールを使用するように移行できます。そのためには、クラスターをリバランスして、パーティションレプリカを broker 専用ロールを持つノードプールに移動してから、古いノードプールを controller 専用ロールに切り替えます。
この手順では、controller ロールと broker ロールを持つノードプール pool-a から始めます。
二重のロールを持つノードプール
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: pool-a
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- controller
- broker
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 20Gi
deleteClaim: false
# ...
ノードプールには 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
各ノードは、broker と controller を組み合わせたロールを実行します。ブローカーとしてのみ機能する 3 つのノードを含む、pool-b という 2 番目のノードプールを作成します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
手順
brokerロールを持つノードプールを作成します。ノードプール設定の例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-b labels: strimzi.io/cluster: my-cluster spec: replicas: 3 roles: - broker storage: type: jbod volumes: - id: 0 type: persistent-claim size: 100Gi deleteClaim: false # ...新しいノードプールにも 3 つのノードがあります。ブローカー専用ノードプールがすでにある場合は、この手順をスキップできます。
-
新しい
KafkaNodePoolリソースを適用してブローカーを作成します。 デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、2 つのノードプールで実行されている Pod が表示されます
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-b-3 1/1 Running 0 my-cluster-pool-b-4 1/1 Running 0 my-cluster-pool-b-5 1/1 Running 0ノード ID は、作成時にノードの名前に追加されます。
Cruise Control の
remove-brokersモードを使用して、二重のロールを持つノードから新しく追加されたブローカーにパーティションレプリカを再割り当てします。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: remove-brokers brokers: [0, 1, 2]クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
注記controller 専用のロールに変更するノードにパーティションが割り当てられている場合、変更は阻止されます。
Kafkaリソースのstatus.conditionsは、変更を妨げるイベントの詳細を提供します。元々ロールを組み合わせて有していたノードプールから
brokerロールを削除します。二重のロールを持つノードの controller への切り替え
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-a labels: strimzi.io/cluster: my-cluster spec: replicas: 3 roles: - controller storage: type: jbod volumes: - id: 0 type: persistent-claim size: 20Gi deleteClaim: false # ...- 設定変更を適用して、ノードプールを controller 専用ロールに切り替えます。
10.4.8. 二重のロールを持つノードへの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、broker 専用ロールと controller 専用ロールを持つ個別のノードプールから、二重のロールを持つノードプールの使用に移行する方法を説明します。Kafka クラスターが専用のコントローラーノードとブローカーノードを持つノードプールを使用している場合は、両方のロールを持つ単一のノードプールを使用するように移行できます。これを行うには、broker ロールをコントローラー専用ノードプールに追加し、クラスターをリバランスしてパーティションレプリカを二重のロールを持つノードプールに移動してから、古いブローカー専用ノードプールを削除します。
この手順では、controller ロールのみを持つ pool-a と、broker ロールのみを持つ pool-b の 2 つのノードプールから始めます。
単一ロールのノードプール
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: pool-a
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- controller
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
# ...
---
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: pool-b
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
# ...
Kafka クラスターには 6 つのノードがあります。
ノードプール内の 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-b-3 1/1 Running 0
my-cluster-pool-b-4 1/1 Running 0
my-cluster-pool-b-5 1/1 Running 0
pool-a ノードは controller のロールを実行します。pool-b ノードは broker のロールを実行します。
このプロセス中に、パーティションのレプリカを保持するノードの ID が変更されます。ノード ID を参照する依存関係を考慮してください。
手順
ノードプール
pool-aを編集し、それにbrokerロールを追加します。ノードプール設定の例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-a labels: strimzi.io/cluster: my-cluster spec: replicas: 3 roles: - controller - broker storage: type: jbod volumes: - id: 0 type: persistent-claim size: 100Gi deleteClaim: false # ...ステータスを確認し、ノードプール内の Pod が再起動して準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、2 つのノードプールで実行されている Pod が表示されます
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-b-3 1/1 Running 0 my-cluster-pool-b-4 1/1 Running 0 my-cluster-pool-b-5 1/1 Running 0ノード ID は、作成時にノードの名前に追加されます。
Cruise Control の
remove-brokersモードを使用して、ブローカー専用ノードから二重のロールを持つノードにパーティションレプリカを再割り当てします。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: remove-brokers brokers: [3, 4, 5]クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。
古いブローカー専用ノードが含まれる
pool-bノードプールを削除します。oc delete kafkanodepool pool-b -n <my_cluster_operator_namespace>
10.4.9. Kafka ノードプールを使用するための既存の Kafka クラスターの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、既存の Kafka クラスターを移行して Kafka ノードプールを使用する方法を説明します。Kafka クラスターを更新した後、ノードプールを使用して各プール内のノードの設定を管理できます。
現在、KafkaNodePool リソースのレプリカとストレージ設定は Kafka リソースにも存在する必要があります。ノードプールが使用されている場合、設定は無視されます。
手順
新しい
KafkaNodePoolリソースを作成します。-
リソースに
kafkaという名前を付けます。 -
strimzi.io/clusterラベルが既存のKafkaリソースを指すようにします。 - 現在の Kafka クラスターと一致するようにレプリカ数とストレージ設定を設定します。
-
ロールを
Brokerに設定します。
Kafka クラスターの移行で使用されるノードプールの設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: kafka labels: strimzi.io/cluster: my-cluster spec: replicas: 3 roles: - broker storage: type: jbod volumes: - id: 0 type: persistent-claim size: 100Gi deleteClaim: false警告クラスターデータとそのノードおよびリソースの名前を保持するには、ノードプール名を
kafkaにし、strimzi.io/clusterラベルを Kafka リソース名と一致させる必要があります。そうしないと、ノードとリソースは、ノードによって使用される永続ボリュームストレージを含めて、新しい名前で作成されます。そのため、以前のデータが利用できなくなる可能性があります。-
リソースに
KafkaNodePoolリソースを適用します。oc apply -f <node_pool_configuration_file>このリソースを適用すると、Kafka がノードプールの使用に切り替わります。
変更やローリングアップデートはなく、リソースは以前と同じです。
strimzi.io/node-pools: enabledアノテーションを使用して、Kafkaリソース内のノードプールのサポートを有効にします。ZooKeeper を使用したクラスター内のノードプールの設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster annotations: strimzi.io/node-pools: enabled spec: kafka: # ... zookeeper: # ...Kafkaリソースを適用します。oc apply -f <kafka_configuration_file>変更やローリング更新はありません。リソースは、以前と同じままです。
-
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 ノードプールを削除します。