32.2. 恢复已删除的 Kafka 集群


此流程描述了如何通过重新创建原始 PersistentVolumeClaim (PVC)资源从持久性卷(PV)恢复已删除的集群。

如果部署了 Topic Operator 和 User Operator,您可以通过重新创建 KafkaTopicKafkaUser 资源来恢复 KafkaTopic 和 KafkaUser 资源。务必要使用相同的配置重新创建 KafkaTopic 资源,否则 Topic Operator 会尝试在 Kafka 中更新这些资源。此流程演示了如何重新创建这两个资源。

警告

如果启用了 User Operator,并且 Kafka 用户没有重新创建,用户在恢复后立即从 Kafka 集群中删除。

开始前

在此过程中,PV 被挂载到正确的 PVC 中非常重要,以避免数据崩溃。为 PVC 指定 volumeName,它必须与 PV 的名称匹配。

如需更多信息,请参阅 持久性存储

流程

  1. 检查集群中 PV 的信息:

    oc get pv
    Copy to Clipboard Toggle word wrap

    会显示与数据相关的 PV 的信息。

    PV 输出示例

    NAME                                          RECLAIMPOLICY  CLAIM
    pvc-5e9c5c7f-3317-11ea-a650-06e1eadd9a4c ...  Retain ...     myproject/data-my-cluster-zookeeper-1
    pvc-5e9cc72d-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-my-cluster-zookeeper-0
    pvc-5ead43d1-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-my-cluster-zookeeper-2
    pvc-7e1f67f9-3317-11ea-a650-06e1eadd9a4c ...  Retain ...     myproject/data-0-my-cluster-kafka-0
    pvc-7e21042e-3317-11ea-9786-02deaf9aa87e ...  Retain ...     myproject/data-0-my-cluster-kafka-1
    pvc-7e226978-3317-11ea-97b0-0aef8816c7ea ...  Retain ...     myproject/data-0-my-cluster-kafka-2
    Copy to Clipboard Toggle word wrap

    • NAME 是每个 PV 的名称。
    • RECLAIMPOLICY 显示 PV 被保留,这意味着当 PVC 被删除时 PV 不会被自动删除。
    • CLAIM 显示到原始 PVC 的链接。
  2. 重新创建原始命名空间:

    oc create namespace my-project
    Copy to Clipboard Toggle word wrap

    在这里,我们重新创建 my-project 命名空间。

  3. 重新创建原始 PVC 资源规格,将 PVC 链接到适当的 PV:

    PVC 资源规格示例

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

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

    在示例中,删除了以下属性:

    claimRef:
      apiVersion: v1
      kind: PersistentVolumeClaim
      name: data-0-my-cluster-kafka-2
      namespace: myproject
      resourceVersion: "39113"
      uid: 54be1c60-3319-11ea-97b0-0aef8816c7ea
    Copy to Clipboard Toggle word wrap
  5. 部署 Cluster Operator:

    oc create -f install/cluster-operator -n my-project
    Copy to Clipboard Toggle word wrap
  6. 通过应用 KafkaTopic 资源配置来重新创建所有 KafkaTopic 资源:

    oc apply -f <topic_configuration_file>
    Copy to Clipboard Toggle word wrap
  7. 重新创建所有 KafkaUser 资源:

    1. 如果需要保留用户密码和证书,请在重新创建 KafkaUser 资源前重新创建用户 secret。

      如果没有重新创建 secret,User Operator 将自动生成新的凭证。确保重新创建的 secret 的名称、标签和字段与原始 secret 完全相同。

    2. 应用 KafkaUser 资源配置:

      oc apply -f <user_configuration_file>
      Copy to Clipboard Toggle word wrap
  8. 使用 Kafka 资源的原始配置部署 Kafka 集群:

    oc apply -f <kafka_resource_configuration>.yaml -n my-project
    Copy to Clipboard Toggle word wrap
  9. 验证 KafkaTopic 资源的恢复:

    oc get kafkatopics -o wide -w -n my-project
    Copy to Clipboard Toggle word wrap

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

    READY 输出显示为 True 时,KafkaTopic 自定义资源创建成功。

  10. 验证 KafkaUser 资源的恢复:

    oc get kafkausers -o wide -w -n my-project
    Copy to Clipboard Toggle word wrap

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

    READY 输出显示为 True 时,KafkaUser 自定义资源创建成功。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat