9.3. 노드 풀 구성


KafkaNodePool 사용자 정의 리소스의 spec 속성을 업데이트하여 노드 풀 배포를 구성합니다.

노드 풀은 Kafka 클러스터 내의 별도의 Kafka 노드 그룹을 나타냅니다. 각 풀에는 복제본, 역할 및 스토리지 할당 수에 대한 필수 설정이 포함된 고유한 구성이 있습니다.

선택적으로 다음 속성의 값을 지정할 수도 있습니다.

  • 메모리 및 cpu 요청 및 제한을 지정하는 리소스
  • Pod 및 기타 OpenShift 리소스에 대한 사용자 정의 구성을 지정하는 템플릿
  • 힙 크기, 런타임 및 기타 옵션에 대한 사용자 정의 JVM 구성을 지정하는 jvmOptions

Kafka 리소스는 Kafka 클러스터의 모든 노드에 대한 구성을 나타냅니다. KafkaNodePool 리소스는 노드 풀에서만 노드의 구성을 나타냅니다. 구성 속성이 KafkaNodePool 에 지정되지 않은 경우 Kafka 리소스에서 상속됩니다. 두 리소스에 모두 설정된 경우 KafkaNodePool 리소스에 지정된 구성이 우선합니다. 예를 들어 노드 풀과 Kafka 구성에 모두 jvmOptions 가 포함된 경우 노드 풀 구성에 지정된 값이 사용됩니다. -Xmx: 1024mKafkaNodePool.spec.jvmOptions-Xms: 512m 에 설정된 경우 Kafka.spec.kafka.jvmOptions 에서 노드는 노드 풀 구성의 값을 사용합니다.

KafkaKafkaNodePool 스키마의 속성은 결합되지 않습니다. 명확히 하기 위해 KafkaNodePool.spec.templatepodSet.metadata.labels 만 포함되어 있고 Kafka.spec.kafka.templatepodSet.metadata.annotationspod.metadata.labels 가 포함된 경우 노드 풀 구성에 템플릿 값이 있기 때문에 Kafka 구성의 템플릿 값이 무시됩니다.

노드 풀 구성 옵션을 자세히 이해하려면 AMQ Streams 사용자 정의 리소스 API 참조를 참조하십시오.

KRaft 모드를 사용하는 클러스터의 노드 풀 구성 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: kraft-dual-role 
1

  labels:
    strimzi.io/cluster: my-cluster 
2

spec:
  replicas: 3 
3

  roles: 
4

    - controller
    - broker
  storage: 
5

    type: jbod
    volumes:
      - id: 0
        type: persistent-claim
        size: 100Gi
        deleteClaim: false
  resources: 
6

      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
Copy to Clipboard Toggle word wrap

1
노드 풀의 고유 이름입니다.
2
노드 풀이 속한 Kafka 클러스터입니다. 노드 풀은 단일 클러스터에만 속할 수 있습니다.
3
노드의 복제본 수입니다.
4
노드 풀의 노드 역할. 이 예에서 노드에는 컨트롤러 및 브로커로서의 이중 역할이 있습니다.
5
노드의 스토리지 사양입니다.
6
지원되는 리소스(현재 cpumemory ) 예약 요청 및 사용할 수 있는 최대 리소스를 지정합니다.
참고

Kafka 리소스의 구성은 KRaft 모드에 적합해야 합니다. 현재 KRaft 모드에 는 여러 가지 제한 사항이 있습니다.

Zoo Cryostat를 사용하여 클러스터의 노드 풀 구성 예

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
  name: pool-a
  labels:
    strimzi.io/cluster: my-cluster
spec:
  replicas: 3
  roles:
    - broker 
1

  storage:
    type: jbod
    volumes:
      - id: 0
        type: persistent-claim
        size: 100Gi
        deleteClaim: false
  resources:
      requests:
        memory: 64Gi
        cpu: "8"
      limits:
        memory: 64Gi
        cpu: "12"
Copy to Clipboard Toggle word wrap

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가 부족하거나 축소 범위가 사용 중인 노드에 적용되지 않는 경우에도 적용됩니다.

사전 요구 사항

기본적으로 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
  # ...
