11.3. 使用 AMQ Streams Drain Cleaner 驱除 pod
Kafka 和 ZooKeeper pod 可能会在 OpenShift 升级、维护和 pod 重新调度过程中被驱除。如果您的 Kafka 代理和 ZooKeeper pod 由 AMQ Streams 部署,您可以使用 AMQ Streams Drain Cleaner 工具来处理 pod 驱除。由于 AMQ Streams Drain Cleaner 将处理驱除而不是 OpenShift,所以您需要将 Kafka 部署的 podDisruptionBudget
设置为 0 (
零)。然后,OpenShift 将不再允许自动驱除 pod。
通过部署 AMQ Streams Drain Cleaner,您可以使用 Cluster Operator 移动 Kafka pod 而不是 OpenShift。Cluster Operator 确保主题永远不会被复制。Kafka 可在驱除过程中保持运行。Cluster Operator 会等待主题同步,因为 OpenShift worker 节点会持续排空。
准入 Webhook 通知 AMQ Streams Drain Cleaner 到 Kubernetes API 的 pod 驱除请求。然后,AMQ Streams Drain Cleaner 会向 pod 添加滚动更新注解,以便排空 pod。这会通知 Cluster Operator 执行被驱除的 pod 的滚动更新。
如果不使用 AMQ Streams Drain Cleaner,您可以添加 pod 注解来手动执行滚动更新。
Webhook 配置
AMQ Streams Drain Cleaner 部署文件包含一个 ValidatingWebhookConfiguration
资源文件。资源提供了将 webhook 注册到 Kubernetes API 的配置。
配置定义了 Kubernetes API 在发生 pod 驱除请求时遵循 的规则
。规则指定,只有与 pod/eviction 子资源
相关的 CREATE
操作才会被拦截。如果满足这些规则,API 会转发通知。
clientConfig
指向 AMQ Streams Drain Cleaner 服务,以及公开 webhook 的 /drainer
端点。Webhook 使用安全 TLS 连接,需要身份验证。caBundle
属性指定验证 HTTPS 通信的证书链。证书以 Base64 编码。
pod 驱除通知的 Webhook 配置
11.3.1. 先决条件 复制链接链接已复制到粘贴板!
要部署和使用 AMQ Streams Drain Cleaner,您需要下载部署文件。
AMQ Streams Drain Cleaner 部署文件可从 AMQ Streams 软件下载页面。
11.3.2. 部署 AMQ Streams Drain Cleaner 复制链接链接已复制到粘贴板!
将 AMQ Streams Drain Cleaner 部署到运行 Cluster Operator 和 Kafka 集群的 OpenShift 集群。
先决条件
- 您已 下载 AMQ Streams Drain Cleaner 部署文件。
- 您有一个高度可用的 Kafka 集群部署,它运行了您要更新的 OpenShift worker 节点。
我们将复制主题以实现高可用性。
主题配置指定至少 3 个复制因素,最小同步副本的数量为复制因素的数量减 1。
Kafka 主题复制以实现高可用性
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
排除 ZooKeeper
如果您不想包含 ZooKeeper,您可以从 AMQ Streams Drain Cleaner Deployment
配置文件中删除 --zookeeper
命令选项。
- 1
- 删除这个选项,以从 AMQ Streams Drain Cleaner 操作中排除 ZooKeeper。
流程
使用
Kafka
资源中的模板
设置,为您的 Kafka 部署配置 pod 中断预算0 (
零)。指定 pod 中断预算
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将最大 pod 中断预算缩减为零可防止 OpenShift 在出现自愿中断时自动驱除 pod,从而使 AMQ Streams Drain Cleaner 和 AMQ Streams Cluster Operator 保留为 AMQ Streams Cluster Operator,以在不同的 worker 节点上部署 OpenShift 将调度的 pod。
如果要使用 AMQ Streams Drain Cleaner 来排空 ZooKeeper 节点,为 ZooKeeper 添加相同的配置。
更新
Kafka
资源:oc apply -f <kafka_configuration_file>
oc apply -f <kafka_configuration_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 AMQ Streams Drain Cleaner。
oc apply -f ./install/drain-cleaner/openshift
oc apply -f ./install/drain-cleaner/openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3.3. 使用 AMQ Streams Drain Cleaner 复制链接链接已复制到粘贴板!
使用 AMQ Streams Drain Cleaner 与 Cluster Operator 结合使用,将 Kafka 代理或 ZooKeeper pod 从正在排空的节点移动。运行 AMQ Streams Drain Cleaner 时,它会使用滚动更新 pod 注解来注解 pod。Cluster Operator 根据注解执行滚动更新。
先决条件
流程
排空托管 Kafka 代理或 ZooKeeper pod 的指定 OpenShift 节点。
oc get nodes oc drain <name-of-node> --delete-emptydir-data --ignore-daemonsets --timeout=6000s --force
oc get nodes oc drain <name-of-node> --delete-emptydir-data --ignore-daemonsets --timeout=6000s --force
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 AMQ Streams Drain Cleaner 日志中的驱除事件,以验证 pod 是否已注解重启。
AMQ Streams Drain Cleaner 日志显示 pod 的注解
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Cluster Operator 日志中的协调事件,以验证滚动更新。
Cluster Operator 日志显示滚动更新
INFO PodOperator:68 - Reconciliation #13(timer) Kafka(my-project/my-cluster): Rolling Pod my-cluster-zookeeper-2 INFO PodOperator:68 - Reconciliation #13(timer) Kafka(my-project/my-cluster): Rolling Pod my-cluster-kafka-0 INFO AbstractOperator:500 - Reconciliation #13(timer) Kafka(my-project/my-cluster): reconciled
INFO PodOperator:68 - Reconciliation #13(timer) Kafka(my-project/my-cluster): Rolling Pod my-cluster-zookeeper-2 INFO PodOperator:68 - Reconciliation #13(timer) Kafka(my-project/my-cluster): Rolling Pod my-cluster-kafka-0 INFO AbstractOperator:500 - Reconciliation #13(timer) Kafka(my-project/my-cluster): reconciled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow