34.2. 삭제된 Kafka 클러스터 복구


다음 절차에서는 원래 PVC( PersistentVolumeClaim ) 리소스를 다시 생성하여 PV(영구 볼륨)에서 삭제된 Kafka 클러스터를 복구하는 방법을 설명합니다.

Topic Operator 및 User Operator가 배포된 경우 KafkaTopicKafkaUser 리소스를 다시 생성하여 복구할 수 있습니다. 동일한 구성으로 KafkaTopic 리소스를 재생성하거나 Topic Operator가 Kafka에서 업데이트를 시도하는 것이 중요합니다. 다음 절차에서는 두 리소스를 모두 다시 생성하는 방법을 보여줍니다.

주의

User Operator가 활성화되어 있고 Kafka 사용자가 다시 생성되지 않으면 복구 후 즉시 Kafka 클러스터에서 삭제됩니다.

사전 준비 사항

이 절차에서는 데이터 손상을 방지하려면 PV를 올바른 PVC에 마운트해야 합니다. volumeName 은 PVC에 지정되어 있으며 PV의 이름과 일치해야 합니다.

자세한 내용은 10.4절. “Kafka 스토리지 구성”의 내용을 참조하십시오.

프로세스

  1. 클러스터의 PV에 대한 정보를 확인합니다.

    oc get pv

    데이터가 있는 PV에 대한 정보가 제공됩니다.

    PV 출력 예

    NAME                                          RECLAIMPOLICY  CLAIM
    pvc-5e9c5c7f-3317-11ea-a650-06e1eadd9a4c ...  Retain ...     myproject/data-0-my-cluster-broker-0
    pvc-5e9cc72d-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-0-my-cluster-broker-1
    pvc-5ead43d1-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-0-my-cluster-broker-2
    pvc-7e1f67f9-3317-11ea-a650-06e1eadd9a4c ...  Retain ...     myproject/data-0-my-cluster-controller-3
    pvc-7e21042e-3317-11ea-9786-02deaf9aa87e ...  Retain ...     myproject/data-0-my-cluster-controller-4
    pvc-7e226978-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-0-my-cluster-controller-5

    • NAME 은 각 PV의 이름입니다.
    • RECLAIMPOLICY 는 PV가 유지되므로 PVC가 삭제될 때 PV가 자동으로 삭제되지 않습니다.
    • CLAIM 은 원래 PVC에 대한 링크를 보여줍니다.
  2. 원래 네임스페이스를 다시 생성합니다.

    oc create namespace myproject

    여기에서 myproject 네임스페이스를 다시 생성합니다.

  3. 원래 PVC 리소스 사양을 다시 생성하여 PVC를 적절한 PV에 연결합니다.

    PVC 리소스 사양의 예

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: data-0-my-cluster-broker-0
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: gp2-retain
      volumeMode: Filesystem
      volumeName: pvc-7e1f67f9-3317-11ea-a650-06e1eadd9a4c

  4. PV 사양을 편집하여 원래 PVC를 바인딩된 claimRef 속성을 삭제합니다.

    PV 사양의 예

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        kubernetes.io/createdby: aws-ebs-dynamic-provisioner
        pv.kubernetes.io/bound-by-controller: "yes"
        pv.kubernetes.io/provisioned-by: kubernetes.io/aws-ebs
      creationTimestamp: "<date>"
      finalizers:
      - kubernetes.io/pv-protection
      labels:
        failure-domain.beta.kubernetes.io/region: eu-west-1
        failure-domain.beta.kubernetes.io/zone: eu-west-1c
      name: pvc-5ead43d1-3317-11ea-97b0-0aef8816c7ea
      resourceVersion: "39431"
      selfLink: /api/v1/persistentvolumes/pvc-7e226978-3317-11ea-97b0-0aef8816c7ea
      uid: 7efe6b0d-3317-11ea-a650-06e1eadd9a4c
    spec:
      accessModes:
      - ReadWriteOnce
      awsElasticBlockStore:
        fsType: xfs
        volumeID: aws://eu-west-1c/vol-09db3141656d1c258
      capacity:
        storage: 100Gi
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        name: data-0-my-cluster-kafka-2
        namespace: myproject
        resourceVersion: "39113"
        uid: 54be1c60-3319-11ea-97b0-0aef8816c7ea
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: failure-domain.beta.kubernetes.io/zone
              operator: In
              values:
              - eu-west-1c
            - key: failure-domain.beta.kubernetes.io/region
              operator: In
              values:
              - eu-west-1
      persistentVolumeReclaimPolicy: Retain
      storageClassName: gp2-retain
      volumeMode: Filesystem

    이 예제에서는 다음 속성이 삭제됩니다.

    claimRef:
      apiVersion: v1
      kind: PersistentVolumeClaim
      name: data-0-my-cluster-broker-2
      namespace: myproject
      resourceVersion: "39113"
      uid: 54be1c60-3319-11ea-97b0-0aef8816c7ea
  5. Cluster Operator를 배포합니다.

    oc create -f install/cluster-operator -n myproject
  6. KafkaTopic 리소스 구성을 적용하여 모든 KafkaTopic 리소스를 다시 생성합니다.

    oc apply -f <topic_configuration_file> -n myproject
  7. 모든 KafkaUser 리소스를 다시 생성합니다.

    1. 사용자 암호 및 인증서를 유지해야 하는 경우 KafkaUser 리소스를 다시 생성하기 전에 사용자 시크릿을 다시 생성합니다.

      보안이 다시 생성되지 않으면 User Operator에서 새 인증 정보를 자동으로 생성합니다. 다시 생성한 보안의 이름, 레이블 및 필드가 원래 보안과 정확히 같은지 확인합니다.

    2. KafkaUser 리소스 구성을 적용합니다.

      oc apply -f <user_configuration_file> -n myproject
  8. Kafka 리소스의 원래 구성을 사용하여 Kafka 클러스터를 배포합니다. Kafka 리소스의 원래 구성에 strimzi.io/pause-reconciliation="true" 주석을 추가한 다음 업데이트된 구성을 사용하여 Kafka 클러스터를 배포합니다.

    oc apply -f <kafka_resource_configuration>.yaml -n myproject
  9. Kafka 사용자 정의 리소스의 로그 또는 사본에서 원래 clusterId 를 복구합니다. 그렇지 않으면 임시 Pod를 구동하여 볼륨 중 하나에서 검색할 수 있습니다.

    PVC_NAME="data-0-my-cluster-kafka-0"
    COMMAND="grep cluster.id /disk/kafka-log*/meta.properties | awk -F'=' '{print \$2}'"
    oc run tmp -itq --rm --restart "Never" --image "foo" --overrides "{\"spec\":
      {\"containers\":[{\"name\":\"busybox\",\"image\":\"busybox\",\"command\":[\"/bin/sh\",
      \"-c\",\"$COMMAND\"],\"volumeMounts\":[{\"name\":\"disk\",\"mountPath\":\"/disk\"}]}],
      \"volumes\":[{\"name\":\"disk\",\"persistentVolumeClaim\":{\"claimName\":
      \"$PVC_NAME\"}}]}}" -n myproject
  10. Kafka 리소스를 편집하여 복구된 값으로 .status.clusterId 를 설정합니다.

    oc edit kafka <cluster-name> --subresource status -n myproject
  11. Kafka 리소스 조정 일시 중지를 해제합니다.

    oc annotate kafka my-cluster strimzi.io/pause-reconciliation=false \
      --overwrite -n myproject
  12. KafkaTopic 리소스의 복구를 확인합니다.

    oc get kafkatopics -o wide -w -n myproject

    Kafka 주제 상태

    NAME         CLUSTER     PARTITIONS  REPLICATION FACTOR READY
    my-topic-1   my-cluster  10          3                  True
    my-topic-2   my-cluster  10          3                  True
    my-topic-3   my-cluster  10          3                  True

    READY 출력에 True 가 표시되면 KafkaTopic 사용자 정의 리소스 생성이 성공적으로 수행됩니다.

  13. KafkaUser 리소스의 복구를 확인합니다.

    oc get kafkausers -o wide -w -n myproject

    Kafka 사용자 상태

    NAME       CLUSTER     AUTHENTICATION  AUTHORIZATION READY
    my-user-1  my-cluster  tls             simple        True
    my-user-2  my-cluster  tls             simple        True
    my-user-3  my-cluster  tls             simple        True

    READY 출력에 True 가 표시되면 KafkaUser 사용자 정의 리소스 생성이 성공적으로 생성됩니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동