Copy to Clipboard Toggle word wrap

프로세스

  1. 다음 예와 같이 확장 또는 축소할 때 사용할 ID로 노드 풀에 주석을 답니다.

    확장의 ID는 노드 풀 pool-a 에 할당됩니다.

    확장에 ID 할당

    oc annotate kafkanodepool pool-a strimzi.io/next-node-ids="[0,1,2,10-20,30]"
    Copy to Clipboard Toggle word wrap

    이 범위에서 사용 가능한 가장 낮은 ID는 pool-a 에 노드를 추가할 때 사용됩니다.

    축소할 ID는 노드 풀 pool-b 에 할당됩니다.

    축소를 위한 ID 할당

    oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[60-50,9,8,7]"
    Copy to Clipboard Toggle word wrap

    pool-b 를 축소할 때 이 범위에서 사용 가능한 가장 높은 ID가 제거됩니다.

    참고

    특정 노드를 제거하려면 축소 주석에 단일 노드 ID를 할당할 수 있습니다. oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids="[3]".

  2. 이제 노드 풀을 확장할 수 있습니다.

    자세한 내용은 다음을 참조하십시오.

    조정 시 주석이 잘못 포맷되면 경고가 표시됩니다.

  3. 확장 작업을 수행한 후 더 이상 필요하지 않은 경우 주석을 제거할 수 있습니다.

    확장을 위한 주석 제거

    oc annotate kafkanodepool pool-a strimzi.io/next-node-ids-
    Copy to Clipboard Toggle word wrap

    축소할 주석 제거

    oc annotate kafkanodepool pool-b strimzi.io/remove-node-ids-
    Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

노드 ID는 생성 시 노드 이름에 추가됩니다. 노드 ID가 3my-cluster-pool-a-3 노드를 추가합니다.

참고

이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.

사전 요구 사항

프로세스

  1. 노드 풀에 새 노드를 생성합니다.

    예를 들어 노드 풀 pool-a 에는 세 개의 복제본이 있습니다. 복제본 수를 늘려 노드를 추가합니다.

    oc scale kafkanodepool pool-a --replicas=4
    Copy to Clipboard Toggle word wrap
  2. 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    출력에 노드 풀의 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
    Copy to Clipboard Toggle word wrap

  3. 노드 풀의 노드 수를 늘린 후 파티션을 다시 할당합니다.

    노드 풀을 확장한 후 Cruise Control add-brokers 모드를 사용하여 기존 브로커에서 새로 추가된 브로커로 파티션 복제본을 이동합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: add-brokers
      brokers: [3]
    Copy to Clipboard Toggle word wrap

    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
Copy to Clipboard Toggle word wrap

노드 ID는 생성 시 노드 이름에 추가됩니다. 노드 ID가 3my-cluster-pool-a-3 노드를 삭제합니다.

참고

이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.

사전 요구 사항

프로세스

  1. 노드 풀의 노드 수를 줄이기 전에 파티션을 다시 할당합니다.

    노드 풀을 축소하기 전에 Cruise Control remove-brokers 모드를 사용하여 제거할 브로커에서 파티션 복제본을 이동합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: remove-brokers
      brokers: [3]
    Copy to Clipboard Toggle word wrap

    my-cluster-pool-a-3 노드에서 파티션을 다시 할당합니다. 재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

  2. 재할당 프로세스가 완료되고 제거 중인 노드에 실시간 파티션이 없으면 노드 풀의 Kafka 노드 수를 줄입니다.

    예를 들어 노드 풀 pool-a 에는 4개의 복제본이 있습니다. 복제본 수를 줄여 노드를 제거합니다.

    oc scale kafkanodepool pool-a --replicas=3
    Copy to Clipboard Toggle word wrap

    출력에 노드 풀의 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
    Copy to Clipboard Toggle word wrap

9.3.5. 노드 풀 간에 노드 이동

다음 절차에서는 다운타임 없이 소스와 대상 Kafka 노드 풀 간에 노드를 이동하는 방법을 설명합니다. 대상 노드 풀에 새 노드를 생성하고 파티션을 다시 할당하여 소스 노드 풀의 이전 노드에서 데이터를 이동합니다. 새 노드의 복제본이 동기화되면 이전 노드를 삭제할 수 있습니다.

