Kubernetes环境如何通过ConfigMap修改Quarkus的Hazelcast集群成员IP
问题解答
可行性确认
完全可以实现,不需要修改application.properties文件。Quarkus支持多种外部配置源,Kubernetes ConfigMap注入的配置优先级高于项目内置的application.properties配置,会直接覆盖原有值。
你采用sidecar模式部署Hazelcast时,Hazelcast实例和应用容器共享Pod网络栈,通过127.0.0.1访问Hazelcast实例是合理的方案。
具体实现步骤
你不需要修改现有Hazelcast服务端的配置内容,只需要调整ConfigMap和Deployment配置,新增Quarkus相关配置注入即可:
- 调整你的ConfigMap,新增Quarkus客户端对应的环境变量配置项:
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: # 保留你原有的Hazelcast服务端配置 hazelcast.yaml: |- hazelcast: network: join: multicast: enabled: false kubernetes: enabled: true namespace: dev-1 service-port: 5701 # 新增Quarkus Hazelcast客户端配置,Quarkus会自动识别该环境变量覆盖原有properties配置 QUARKUS_HAZELCAST_CLIENT_CLUSTER_MEMBERS: 127.0.0.1:5701
说明:Quarkus默认支持配置名的自动转换,小写驼峰+中划线分隔的配置项
quarkus.hazelcast-client.cluster-members,对应的大写下划线分隔环境变量就是QUARKUS_HAZELCAST_CLIENT_CLUSTER_MEMBERS,不需要额外做映射配置。
- 在应用Deployment配置中,将ConfigMap的配置作为环境变量注入到Quarkus应用容器中:
spec: containers: # Quarkus应用容器配置 - name: quarkus-app image: 你自己的应用镜像地址 envFrom: - configMapRef: name: app-config # Hazelcast sidecar容器配置(保留你原有的配置即可) - name: hazelcast image: hazelcast/hazelcast:latest volumeMounts: - name: hazelcast-config mountPath: /opt/hazelcast/config/hazelcast.yaml subPath: hazelcast.yaml volumes: - name: hazelcast-config configMap: name: app-config items: - key: hazelcast.yaml path: hazelcast.yaml
效果验证
应用重新部署启动后,可进入Quarkus应用容器执行env | grep QUARKUS_HAZELCAST_CLIENT命令确认环境变量是否正确注入,也可以通过应用日志或者Hazelcast客户端的状态接口确认连接地址已经变更为127.0.0.1:5701。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

