SEATA 2.2.0使用K8S部署,使用自定义配置文件
今天遇到一个场景需要部署seata2.2.0,在k8s集群上,同时要使用自定义的配置文件,结果搜遍全网,都是1.5以前的版本,官方文档写的也有问题 ,按照文档操作无法成功 ,连deepseek也无法解决,最终还是靠自己试,通过变通的方法解决,特此分享给需要的同学们 。
--------------------- 原创不易,如果大家看完觉得有帮助,希望能多多点赞关注,感谢各位的支持 ----------------------
官方文档版本:文档地址
- 按照官方文档说明,配置文件名称的环境变量
- name: SEATA_CONFIG_NAME
value: file:/seata-server/conf/
- 将配置文件通过 configMap 创建
apiVersion: v1
kind: ConfigMap
metadata:
name: seata-server-config
data:
application.yml: |
server:
port: 7091
......
.....
....
- 并通过volumeMounts:挂载到容器上即可
volumeMounts:
- name: seata-config
mountPath: /root/seata-config
volumes:
- name: seata-config
configMap:
name: seata-server-config
然并卵 !!! 我尝试把环境变量SEATA_CONFIG_NAME配置, 变成文件全路径file:/seata-server/conf/application.yml ,依然不行,不过这已经不是第一次遇到apache官网文档有问题了,通过变通的方法解决,既然不让我指定其他配置文件,那我就把原始配置文件给替换掉。
解决方案
跟上面差不多,同样是创建configmap配置,同样是挂载到容器上,不配置环境变量,通过容器启动命令行,来替换配置文件,话不多说,直接上配置:
command: ["/bin/bash","-c"]
args:
- |
chmod +x /seata-server-entrypoint.sh
chmod +x /seata-setup.sh
cat /seata-server/conf/application.yml > /seata-server/resources/application.yml;
/seata-server-entrypoint.sh
PS:这里又发现官方镜像一个坑点,启动脚本默认没有可执行权限,需要手动添加,否则会执行失败。
按照这种方案,就可以实现每次启动容器先同步configmap配置内容到默认配置中,达到自定义配置文件的效果。
另外,如果我们在配置文件中,配置了seata配置中心,例如nacos,就像网上大多数文章写的那样,是不需要在服务本地的配置文件中,配置seata.store相关配置项的(其他配置项同理),如果配置中心与本地文件同时存在相同的配置,配置中心优先生效,同理如果在启动参数里面增加配置项的值,启动参数会最优先生效。