이 절차에서는 두 개의 노드 풀로 시작합니다.

  • pool-a (복제 3개)는 대상 노드 풀입니다.
  • pool-b 에 4개의 복제본이 있는 것은 소스 노드 풀입니다.

을 확장하고 파티션을 다시 할당하고 pool-b 를 축소하면 다음이 생성됩니다.

  • pool-a 및 4개의 복제본
  • pool-b 및 세 개의 복제본
참고

이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.

사전 요구 사항

프로세스

  1. 대상 노드 풀에 새 노드를 생성합니다.

    예를 들어 노드 풀 pool-a 에는 세 개의 복제본이 있습니다. 복제본 수를 늘려 노드를 추가합니다.

    oc scale kafkanodepool pool-a --replicas=4
    Copy to Clipboard Toggle word wrap
  2. 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    출력에는 소스 및 대상 노드 풀의 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-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
    Copy to Clipboard Toggle word wrap

    노드 ID는 생성 시 노드 이름에 추가됩니다. 노드 ID가 7my-cluster-pool-a-7 노드를 추가합니다.

  3. 이전 노드의 파티션을 새 노드에 다시 할당합니다.

    소스 노드 풀을 축소하기 전에 Cruise Control remove-brokers 모드를 사용하여 제거할 브로커에서 파티션 복제본을 이동합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: remove-brokers
      brokers: [6]
    Copy to Clipboard Toggle word wrap

    my-cluster-pool-b-6 노드에서 파티션을 다시 할당합니다. 재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

  4. 재할당 프로세스가 완료되면 소스 노드 풀의 Kafka 노드 수를 줄입니다.

    예를 들어 노드 풀 pool-b 에는 4개의 복제본이 있습니다. 복제본 수를 줄여 노드를 제거합니다.

    oc scale kafkanodepool pool-b --replicas=3
    Copy to Clipboard Toggle word wrap

    풀 내에서 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
    Copy to Clipboard Toggle word wrap

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 클러스터에서 컨트롤러 및 브로커 역할이 결합된 노드 풀을 사용하는 경우 별도의 역할이 있는 두 개의 노드 풀을 사용하여 전환할 수 있습니다. 이렇게 하려면 브로커 전용 역할이 있는 노드 풀로 파티션 복제본을 이동하도록 클러스터를 재조정한 다음 이전 노드 풀을 컨트롤러 전용 역할로 전환합니다.

