Deployment Manager脚本访问K8集群输出报错:资源未找到
$(ref)引用资源输出报“resource not found”的问题 我之前也踩过类似的坑,咱们一步步排查解决:
1. 先确认资源名称完全匹配
首先要搞清楚:你用$(ref.dmcluster.v1endpoint)里的dmcluster,必须是cluster.py在Deployment Manager配置中被定义的资源实例名称,而不是脚本文件名。比如你的配置文件(比如config.yaml)里应该是这样的:
resources: - name: dmcluster type: cluster.py
如果资源实例名不是dmcluster(比如写成了my-cluster),那引用肯定会失败,先把这个最基础的点核对清楚。
2. 验证cluster.py的输出定义是否规范
你说cluster.py对外暴露了输出,得确保输出的键名确实是v1endpoint,而且输出格式完全符合Deployment Manager的要求。正确的输出定义应该是这样的(cluster.py里的代码片段):
def GenerateConfig(context): # ... 你的集群创建逻辑 ... return { 'resources': [...], 'outputs': [ { 'name': 'v1endpoint', 'value': '<实际的集群端点值>' } ] }
一定要确认outputs列表里的name字段拼写、大小写完全是v1endpoint,差一个字符都不行。
3. 确保服务资源依赖于集群资源
如果dmnginxservice和dmcluster在同一个Deployment Manager部署配置里,必须让服务依赖集群。这样Deployment Manager会先创建集群,等集群输出生成后再创建服务,避免引用时集群还没就绪。在配置里添加依赖:
resources: - name: dmcluster type: cluster.py - name: dmnginxservice type: <你的服务资源类型> properties: # ... 服务的属性配置 ... metadata: dependsOn: - dmcluster
没有依赖的话,服务可能先启动,这时候集群还没生成输出,自然会报资源找不到。
4. 查看集群资源的实际输出
用Deployment Manager的命令行工具检查dmcluster的输出是否真的存在:
gcloud deployment-manager deployments describe <你的部署名称> --format="value(resources[?name=='dmcluster'].outputs)"
如果返回结果里没有v1endpoint,那说明cluster.py的输出定义有问题,得回去修正脚本;如果有这个输出,那问题就出在引用环节。
5. 核对引用语法是否正确
确保引用格式完全正确:$(ref.dmcluster.v1endpoint),用点号分隔资源名和输出键,而且要正确放在YAML的属性值里,比如:
properties: endpoint: $(ref.dmcluster.v1endpoint)
不要额外加引号或者转义字符(除非YAML语法强制要求)。
内容的提问来源于stack exchange,提问作者Varunkumar Manohar

