9.3. 노드 풀 구성
KafkaNodePool 사용자 정의 리소스의 spec 속성을 업데이트하여 노드 풀 배포를 구성합니다.
노드 풀은 Kafka 클러스터 내의 별도의 Kafka 노드 그룹을 나타냅니다. 각 풀에는 복제본, 역할 및 스토리지 할당 수에 대한 필수 설정이 포함된 고유한 구성이 있습니다.
선택적으로 다음 속성의 값을 지정할 수도 있습니다.
-
메모리 및 cpu 요청 및 제한을 지정하는
리소스 -
Pod 및 기타 OpenShift 리소스에 대한 사용자 정의 구성을 지정하는
템플릿 -
힙 크기, 런타임 및 기타 옵션에 대한 사용자 정의 JVM 구성을 지정하는
jvmOptions
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 구성의 템플릿 값이 무시됩니다.
노드 풀 구성 옵션을 자세히 이해하려면 AMQ Streams 사용자 정의 리소스 API 참조를 참조하십시오.
KRaft 모드를 사용하는 클러스터의 노드 풀 구성 예
Kafka 리소스의 구성은 KRaft 모드에 적합해야 합니다. 현재 KRaft 모드에 는 여러 가지 제한 사항이 있습니다.
Zoo Cryostat를 사용하여 클러스터의 노드 풀 구성 예
- 1
- 노드 풀의 노드에 대한 역할로, Zoo Cryostat와 함께 Kafka를 사용할 때만
브로커일 수 있습니다.
9.3.1. 확장 작업을 위해 노드 풀에 ID 할당 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 노드 풀에서 스케일링 작업을 수행할 때 Cluster Operator에서 고급 노드 ID 처리에 주석을 사용하는 방법을 설명합니다. 다음 ID를 사용하여 Cluster Operator 대신 사용할 노드 ID를 지정합니다. 이러한 방식으로 노드 ID를 관리하면 제어가 향상됩니다.
ID 범위를 추가하려면 KafkaNodePool 리소스에 다음 주석을 할당합니다.
-
Strimzi.io/next-node-ids는 새 브로커에 사용되는 다양한 ID를 추가합니다. -
Strimzi.io/remove-node-ids: 기존 브로커를 제거하기 위한 ID 범위 추가
개별 노드 ID, ID 범위 또는 둘 다의 조합을 지정할 수 있습니다. 예를 들어 Kafka 노드 풀을 확장하기 위해 [0, 1, 2, 10-20, 30] 의 범위를 지정할 수 있습니다. 이 형식을 사용하면 개별 노드 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 범위를 지정할 수 있으므로 노드가 스케일링되는 순서대로 정의할 수 있습니다. 예를 들어 확장 시 [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 이 범위에서 사용 가능한 가장 낮은 ID는
pool-a에 노드를 추가할 때 사용됩니다.축소할 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 클러스터의 성능과 복원력에 영향을 미칠 수 있습니다.
랙에서 필요한 균형과 탄력성을 유지하기 위해 전략적으로 노드 제거를 계획합니다. strimzi.io/remove-node-ids 주석을 사용하여 특정 ID가 있는 노드를 주의해서 이동합니다. 랙에 파티션 복제본을 분배하고 가장 가까운 복제본에서 사용할 클라이언트가 손상되지 않도록 구성해야 합니다.
RackAwareGoal 과 함께 Cruise Control 및 KafkaRebalance 리소스를 사용하여 복제본을 다른 랙에 분산 상태로 유지합니다.
9.3.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에는 세 개의 복제본이 있습니다. 복제본 수를 늘려 노드를 추가합니다.oc scale kafkanodepool pool-a --replicas=4
oc scale kafkanodepool pool-a --replicas=4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(
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 출력에 노드 풀의 Kafka 노드 4개가 표시됩니다.
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. 노드 풀에서 노드 제거 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 노드 풀을 축소하여 노드를 제거하는 방법을 설명합니다. 현재 축소는 전용 브로커로 실행되는 노드를 포함하는 브로커 전용 노드 풀에만 가능합니다.
이 절차에서는 노드 풀 풀 의 경우 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-a에는 4개의 복제본이 있습니다. 복제본 수를 줄여 노드를 제거합니다.oc scale kafkanodepool pool-a --replicas=3
oc scale kafkanodepool pool-a --replicas=3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에 노드 풀의 Kafka 노드 3개가 표시되어 있습니다.
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 노드 풀 간에 노드를 이동하는 방법을 설명합니다. 대상 노드 풀에 새 노드를 생성하고 파티션을 다시 할당하여 소스 노드 풀의 이전 노드에서 데이터를 이동합니다. 새 노드의 복제본이 동기화되면 이전 노드를 삭제할 수 있습니다.
이 절차에서는 두 개의 노드 풀로 시작합니다.
-
pool-a(복제 3개)는 대상 노드 풀입니다. -
pool-b에 4개의 복제본이 있는 것은 소스 노드 풀입니다.
풀 을 확장하고 파티션을 다시 할당하고 pool-b 를 축소하면 다음이 생성됩니다.
-
pool-a및 4개의 복제본 -
pool-b및 세 개의 복제본
이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.
사전 요구 사항
- Cluster Operator를 배포해야 합니다.
- cruise Control은 Kafka와 함께 배포됩니다.
(선택 사항) 작업 확장 및 축소 의 경우 사용할 노드 ID 범위를 지정할 수 있습니다.
작업에 노드 ID를 할당한 경우 추가 또는 제거 중인 노드의 ID는 지정된 노드 순서에 따라 결정됩니다. 그렇지 않으면 클러스터에서 사용 가능한 최소 노드 ID가 사용되고 노드 풀에서 사용 가능한 ID가 가장 높은 노드가 제거됩니다.
프로세스
대상 노드 풀에 새 노드를 생성합니다.
예를 들어 노드 풀
pool-a에는 세 개의 복제본이 있습니다. 복제본 수를 늘려 노드를 추가합니다.oc scale kafkanodepool pool-a --replicas=4
oc scale kafkanodepool pool-a --replicas=4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(
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 출력에는 소스 및 대상 노드 풀의 Kafka 노드 4개가 표시됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 노드 ID는 생성 시 노드 이름에 추가됩니다. 노드 ID가
7인my-cluster-pool-a-7노드를 추가합니다.이전 노드의 파티션을 새 노드에 다시 할당합니다.
소스 노드 풀을 축소하기 전에 Cruise Control
remove-brokers모드를 사용하여 제거할 브로커에서 파티션 복제본을 이동합니다.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) 노드가 제거됩니다.
출력에 소스 노드 풀의 Kafka 노드 3개가 표시되어 있습니다.
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 클러스터( Kafka Raft 메타데이터 사용)와 함께 사용하거나 메타데이터 관리에 Zoo Cryostat를 사용할 수 있습니다. KRaft 모드를 사용하는 경우 노드 풀의 모든 노드가 브로커, 컨트롤러 또는 둘 다로 작동하도록 역할을 지정할 수 있습니다. Zoo Cryostat를 사용하는 경우 노드는 브로커로만 설정해야 합니다.
특정 상황에서는 노드 풀에 할당된 역할을 변경해야 할 수 있습니다. 예를 들어 이중 브로커 및 컨트롤러 역할을 수행하는 노드가 포함된 노드 풀이 있고 두 노드 풀 간에 역할을 분할하도록 결정할 수 있습니다. 이 경우 브로커로만 작동하는 노드를 사용하여 새 노드 풀을 생성한 다음 이중 역할 노드의 파티션을 새 브로커에 다시 할당합니다. 그런 다음 기존 노드 풀을 컨트롤러 전용 역할로 전환할 수 있습니다.
컨트롤러 전용 및 브로커 전용 역할이 있는 노드 풀에서 이중 브로커 및 컨트롤러 역할을 수행하는 노드가 포함된 노드 풀로 이동하여 역방향 작업을 수행할 수도 있습니다. 이 경우 기존 컨트롤러 전용 노드 풀에 broker 역할을 추가하고 브로커 전용 노드의 파티션을 듀얼 역할 노드에 다시 할당한 다음 broker-only 노드 풀을 삭제합니다.
노드 풀 구성에서 브로커 역할을 제거할 때 Kafka에서 파티션을 자동으로 다시 할당하지 않습니다. 브로커 역할을 제거하기 전에 노드가 컨트롤러 전용 역할로 변경해도 파티션이 할당되지 않았는지 확인합니다. 파티션이 할당되면 변경 사항이 발생하지 않습니다. 브로커 역할을 제거하기 전에 노드에 복제본이 남아 있지 않아야 합니다. 역할을 변경하기 전에 파티션을 다시 할당하는 가장 좋은 방법은 remove-brokers 모드에서 Cruise Control 최적화 제안을 적용하는 것입니다. 자세한 내용은 19.6절. “최적화 제안 생성”의 내용을 참조하십시오.
9.3.7. 별도의 브로커 및 컨트롤러 역할로 전환 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 별도의 역할이 있는 노드 풀 사용으로 전환하는 방법을 설명합니다. Kafka 클러스터에서 컨트롤러 및 브로커 역할이 결합된 노드 풀을 사용하는 경우 별도의 역할이 있는 두 개의 노드 풀을 사용하여 전환할 수 있습니다. 이렇게 하려면 브로커 전용 역할이 있는 노드 풀로 파티션 복제본을 이동하도록 클러스터를 재조정한 다음 이전 노드 풀을 컨트롤러 전용 역할로 전환합니다.
이 절차에서는 controller 및 broker 역할이 있는 노드 풀 풀(a )으로 시작합니다.
듀얼 역할 노드 풀
노드 풀에는 세 개의 노드가 있습니다.
노드 풀의 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
각 노드는 브로커 및 컨트롤러의 결합된 역할을 수행합니다. 브로커로만 작동하는 노드 3개를 사용하여 pool-b 라는 두 번째 노드 풀을 생성합니다.
이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.
프로세스
브로커역할을 사용하여 노드 풀을 생성합니다.노드 풀 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 노드 풀에는 세 개의 노드도 있습니다. 브로커 전용 노드 풀이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
-
새
KafkaNodePool리소스를 적용하여 브로커를 생성합니다. 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(
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 출력에서 두 노드 풀에서 실행 중인 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 재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.
참고노드가 컨트롤러 전용 역할로 변경되면 파티션이 할당되지 않습니다.
Kafka리소스의status.conditions는 변경을 방지하는 이벤트에 대한 세부 정보를 제공합니다.원래 결합된 역할이 있는 노드 풀에서
브로커역할을 제거합니다.컨트롤러로 전환된 듀얼 역할 노드
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 노드 풀이 컨트롤러 전용 역할로 전환되도록 구성 변경을 적용합니다.
9.3.8. 이중 역할 노드로 전환 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 broker-only 및 controller-only 역할이 있는 별도의 노드 풀에서 듀얼 역할 노드 풀을 사용하는 방법을 설명합니다. Kafka 클러스터에서 전용 컨트롤러 및 브로커 노드가 있는 노드 풀을 사용하는 경우 두 역할이 모두 있는 단일 노드 풀을 사용하도록 전환할 수 있습니다. 이렇게 하려면 controller 전용 노드 풀에 broker 역할을 추가하고 파티션 복제본을 듀얼 역할 노드 풀로 이동한 다음 이전 브로커 전용 노드 풀을 삭제하도록 클러스터를 재조정합니다.
이 절차에서는 브로커 역할만 있는 controller 역할과 )으로 시작합니다.
pool-b 만 있는 두 개의 노드 풀 풀(a
단일 역할 노드 풀
Kafka 클러스터에는 6개의 노드가 있습니다.
노드 풀의 Kafka 노드
pool-a 노드는 controller 역할을 수행합니다. pool-b 노드는 브로커 역할을 수행합니다.
이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.
프로세스
노드 풀
pool-a를 편집하고broker역할을 추가합니다.노드 풀 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 상태를 확인하고 노드 풀의 포드가 재시작될 때까지 기다린 후 준비합니다(
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 출력에서 두 노드 풀에서 실행 중인 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. 노드 풀을 사용하여 스토리지 관리 링크 복사링크가 클립보드에 복사되었습니다!
AMQ Streams의 스토리지 관리는 일반적으로 간단하며 설정할 때 거의 변경되지 않아도 되지만 스토리지 구성을 수정해야 하는 상황이 있을 수 있습니다. 노드 풀은 새 스토리지 요구 사항을 지정하는 별도의 노드 풀을 설정할 수 있으므로 이 프로세스를 단순화합니다.
이 절차에서는 세 개의 노드가 포함된 pool-a 노드 풀의 스토리지를 생성하고 관리합니다. 사용하는 영구 스토리지 유형을 정의하는 스토리지 클래스(volume.class)를 변경하는 방법을 보여줍니다. 동일한 단계를 사용하여 스토리지 크기(volume.size )를 변경할 수 있습니다.
블록 스토리지를 사용하는 것이 좋습니다. AMQ Streams는 블록 스토리지에서만 사용할 수 있도록 테스트되었습니다.
사전 요구 사항
- Cluster Operator를 배포해야 합니다.
- cruise Control은 Kafka와 함께 배포됩니다.
- 동적 볼륨 할당에 영구 볼륨 클레임을 사용하는 스토리지의 경우 필요한 스토리지 솔루션에 해당하는 OpenShift 클러스터에서 스토리지 클래스를 정의하고 사용할 수 있습니다.
프로세스
자체 스토리지 설정으로 노드 풀을 생성합니다.
예를 들어 노드
풀은 영구 볼륨에서JBOD 스토리지를 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow pool-a의 노드는 Amazon EBS (Elastic Block Store) GP2 볼륨을 사용하도록 구성되어 있습니다.-
pool-a에 대한 노드 풀 구성을 적용합니다. 배포 상태를 확인하고
pool-a의 포드가 생성되고 준비될 때까지 기다립니다(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 출력에 노드 풀의 Kafka 노드 3개가 표시되어 있습니다.
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의 포드가 생성되고 준비될 때까지 기다립니다. 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 의 두 가용 영역에 대한 스토리지 선호도를 생성하고 관리합니다.
별도의 가용성 영역에 대해 노드 풀을 구성할 수 있지만 동일한 스토리지 클래스를 사용합니다. 각 영역에서 사용 가능한 스토리지 리소스를 나타내는 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스토리지 클래스와 각 영역의 선호도를 지정하여 두 가용 영역을 나타내는 노드 풀을 생성합니다.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 output은
pool-zone-1의 Kafka 노드 3개와pool-zone-2의 Kafka 노드 4개를 보여줍니다.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 클러스터와 일치하도록 복제본 수 및 스토리지 구성을 설정합니다.
-
역할을
브로커로설정합니다.
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리소스에서 노드 풀에 대한 지원을 활성화합니다.Zoo Cryostat를 사용하여 클러스터의 노드 풀 구성 예
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(여기서 N은 복제본 수)을 사용하여
kafka라는 단일KafkaNodePool에 통합합니다. -
Kafka리소스의.spec.kafka구성이 스토리지, 리소스 및 복제본을 포함하여KafkaNodePool구성과 일치하는지 확인합니다. -
strimzi.io/node-pools: disabled주석을 사용하여Kafka리소스에서 노드 풀에 대한 지원을 비활성화합니다. -
kafka라는 Kafka 노드 풀을 삭제합니다.