使用Node.js客户端更新带GPU的Cloud Run服务时遇内部错误
Cloud Run服务更新失败问题(带GPU场景)
问题详情
使用Node.js客户端库@google-cloud/run更新Cloud Run服务时,不带GPU的服务能正常完成更新,但通过pulumi/terraform为服务附加GPU后,更新请求触发内部错误。
复现代码
const client = new ServicesClient({ projectId, }) const request: protos.google.cloud.run.v2.IUpdateServiceRequest = { // name格式: projects/<projectNumber>/locations/<location>/services/<serviceId> service: { name }, updateMask: { paths: [] }, } const [operation] = await client.updateService(request) const [response] = await operation.promise() console.log(response)
报错信息
Error: 13 INTERNAL: Internal error encountered. at callErrorFromStatus (/app/node_modules/@grpc/grpc-js/src/call.ts:82:17) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/src/client.ts:360:55) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/src/client-interceptors.ts:458:34) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/src/client-interceptors.ts:419:48)
解决办法
- 补全GPU相关配置到更新请求
当服务绑定GPU后,Cloud Run v2 API要求更新请求必须包含完整的GPU资源配置(哪怕你只是做无变更的更新)。修改请求中的service对象,添加GPU资源限制:
const request: protos.google.cloud.run.v2.IUpdateServiceRequest = { service: { name, template: { containers: [ { // 保留原有容器配置,添加GPU资源限制(数量和pulumi/terraform设置一致) resources: { limits: { 'nvidia.com/gpu': '1' } } } ] } }, updateMask: { paths: ['template.containers.resources'] }, // 明确指定更新字段 }
不要用空的updateMask
空的updateMask会触发全量更新逻辑,但如果请求中的service对象缺少GPU相关必填字段,就会引发内部错误。如果只是要查询服务状态,直接用getService接口,不要调用updateService;如果确实要更新,明确指定要修改的字段到updateMask中。对齐API版本
检查@google-cloud/run客户端库的版本是否与Cloud Run v2 API兼容,同时确认pulumi/terraform使用的Cloud Run API版本和客户端一致,版本不匹配也可能导致这类隐性错误。
内容的提问来源于stack exchange,提问作者Ole Håkon Ødegaard
相关产品推荐
相关产品推荐

