GKE上Strimzi部署Confluent Schema Registry失败求助
问题描述
我已在GCP的GKE上部署Strimzi Kafka,参考第三方operator安装Confluent Schema Registry,执行步骤如下:
- 在
schema-registry-operator命名空间安装strimzi-registry-operator(Strimzi Kafka部署在kafka命名空间),使用helm命令及指定values.yaml配置; - 在
kafka命名空间创建KafkaTopic(registry-schemas)和KafkaUser(confluent-schema-registry); - 在
strimzi-schema-operator命名空间安装StrimziSchemaRegistry。
最初遇到403权限错误:serviceaccount无法在kafka命名空间列出secrets及strimzischemaregistries资源,导致未出现监听8081端口的Schema Registry Pod。
已通过在strimzi-registry-operator命名空间重新创建ServiceAccount解决权限问题,但出现新错误:operator代码抛出AttributeError: module 'kopf' has no attribute 'Error',Schema Registry仍无法创建。
环境信息:
- Strimzi Kafka版本3.0.0
- Kafka配置多类型监听器
- KafkaUser和Topic部署在
kafka命名空间 - 计划将Confluent Schema Registry部署在
kafka命名空间
求助:
- 如何获取Schema Registry访问地址?
- 如何解决当前的
AttributeError代码错误?
解决方案
一、修复AttributeError: module 'kopf' has no attribute 'Error'
该错误源于operator依赖的kopf版本与代码API不兼容:
- 检查operator Pod内的kopf版本:
kubectl exec -n schema-registry-operator <operator-pod-name> -- pip list | grep kopf - 若kopf版本≥1.36.0,
kopf.Error已被移除,需将代码中的kopf.Error替换为kopf.PermanentError(永久错误)或kopf.TemporaryError(临时可重试错误); - 若使用helm部署,查看chart的
values.yaml是否支持指定kopf版本,调整为与代码兼容的版本(如1.35.x)后重新部署operator。
二、获取Schema Registry访问地址
需待Schema Registry Pod成功启动后,通过其关联的Service获取地址:
- 查看
kafka命名空间下的Schema Registry Service:kubectl get svc -n kafka | grep schema-registry - 集群内部访问:使用ClusterIP地址,格式为
http://<service-name>.kafka.svc.cluster.local:8081; - 外部访问:
- 若Service为NodePort类型,地址为
http://<GKE-node-external-ip>:<node-port>; - 若Service为LoadBalancer类型,GKE会分配外部IP,地址为
http://<loadbalancer-external-ip>:8081。
- 若Service为NodePort类型,地址为
内容的提问来源于stack exchange,提问作者Karan Alang
相关产品推荐
相关产品推荐

