Helm中Release如何引用其他Release并传递服务端点?
你拆分三个独立Release部署的场景下,有三种可直接落地的实现方式:
方案一:手动查询端点后通过命令行参数传入
先获取两个中间件的集群内访问信息:- PostgreSQL信息获取
- 服务地址:执行
kubectl get svc查看对应服务,按你用的chart默认配置,服务名是staging-pg-postgresql,同命名空间下直接用服务名即可访问,跨命名空间的完整地址是staging-pg-postgresql.<命名空间名>.svc.cluster.local,默认端口5432 - 连接密码:执行
kubectl get secret staging-pg-postgresql -o jsonpath="{.data.postgresql-password}" | base64 -d可以直接解码拿到初始密码
- 服务地址:执行
- Memcached信息获取
Bitnami的memcached chart默认创建的服务名和Release名一致,也就是staging-memcached,默认端口11211,默认无访问密码
拿到信息后安装webapp时,通过--set把参数传进去就行,示例命令:
helm install staging-webapp my-repo/blog \ --set database.host=staging-pg-postgresql \ --set database.port=5432 \ --set database.password=刚才解码出的PG密码 \ --set cache.host=staging-memcached \ --set cache.port=11211注意这里的参数key(比如database.host、cache.host)要和你自己的
my-repo/blogchart里定义的values字段对应,不确定字段名的话跑helm show values my-repo/blog就能看到所有可配置项。- PostgreSQL信息获取
方案二:独立values文件统一管理配置
如果要区分多环境、或者后续配置调整频繁,把所有环境相关的配置单独写到yaml文件里更方便,比如建一个staging.yaml:database: host: staging-pg-postgresql port: 5432 password: 你的PG连接密码 dbname: blog cache: host: staging-memcached port: 11211安装的时候用
-f指定这个配置文件即可:helm install staging-webapp my-repo/blog -f staging.yaml这种方式完全贴合你了解的Release = Chart + Config逻辑,Chart本身不用存任何环境相关的硬编码,换测试、生产环境的时候只需要替换对应的values文件就行,可维护性最好。
方案三:Chart模板内置自动发现逻辑(仅内部场景可选)
如果你自己维护my-repo/blog这个chart,可以在模板里用Helm内置的lookup函数直接查询集群里已有的Service、Secret资源,自动拉取PG和Memcached的地址、密码,安装的时候不用手动传任何依赖配置。但这种方式会把chart和固定的Release命名规则强绑定,灵活性很差,只适合内部有统一部署规范、不需要对外分发chart的场景用。
避坑提醒:别把数据库、缓存的地址直接写死在webapp的chart模板里,写死之后chart就没法在不同环境复用,所有差异化配置都应该走values传入。
内容的提问来源于stack exchange,提问作者Ryan Lyu

