如何在Rancher K8s部署IBM-MQ后无需新建镜像自动创建自定义队列
解决方案(无需构建自定义镜像)
方案1:使用IBM MQ Chart原生配置能力(推荐)
IBM MQ官方Chart原生支持加载自定义MQSC配置,无需额外编写Hook脚本,部署时Chart会自动在队列管理器就绪后加载你定义的配置。
修改helmfile的values配置如下:
repositories: - name: ibm-stable-charts url: https://raw.githubusercontent.com/IBM/charts/master/repo/stable releases: - name: ibm-mq labels: app: ibm-mq namespace: user chart: ibm-stable-charts/ibm-mqadvanced-server-dev values: - license: accept image: tag: latest queueManager: # 直接在此处添加自定义MQSC配置,Chart会自动加载执行 mqsc: - define qlocal (TEST); dev: secret: adminPasswordKey: secret name: secret
方案2:修正helmfile Hook逻辑
如果需要更复杂的自定义操作,可以调整Hook配置和执行脚本:
第一步:修正Hook触发配置
你之前使用的cleanup事件仅在Release清理卸载时触发,安装/升级阶段不会执行,需要改为postinstall、postupgrade事件,同时开启等待资源就绪的配置:
repositories: - name: ibm-stable-charts url: https://raw.githubusercontent.com/IBM/charts/master/repo/stable releases: - name: ibm-mq labels: app: ibm-mq namespace: user chart: ibm-stable-charts/ibm-mqadvanced-server-dev # 等待release所有资源就绪再执行后续操作 wait: true waitForJobs: true hooks: - events: [ "postinstall", "postupgrade" ] showlogs: true command: "./script.sh" values: - license: accept image: tag: latest queueManager: dev: secret: adminPasswordKey: secret name: secret
第二步:重写执行脚本
你之前的脚本存在两个问题:一是runmqsc命令执行在本地节点而非MQ容器内,二是没有等待队列管理器完全就绪。修改后的脚本如下:
#!/bin/bash # 等待MQ Pod就绪 kubectl wait --for=condition=ready pod/ibm-mq-0 -n user --timeout=300s # 轮询等待队列管理器QM1就绪 for i in {1..30}; do if kubectl exec -i -n user ibm-mq-0 -c qmgr -- dspmq | grep -q "QM1.*Running"; then break fi echo "等待队列管理器启动中,第${i}次重试..." sleep 5 done # 直接在容器内执行MQSC命令创建队列 kubectl exec -i -n user ibm-mq-0 -c qmgr -- runmqsc QM1 <<EOF define qlocal (TEST); end; EOF if [ $? -eq 0 ]; then echo "队列TEST创建成功" else echo "队列TEST创建失败" exit 1 fi
内容的提问来源于stack exchange,提问作者Arzybek
相关产品推荐
相关产品推荐

