配置KafkaNodePools后Strimzi集群操作员启动失败求助
问题:Strimzi集群操作员因KafkaNodePools特性门启动失败
报错信息
配置KafkaNodePools后,Strimzi集群操作员启动失败,抛出以下异常:
Exception in thread "main" io.strimzi.operator.common.InvalidConfigurationException: Unknown feature gate KafkaNodePools found in the configuration at io.strimzi.operator.common.featuregates.FeatureGates.<init>(FeatureGates.java:51) at io.strimzi.operator.common.config.ConfigParameter.get(ConfigParameter.java:89) at io.strimzi.operator.common.config.ConfigParameter.define(ConfigParameter.java:72) at io.strimzi.operator.cluster.ClusterOperatorConfig.buildFromMap(ClusterOperatorConfig.java:310) at io.strimzi.operator.cluster.ClusterOperatorConfig.buildFromMap(ClusterOperatorConfig.java:292) at io.strimzi.operator.cluster.Main.main(Main.java:62)
集群操作员Deployment配置
对应的Strimzi集群操作员Deployment配置如下:
apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "25" creationTimestamp: "2024-11-08T15:41:13Z" generation: 25 labels: app: strimzi name: strimzi-cluster-operator namespace: kafka resourceVersion: "331173" uid: 97ce684c-e542-4ac4-bc9e-e3314a844828 spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: name: strimzi-cluster-operator strimzi.io/kind: cluster-operator strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: annotations: kubectl.kubernetes.io/restartedAt: "2025-01-03T21:20:24+03:00" creationTimestamp: null labels: name: strimzi-cluster-operator strimzi.io/kind: cluster-operator spec: containers: - args: - /opt/strimzi/bin/cluster_operator_run.sh env: - name: STRIMZI_FEATURE_GATES value: +KafkaNodePools - name: STRIMZI_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS value: "120000" - name: STRIMZI_OPERATION_TIMEOUT_MS value: "300000" - name: STRIMZI_DEFAULT_KAFKA_EXPORTER_IMAGE value: quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_DEFAULT_CRUISE_CONTROL_IMAGE value: quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_KAFKA_IMAGES value: | 3.8.0=quay.io/strimzi/kafka:0.44.0-kafka-3.8.0 3.8.1=quay.io/strimzi/kafka:0.44.0-kafka-3.8.1 3.9.0=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_KAFKA_CONNECT_IMAGES value: | 3.8.1=quay.io/strimzi/kafka:0.44.0-kafka-3.8.1 3.8.0=quay.io/strimzi/kafka:0.44.0-kafka-3.8.0 3.9.0=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_KAFKA_MIRROR_MAKER_IMAGES value: | 3.8.1=quay.io/strimzi/kafka:0.44.0-kafka-3.8.1 3.8.0=quay.io/strimzi/kafka:0.44.0-kafka-3.8.0 3.9.0=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_KAFKA_MIRROR_MAKER_2_IMAGES value: | 3.8.1=quay.io/strimzi/kafka:0.44.0-kafka-3.8.1 3.8.0=quay.io/strimzi/kafka:0.44.0-kafka-3.8.0 3.9.0=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 - name: STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE value: quay.io/strimzi/operator:0.45.0 - name: STRIMZI_DEFAULT_USER_OPERATOR_IMAGE value: quay.io/strimzi/operator:0.45.0 - name: STRIMZI_DEFAULT_KAFKA_INIT_IMAGE value: quay.io/strimzi/operator:0.45.0 - name: STRIMZI_DEFAULT_KAFKA_BRIDGE_IMAGE value: quay.io/strimzi/kafka-bridge:0.31.1 - name: STRIMZI_DEFAULT_KANIKO_EXECUTOR_IMAGE value: quay.io/strimzi/kaniko-executor:0.45.0 - name: STRIMZI_DEFAULT_MAVEN_BUILDER value: quay.io/strimzi/maven-builder:0.45.0 - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: STRIMZI_LEADER_ELECTION_ENABLED value: "true" - name: STRIMZI_LEADER_ELECTION_LEASE_NAME value: strimzi-cluster-operator - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: STRIMZI_LEADER_ELECTION_IDENTITY valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name image: quay.io/strimzi/operator:0.45.0 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 3 httpGet: path: /healthy port: http scheme: HTTP initialDelaySeconds: 10 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 1 name: strimzi-cluster-operator ports: - containerPort: 8080 name: http protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /ready port: http scheme: HTTP initialDelaySeconds: 10 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 1 resources: limits: cpu: "1" memory: 384Mi requests: cpu: 200m memory: 384Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /tmp name: strimzi-tmp - mountPath: /opt/strimzi/custom-config/ name: co-config-volume dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} serviceAccount: strimzi-cluster-operator serviceAccountName: strimzi-cluster-operator terminationGracePeriodSeconds: 30 volumes: - emptyDir: medium: Memory sizeLimit: 1Mi name: strimzi-tmp - configMap: defaultMode: 420 name: strimzi-cluster-operator name: co-config-volume status: conditions: - lastTransitionTime: "2025-01-03T18:15:00Z" lastUpdateTime: "2025-01-03T18:15:00Z" message: Deployment does not have minimum availability. reason: MinimumReplicasUnavailable status: "False" type: Available - lastTransitionTime: "2025-01-03T18:10:41Z" lastUpdateTime: "2025-01-03T18:25:54Z" message: ReplicaSet "strimzi-cluster-operator-759856c456" is progressing. reason: ReplicaSetUpdated status: "True" type: Progressing observedGeneration: 25 replicas: 2 unavailableReplicas: 2 updatedReplicas: 1
当前Pod状态
调整Strimzi版本后出现部署崩溃,当前Pod状态如下:
PS C:\Users\user> kubectl get pods -n kafka NAME READY STATUS RESTARTS AGE my-bridge-bridge-54fcdb8865-nkfbb 1/1 Running 122 (22m ago) 55d my-cluster-dual-role-0 1/1 Running 32 (24m ago) 19d my-cluster-dual-role-1 1/1 Running 86 (24m ago) 51d my-cluster-dual-role-2 1/1 Running 81 (24m ago) 51d my-cluster-entity-operator-596ff884f-jtqcf 2/2 Running 346 (22m ago) 56d strimzi-cluster-operator-6cfb7f8f4d-zr47s 0/1 CrashLoopBackOff 7 (4m ago) 14m strimzi-cluster-operator-759856c456-lfxqx 0/1 CrashLoopBackOff 8 (4m39s ago) 20m
解决方案
1. 恢复集群操作员正常运行
报错核心原因是Strimzi 0.45.0版本中KafkaNodePools已默认启用,对应的特性门KafkaNodePools已被移除,手动添加该特性门会导致操作员无法识别。解决步骤:
- 编辑集群操作员Deployment:
kubectl edit deployment strimzi-cluster-operator -n kafka - 找到
STRIMZI_FEATURE_GATES环境变量,将其值设置为空字符串,或者直接删除该环境变量条目 - 保存退出后,等待Pod重启,确认操作员进入
Running状态
2. 修复版本调整导致的崩溃
如果之前的版本切换操作引发了其他问题:
- 确保所有Strimzi组件版本统一:集群操作员、Kafka镜像、实体操作员等都使用0.45.0版本(从Deployment配置看,当前镜像版本已经统一,无需额外调整)
- 回滚到之前正常的操作员版本(如果需要):
kubectl rollout undo deployment strimzi-cluster-operator -n kafka - 检查Kafka集群CR配置,确保没有版本不兼容的字段,如有则回滚到兼容配置
3. 配置KafkaNodePools(恢复后)
因为0.45.0默认启用KafkaNodePools,直接在Kafka集群CR中添加nodePools字段即可完成配置,无需再设置特性门。
内容的提问来源于stack exchange,提问作者elenwen
相关产品推荐
相关产品推荐