이 절차에서는 controllerbroker 역할이 있는 노드 풀 풀(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
  # ...
Copy to Clipboard Toggle word wrap

노드 풀에는 세 개의 노드가 있습니다.

노드 풀의 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
Copy to Clipboard Toggle word wrap

각 노드는 브로커 및 컨트롤러의 결합된 역할을 수행합니다. 브로커로만 작동하는 노드 3개를 사용하여 pool-b 라는 두 번째 노드 풀을 생성합니다.

참고

이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.

프로세스

  1. 브로커 역할을 사용하여 노드 풀을 생성합니다.

    노드 풀 구성의 예

    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
      # ...
    Copy to Clipboard Toggle word wrap

    새 노드 풀에는 세 개의 노드도 있습니다. 브로커 전용 노드 풀이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.

  2. KafkaNodePool 리소스를 적용하여 브로커를 생성합니다.
  3. 배포 상태를 확인하고 노드 풀의 포드가 생성되고 준비될 때까지 기다립니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    출력에서 두 노드 풀에서 실행 중인 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
    Copy to Clipboard Toggle word wrap

    노드 ID는 생성 시 노드 이름에 추가됩니다.

  4. Cruise Control remove-brokers 모드를 사용하여 이중 역할 노드에서 새로 추가된 브로커에 파티션 복제본을 다시 할당합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: remove-brokers
      brokers: [0, 1, 2]
    Copy to Clipboard Toggle word wrap

    재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

    참고

    노드가 컨트롤러 전용 역할로 변경되면 파티션이 할당되지 않습니다. Kafka 리소스의 status.conditions 는 변경을 방지하는 이벤트에 대한 세부 정보를 제공합니다.

  5. 원래 결합된 역할이 있는 노드 풀에서 브로커 역할을 제거합니다.

    컨트롤러로 전환된 듀얼 역할 노드

    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
      # ...
    Copy to Clipboard Toggle word wrap

  6. 노드 풀이 컨트롤러 전용 역할로 전환되도록 구성 변경을 적용합니다.

9.3.8. 이중 역할 노드로 전환

다음 절차에서는 broker-only 및 controller-only 역할이 있는 별도의 노드 풀에서 듀얼 역할 노드 풀을 사용하는 방법을 설명합니다. Kafka 클러스터에서 전용 컨트롤러 및 브로커 노드가 있는 노드 풀을 사용하는 경우 두 역할이 모두 있는 단일 노드 풀을 사용하도록 전환할 수 있습니다. 이렇게 하려면 controller 전용 노드 풀에 broker 역할을 추가하고 파티션 복제본을 듀얼 역할 노드 풀로 이동한 다음 이전 브로커 전용 노드 풀을 삭제하도록 클러스터를 재조정합니다.

이 절차에서는 브로커 역할만 있는 controller 역할과 pool-b 만 있는 두 개의 노드 풀 풀(a )으로 시작합니다.

단일 역할 노드 풀

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
  # ...
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

pool-a 노드는 controller 역할을 수행합니다. pool-b 노드는 브로커 역할을 수행합니다.

참고

이 프로세스 중에 파티션 복제본이 있는 노드의 ID가 변경됩니다. 노드 ID를 참조하는 종속 항목을 고려하십시오.

프로세스

  1. 노드 풀 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
      # ...
    Copy to Clipboard Toggle word wrap

  2. 상태를 확인하고 노드 풀의 포드가 재시작될 때까지 기다린 후 준비합니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    출력에서 두 노드 풀에서 실행 중인 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
    Copy to Clipboard Toggle word wrap

    노드 ID는 생성 시 노드 이름에 추가됩니다.

  3. Cruise Control remove-brokers 모드를 사용하여 브로커 전용 노드에서 듀얼 역할 노드에 파티션 복제본을 다시 할당합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: remove-brokers
      brokers: [3, 4, 5]
    Copy to Clipboard Toggle word wrap

    재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

  4. 이전 브로커 전용 노드가 있는 pool-b 노드 풀을 제거합니다.

    oc delete kafkanodepool pool-b -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

9.3.9. 노드 풀을 사용하여 스토리지 관리

AMQ Streams의 스토리지 관리는 일반적으로 간단하며 설정할 때 거의 변경되지 않아도 되지만 스토리지 구성을 수정해야 하는 상황이 있을 수 있습니다. 노드 풀은 새 스토리지 요구 사항을 지정하는 별도의 노드 풀을 설정할 수 있으므로 이 프로세스를 단순화합니다.

이 절차에서는 세 개의 노드가 포함된 pool-a 노드 풀의 스토리지를 생성하고 관리합니다. 사용하는 영구 스토리지 유형을 정의하는 스토리지 클래스(volume.class)를 변경하는 방법을 보여줍니다. 동일한 단계를 사용하여 스토리지 크기(volume.size )를 변경할 수 있습니다.

참고

블록 스토리지를 사용하는 것이 좋습니다. AMQ Streams는 블록 스토리지에서만 사용할 수 있도록 테스트되었습니다.

사전 요구 사항

프로세스

  1. 자체 스토리지 설정으로 노드 풀을 생성합니다.

    예를 들어 노드 풀은 영구 볼륨에서 JBOD 스토리지를 사용합니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: pool-a
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      replicas: 3
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 500Gi
            class: gp2-ebs
      # ...
    Copy to Clipboard Toggle word wrap

    pool-a 의 노드는 Amazon EBS (Elastic Block Store) GP2 볼륨을 사용하도록 구성되어 있습니다.

  2. pool-a 에 대한 노드 풀 구성을 적용합니다.
  3. 배포 상태를 확인하고 pool-a 의 포드가 생성되고 준비될 때까지 기다립니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    출력에 노드 풀의 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
    Copy to Clipboard Toggle word wrap

  4. 새 스토리지 클래스로 마이그레이션하려면 필요한 스토리지 구성을 사용하여 새 노드 풀을 생성합니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: pool-b
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      roles:
        - broker
      replicas: 3
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 1Ti
            class: gp3-ebs
      # ...
    Copy to Clipboard Toggle word wrap

    pool-b 의 노드는 Amazon EBS (Elastic Block Store) GP3 볼륨을 사용하도록 구성됩니다.

  5. pool-b 에 대한 노드 풀 구성을 적용합니다.
  6. 배포 상태를 확인하고 pool-b 의 포드가 생성되고 준비될 때까지 기다립니다.
  7. pool-a 의 파티션을 pool-b 에 다시 할당합니다.

    새 스토리지 구성으로 마이그레이션할 때 Cruise Control remove-brokers 모드를 사용하여 제거하려는 브로커에서 파티션 복제본을 이동합니다.

    Cruise Control을 사용하여 파티션 복제본 재할당

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      # ...
    spec:
      mode: remove-brokers
      brokers: [0, 1, 2]
    Copy to Clipboard Toggle word wrap

    pool-a 에서 파티션을 다시 할당합니다. 재할당은 클러스터의 주제 및 파티션 수에 따라 다소 시간이 걸릴 수 있습니다.

  8. 재할당 프로세스가 완료되면 이전 노드 풀을 삭제합니다.

    oc delete kafkanodepool pool-a
    Copy to Clipboard Toggle word wrap

9.3.10. 노드 풀을 사용하여 스토리지 유사성 관리

로컬 영구 볼륨과 같은 스토리지 리소스가 특정 작업자 노드 또는 가용성 영역으로 제한되는 경우 스토리지 선호도를 구성하면 올바른 노드를 사용하도록 Pod를 예약하는 데 도움이 됩니다.

노드 풀을 사용하면 선호도를 독립적으로 구성할 수 있습니다. 이 절차에서는 zone-1zone-2 의 두 가용 영역에 대한 스토리지 선호도를 생성하고 관리합니다.

별도의 가용성 영역에 대해 노드 풀을 구성할 수 있지만 동일한 스토리지 클래스를 사용합니다. 각 영역에서 사용 가능한 스토리지 리소스를 나타내는 all-zones 영구 스토리지 클래스를 정의합니다.

또한 .spec.template.pod 속성을 사용하여 노드 유사성을 구성하고 zone-1zone-2 작업자 노드에서 Kafka Pod를 예약합니다.

스토리지 클래스 및 유사성은 각 가용성 영역의 노드를 나타내는 노드 풀에 지정됩니다.

  • pool-zone-1
  • pool-zone-2.

프로세스

  1. 각 가용성 영역에 사용할 스토리지 클래스를 정의합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: all-zones
    provisioner: kubernetes.io/my-storage
    parameters:
      type: ssd
    volumeBindingMode: WaitForFirstConsumer
    Copy to Clipboard Toggle word wrap
  2. all-zones 스토리지 클래스와 각 영역의 선호도를 지정하여 두 가용 영역을 나타내는 노드 풀을 생성합니다.

    zone-1의 노드 풀 구성

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: pool-zone-1
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      replicas: 3
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 500Gi
            class: all-zones
      template:
        pod:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                    - key: topology.kubernetes.io/zone
                      operator: In
                      values:
                      - zone-1
      # ...
    Copy to Clipboard Toggle word wrap

    zone-2에 대한 노드 풀 구성

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: pool-zone-2
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      replicas: 4
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 500Gi
            class: all-zones
      template:
        pod:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                    - key: topology.kubernetes.io/zone
                      operator: In
                      values:
                      - zone-2
      # ...
    Copy to Clipboard Toggle word wrap

  3. 노드 풀 구성을 적용합니다.
  4. 배포 상태를 확인하고 노드 풀의 Pod가 생성되고 준비될 때까지 기다립니다(1/1).

    oc get pods -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    output은 pool-zone-1 의 Kafka 노드 3개와 pool-zone-2의 Kafka 노드 4개를 보여줍니다.

    NAME                            READY  STATUS   RESTARTS
    my-cluster-pool-zone-1-kafka-0  1/1    Running  0
    my-cluster-pool-zone-1-kafka-1  1/1    Running  0
    my-cluster-pool-zone-1-kafka-2  1/1    Running  0
    my-cluster-pool-zone-2-kafka-3  1/1    Running  0
    my-cluster-pool-zone-2-kafka-4  1/1    Running  0
    my-cluster-pool-zone-2-kafka-5  1/1    Running  0
    my-cluster-pool-zone-2-kafka-6  1/1    Running  0
    Copy to Clipboard Toggle word wrap

9.3.11. Kafka 노드 풀을 사용하도록 기존 Kafka 클러스터 마이그레이션

다음 절차에서는 Kafka 노드 풀을 사용하도록 기존 Kafka 클러스터를 마이그레이션하는 방법을 설명합니다. Kafka 클러스터를 업데이트한 후 노드 풀을 사용하여 각 풀 내의 노드 구성을 관리할 수 있습니다.

참고

현재 KafkaNodePool 리소스의 복제본 및 스토리지 구성도 Kafka 리소스에 있어야 합니다. 노드 풀이 사용 중인 경우 구성이 무시됩니다.

프로세스

  1. KafkaNodePool 리소스를 생성합니다.

    1. 리소스 이름을 kafka 로 지정합니다.
    2. strimzi.io/cluster 레이블을 기존 Kafka 리소스를 지정합니다.
    3. 현재 Kafka 클러스터와 일치하도록 복제본 수 및 스토리지 구성을 설정합니다.
    4. 역할을 브로커로 설정합니다.

    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
    Copy to Clipboard Toggle word wrap

    주의

    클러스터 데이터와 해당 노드 및 리소스의 이름을 유지하려면 노드 풀 이름은 kafka 여야 하며 strimzi.io/cluster 레이블은 Kafka 리소스 이름과 일치합니다. 그렇지 않으면 노드에서 사용하는 영구 볼륨 스토리지를 포함하여 새 이름으로 노드 및 리소스가 생성됩니다. 따라서 이전 데이터를 사용할 수 없습니다.

  2. KafkaNodePool 리소스를 적용합니다.

    oc apply -f <node_pool_configuration_file>
    Copy to Clipboard Toggle word wrap

    이 리소스를 적용하면 노드 풀을 사용하여 Kafka를 로 전환합니다.

    변경 또는 롤링 업데이트가 없으며 리소스는 이전과 동일합니다.

  3. strimzi.io/node-pools: enabled 주석을 사용하여 Kafka 리소스에서 노드 풀에 대한 지원을 활성화합니다.

    Zoo Cryostat를 사용하여 클러스터의 노드 풀 구성 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      annotations:
        strimzi.io/node-pools: enabled
    spec:
      kafka:
        # ...
      zookeeper:
        # ...
    Copy to Clipboard Toggle word wrap

  4. Kafka 리소스를 적용합니다.

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap

    변경 또는 롤링 업데이트가 없습니다. 리소스는 이전과 동일하게 유지됩니다.

  5. Kafka 사용자 정의 리소스에서 복제된 속성을 제거합니다. KafkaNodePool 리소스를 사용 중인 경우 .spec.kafka.replicas.spec.kafka.storage 속성과 같이 KafkaNodePool 리소스에 복사한 속성을 제거할 수 있습니다.

마이그레이션 전환

Kafka 사용자 정의 리소스만 사용하여 Kafka 노드를 관리하려면 다음을 수행합니다.

  1. 노드 풀이 여러 개인 경우 노드 ID가 0에서 N(여기서 N은 복제본 수)을 사용하여 kafka 라는 단일 KafkaNodePool 에 통합합니다.
  2. Kafka 리소스의 .spec.kafka 구성이 스토리지, 리소스 및 복제본을 포함하여 KafkaNodePool 구성과 일치하는지 확인합니다.
  3. strimzi.io/node-pools: disabled 주석을 사용하여 Kafka 리소스에서 노드 풀에 대한 지원을 비활성화합니다.
  4. kafka 라는 Kafka 노드 풀을 삭제합니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat