0

0

Linux Chef 节点管理与配置实践

舞姬之光

舞姬之光

发布时间:2026-02-27 17:23:02

|

231人浏览过

|

来源于php中文网

原创

chef-client 运行失败报 404 错误本质是节点在服务端无有效记录,主因包括 node_name 配置错误、validation.pem 缺失或权限不对、环境字段硬编码覆盖服务端设置、ohai 插件路径未配置或命名不规范。

linux chef 节点管理与配置实践

chef-client 运行失败:找不到 node 名或报错 Net::HTTPServerException: 404 "Not Found"

这是 Chef 节点首次注册或重装后最常遇到的问题,本质是 chef-client 拿不到有效的 node 对象,服务端没它记录。

常见错误现象包括:ERROR: Failed to authenticate to https://your-server/organizations/org1 as chefadmin 或更直接的 404 "Not Found" —— 不是认证失败,而是 node 名在服务端根本不存在。

  • 确保 /etc/chef/client.rb 中配置了正确的 node_name(如 node_name "web01"),且该名未被其他节点占用
  • 首次运行前,**不要**手动创建 /etc/chef/node.json;让 chef-client -z 或服务端自动初始化
  • 若用 knife bootstrap,确认命令里指定了 --node-name,且与 client.rb 一致;漏掉这个参数就会默认用 hostname,而 hostname 可能含域名、大小写不匹配或被防火墙截断
  • 检查 /etc/chef/validation.pem 是否存在且权限为 600;404 有时是密钥无效导致服务端拒绝建立 node 记录

knife node list 返回空,但 chef-client 却说 node 已存在

这说明节点在服务端有记录,但状态异常(比如被手动删过 JSON 文件、或 run_list 损坏),导致 knife 查询时过滤掉了。

典型场景:运维人员直接登录 Chef Server 手动删了 /var/opt/opscode/data/bifrost/nodes/xxx.json,但没清理关联的索引数据。

  • 执行 knife node show <node_name></node_name> 看是否真能查到详情;如果返回 404,那确实是记录丢失
  • show 成功但 list 不显示,大概率是 Solr 索引滞后;运行 sudo opscode-ctl reindex(Chef Server 12+)或 sudo chef-server-ctl reindex(14+)强制重建
  • knife node edit 保存空修改可触发一次轻量同步,有时比重跑整个 reindex 更快见效
  • 避免直接操作 /var/opt/opscode/data/ 下的文件;所有节点生命周期操作应走 knife 或 API

多个环境(env)下 chef-client 总应用 production 的 cookbook 版本

不是 cookbook 锁定问题,而是节点对象里 environment 字段没生效 —— 大多因为 client.rb 里写了 environment "production",覆盖了服务端设置。

TeemIp - IPAM and DDI solution
TeemIp - IPAM and DDI solution

TeemIp是一个免费、开源、基于WEB的IP地址管理(IPAM)工具,提供全面的IP管理功能。它允许您管理IPv4、IPv6和DNS空间:跟踪用户请求,发现和分配IP,管理您的IP计划、子网空间、区域和DNS记录,符合最佳的DDI实践。同时,TeemIp的配置管理数据库(CMDB)允许您管理您的IT库存并将您的配置项(CIs)与它们使用的IP关联起来。项目源代码位于https://github.com/TeemIP

下载

这种硬编码会彻底绕过 Chef Server 的环境隔离机制,导致 dev/test 环境节点也拉取 production 的 cookbooks。

  • 删掉 /etc/chef/client.rb 中所有以 environment 开头的行;节点所属环境必须由服务端控制
  • 确认节点已通过 knife node environment set <node><env></env></node> 正确归属,而不是只改了 run_list
  • 检查环境本身是否绑定了 cookbook 版本约束:用 knife environment show <env></env>cookbook_versionsdefault_attributes 是否符合预期
  • 运行 chef-client -l debug 观察日志里 Using environment 行,确认读取的是服务端下发值,而非 client.rb 回退值

自定义 ohai 插件不加载,ohai 命令能看到但 chef-clientnode['myplugin'] 为空

Ohai 插件在 chef-client 启动初期就执行,但加载路径和时机比想象中严格:插件必须在 ohai_plugins_path 目录下,且文件名需匹配类名,否则静默忽略。

常见错误是把插件放到了 /etc/chef/ohai_plugins/,但 client.rb 没配 ohai_plugins_path,导致 chef-client 根本不扫描该目录。

  • /etc/chef/client.rb 中明确添加 ohai_plugins_path ["/etc/chef/ohai_plugins"](注意是数组)
  • 插件文件名必须全小写、下划线分隔,如 my_custom_data.rb;对应类名必须是 Ohai::System::MyCustomData
  • 插件内必须调用 provides "my_custom_data",且属性赋值用 data["my_custom_data"] = {...},不能用 nodeself
  • 验证方式:先运行 ohai -d /etc/chef/ohai_plugins my_custom_data 看输出;再跑 chef-client -z -l debug | grep my_custom_data 确认是否出现在 node 数据初始化阶段

节点管理里最麻烦的从来不是命令怎么敲,而是“谁在什么时候改了什么配置”——client.rb、node 对象、环境定义、ohai 插件路径,四者稍有错位,表现出来的就是看似随机的 404 或空数据。留心每次变更后 knife node show 输出的 automatic_attributesnormal_attributes 差异,比看日志更快定位源头。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

450

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

326

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2023.10.25

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2732

2024.08.16

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1541

2023.06.21

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

2

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.8万人学习

Git 教程
Git 教程

共21课时 | 3.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号