Google Compute Engine虚拟机容器无法启动问题排查求助
GCP抢占式虚拟机容器启动失败权限问题解决方案
从错误日志可直接定位核心问题:虚拟机无权限拉取GCR容器镜像,你当前给实例配置的访问scope仅包含BigQuery和Datastore权限,缺少镜像拉取所需的权限。
解决方案
方案1:修改实例启动参数补充访问Scope(最便捷)
GCR底层依赖Cloud Storage存储镜像,只需要给实例追加存储只读权限即可正常拉取镜像,修改部署脚本中gcloud命令的--scopes参数:
steps: - name: gcr.io/cloud-builders/docker args: ['build', '-t', 'gcr.io/local-xxxxxxxxxxxxxx/apptraining', '.'] - name: 'gcr.io/cloud-builders/docker' args: ["push", "gcr.io/local-xxxxxxxxxxxxxx/apptraining"] - name: 'gcr.io/cloud-builders/gcloud' args: ['compute', 'instances', 'create-with-container', 'instanceapptraining', '--machine-type=n1-standard-1', '--scopes=https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/datastore,https://www.googleapis.com/auth/devstorage.read_only','--zone=us-central1-a', '--preemptible', '--container-image=gcr.io/local-xxxxxxxxxxxxxx/apptraining:latest']
如果是测试环境,也可以直接用https://www.googleapis.com/auth/cloud-platform替代原有全部scope,该权限包含所有GCP服务的访问权限,不用单独配置各服务权限。
方案2:给服务账号单独授权(权限管控更严格)
如果不希望给实例开全局访问scope,可以单独给虚拟机使用的Compute Engine默认服务账号授权:
- 找到存储GCR镜像的Cloud Storage桶,默认格式为
artifacts.<你的项目ID>.appspot.com - 在IAM页面给默认Compute Engine服务账号(格式为
<项目编号>-compute@developer.gserviceaccount.com)授予该桶的存储对象查看者角色即可
验证方式
修改配置后重新创建实例,SSH连接后执行sudo journalctl -u konlet-startup查看日志,无镜像拉取权限报错即为修复完成。
内容的提问来源于stack exchange,提问作者OrganicMustard
相关产品推荐
相关产品推荐

