温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用Chef回滚配置

发布时间:2026-09-12 17:57:20 来源:亿速云 阅读:100 作者:小樊 栏目:系统运维

Chef 里,“回滚配置”并不是像数据库事务那样的一键式回滚,而是通过重新应用旧版本的 Cookbook / Recipe / 属性来实现。下面按常见场景说明做法。


一、最常用:使用 Cookbook 版本回滚(推荐)

1. 使用版本化 Cookbook + Policyfile / Environment

前提

  • Cookbook 已发布到 Chef Server
  • 有历史版本(如 1.2.01.3.0

2. 回滚方式

✅ 方式 A:Policyfile(推荐)

# Policyfile.rb
cookbook 'myapp', '1.2.0'

然后:

chef install
chef push prod

节点下次 chef-client 就会回到 1.2.0


✅ 方式 B:Environment 锁定版本

{
  "cookbook_versions": {
    "myapp": "= 1.2.0"
  }
}

或:

knife environment set_attribute prod cookbook_versions.myapp "= 1.2.0"

二、使用 Git 回滚 Recipe 源码(开发阶段)

如果是本地或 CI 管理 Cookbook:

git log
git checkout <old_commit>
git push

然后重新上传:

berks upload
# 或
knife cookbook upload myapp

三、通过属性(Attributes)回滚配置值

适合“配置参数错误”而不是代码错误。

# attributes/default.rb(旧值)
default['myapp']['port'] = 8080

回滚:

  • 修改 attribute
  • 或 Environment / Role 覆盖
{
  "myapp": {
    "port": 8080
  }
}

四、节点级别“强制回滚”

1. 删除节点状态(不推荐)

knife node delete node1
knife client delete node1

然后重新 bootstrap(会丢失历史)


2. 重新运行指定版本

chef-client -o 'recipe[myapp@1.2.0]'

五、真正的“撤销”思路(最佳实践)

Chef 是声明式系统,回滚本质就是:

让系统状态回到你想要的旧声明

建议做法:

  • ✅ Cookbook 版本化
  • ✅ 使用 Policyfile
  • ✅ Git 管理 Cookbook
  • ✅ CI 自动上传 + 可回退

六、常见误区

❌ Chef 没有自动 undo
❌ 不推荐靠 execute 手动删文件回滚
❌ 不要把回滚逻辑写进 recipe(会越写越乱)


七、总结一句话

Chef 回滚 = 重新应用旧版本 Cookbook / 属性 / Policy

如果你愿意,我可以:

  • 给你一个 Policyfile 回滚示例
  • 帮你设计 Cookbook 版本管理规范
  • 针对 Chef Infra Server / Automate 给方案

你是用的 Chef Server / Policyfile / Berkshelf / Habitat 哪一种?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI