【问题标题】:How to update the chef-client version?如何更新厨师客户端版本?
【发布时间】:2013-12-10 22:27:22
【问题描述】:

我有一个运行 chef 11.4.0 的 Chef 客户端,这意味着,当我在机器上运行 chef 时,它显示 Starting Chef Client, version 11.4.0。我知道最新的 chef gem 是 11.8.0(本地 knife --version 给我Chef: 11.8.0),我想在客户端运行最新版本,但我找不到任何标准方法。

对不起,如果这个问题没有多大意义,可能是我对整个厨师的理解不准确。

编辑:我尝试进入客户端计算机并运行sudo apt-get update ; sudo apt-get install chef,如https://wiki.opscode.com/display/chef/Using+Chef+to+Upgrade+Chef 中所述,但它说它已经是最新版本。

【问题讨论】:

  • 您使用的是哪个 apt repo?操作码?这仅适用于 Chef 10,不适用于 Chef 11(很遗憾)。不要再使用那个 apt-repo。
  • sudo gem update chef 呢?
  • 不要使用wiki.opscode.com,因为它已过时且不受管理。请改用docs.opscode.com。来自 IRC #chef 频道的人告诉我这一点。

标签: chef-infra


【解决方案1】:

以下对我有用:

$ chef-client -version
Chef: 11.4.0

$ curl -L https://www.opscode.com/chef/install.sh | sudo bash

$ chef-client -version
Chef: 11.8.0

下载的“install.sh”脚本将确定正确的操作系统并为您的平台下载适当的软件包。 (这些包都可以从 S3 存储库中获得)

另请参阅 Chef 网站上的 install page..

更新

knife ssh 'name:[* TO *]' 'curl -L https://www.opscode.com/chef/install.sh | sudo bash'

如果您位于公司防火墙后面,则可以为您的平台下载软件包并将其安装到您的软件包存储库中。您不必为了方便而使用“install.sh”脚本。

【讨论】:

  • 我明白了,但这是更新主厨版本的正确程序吗?我的意思是,整个主厨结构使得有必要在某些时候通过 ssh 进入客户端并按照您的描述手动更新主厨版本?我认为有一个更好的机制。
  • @MarceloDiniz Chef 是一种基于代理的技术,因此存在标准的鸡和蛋问题。在没有代理的情况下如何安装代理。这就是刀的用武之地(见更新)。
  • 很公平,已接受。有点遗憾的是,这是答案,因为它基本上意味着“要更新客户端上的厨师,您必须运行文档中不太明显的自定义脚本”
  • @MarceloDiniz 明白了。也许厨师文档应该更好地解释如何维护客户端。 Stephen 提到了更新程序手册,我对此深表怀疑……它在工作时效果很好……归根结底,我认为您总是需要一个外部机制来保持基于代理的技术最新-date(我使用 rundeck,一个基于 SSH 的自动化工具。用于暴力更新和重置损坏的厨师客户端)。使用多种技术听起来很疯狂,但对我有用。
  • 我们使用这种技术,但也明确包含我们要安装的版本,这是受支持的。我们执行的 curl 命令是: curl -LO opscode.com/chef/install.sh && sudo bash ./install.sh -v 11.8.2
【解决方案2】:

该脚本需要参数。所以你也可以这样运行它:

(echo "version=11.12.8"; curl -L https://www.opscode.com/chef/install.sh) | sudo bash

安装特定版本

【讨论】:

    【解决方案3】:

    如果你想要一个特定的版本,试试这个:

    # install chef 13
    curl -L https://www.opscode.com/chef/install.sh | sudo bash -s -- -v 13
    

    如果您发现迁移到更新版本的工作量太大,您甚至可以降级。

    (学分:http://ionrails.com/2013/04/19/downgrading-chef-client/

    【讨论】:

    • 我正在寻找一个特定的主要版本,这很有帮助。
    【解决方案4】:

    您可以使用omnibus_updater 食谱。

    【讨论】:

    • 但我真的同意更新 chef-client 仍然是一个 PITA。将软件包放在 opscode 的(例如)apt 存储库中是我的首选。
    • 我只是想确保我做对了。例如,我今天运行 Knife 并引导一个节点,它有 Chef 11.8.0。 6个月后,当前的厨师版本是11.20.0,然后我更新机器运行刀(只是更新厨师gem)并再次引导节点,它仍然有厨师11.8.0(现在旧)。并且没有默认的解决方案。是这样吗?
    • 引导节点时,默认引导模板会安装您在工作站上运行的版本(或设置knife[:bootstrap_version])。我想说您不想进行手动升级(通过运行另一个knife bootstrap,但想通过厨师本身进行部署)。但是,如果您的工作站上有不同的 chef 版本,那么您将把它部署到节点上,是的。
    【解决方案5】:

    是的,确实正确。 卷曲-Lhttps://www.opscode.com/chef/install.sh |须藤重击 将尝试在您的系统上获取并安装最新的客户端版本。

    无论如何,在使用 chef-server 执行任务时。 chef-client 永远不会提示您任何错误,例如:chef-client version not updated or can't be used.

    【讨论】: