使用Terraform生成的gcloud命令安装Ops Agent失败:依赖冲突
问题:Ops Agent策略安装时自动引入旧代理导致冲突失败
通过Terraform生成了以下gcloud命令:
gcloud beta compute instances ops-agents policies create ops-agents-policy-centos-7 --agent-rules=enable-autoupgrade=true,package-state=installed,type=ops-agent,version=current-major --group-labels=jvr=jvr --os-types=short-name=centos,version=7 --project=my-project --quiet
在全新CentOS 7虚拟机上应用该策略后,Ops Agent始终安装失败。yum日志显示,安装google-cloud-ops-agent时会自动尝试安装stackdriver-agent、google-fluentd等旧版代理,进而触发冲突错误:
Error: google-cloud-ops-agent conflicts with google-fluentd-1.10.1-1.el7.x86_64 Error: google-cloud-ops-agent conflicts with stackdriver-agent-6.3.1-1.el7.x86_64
手动在客户端直接安装Ops Agent可以正常完成,疑问:为什么这条gcloud命令生成的安装指令会包含未请求的旧代理?
回答
- 这是因为CentOS 7环境下的Ops Agent策略安装脚本存在逻辑问题,或者默认依赖配置有误,误将旧版的Stackdriver代理包作为依赖项引入,即使是全新系统也会触发yum自动拉取这些冲突包。
- 可以尝试以下几种解决方式:
- 预配置yum排除规则:在CentOS 7虚拟机的
/etc/yum.conf中添加排除规则,阻止yum自动安装冲突包:
之后再应用Ops Agent策略即可正常安装。exclude=stackdriver-agent google-fluentd - 自定义安装脚本替代默认策略:如果默认策略无法修改依赖逻辑,可以通过Terraform为虚拟机添加启动脚本,手动执行Ops Agent的安装命令,跳过默认的策略安装流程。手动安装命令示例:
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh bash add-google-cloud-ops-agent-repo.sh --also-install - 前置清理步骤:在策略中添加前置脚本,先卸载可能存在的旧代理包(即使全新系统也可以提前执行,避免依赖拉取):
yum remove -y stackdriver-agent google-fluentd || true
- 预配置yum排除规则:在CentOS 7虚拟机的
内容的提问来源于stack exchange,提问作者jvanryn
相关产品推荐
相关产品推荐

