littlechef, 没有 Chef server的厨师做饭

分享于 

19分钟阅读

GitHub

  繁體 雙語
Cook with Chef without a Chef Server, now for FreeBSD!
  • 源代码名称:littlechef
  • 源代码网址:http://www.github.com/tobami/littlechef
  • littlechef源代码文档
  • littlechef源代码下载
  • Git URL:
    git://www.github.com/tobami/littlechef.git
    Git Clone代码到本地:
    git clone http://www.github.com/tobami/littlechef
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/tobami/littlechef
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    LittleChef

    使用 LittleChef,你将能够快速开始与厨师,优秀的配置管理系统。

    概述

    你可能会觉得这是一个不需要 Chef server的袖珍厨师。 你的local kitchen roles roles和节点,这些都是你的本地厨房,每次启动一个厨师独奏配置时,你都可以使用捆绑的fix 命令来运行 Chef。

    它还向 Chef Solo添加了目前仅适用于 Chef server 用户的功能: 数据包搜索和 node 搜索。

    :它是如何工作

    一切都从的厨房开始,你应该在版本控制下保持它:

    无论什么时候,你都使用本地 fix 命令运行厨师独奏配置,所有的cookbooks,角色和databags都是rsynced到 /tmp/chef-solo/ 目录,以及 /etc/chef/node.json/etc/chef/solo.rb 文件,以及 Chef Solo在远程 node 中执行。

    结果是,你可以在不需要 Chef server的情况下准确地配置节点,以及你希望如何。 你的所有基础设施,包括你的节点,都将在代码中,修改控制。

    环境

    Chef不支持Solo模式下的环境,但是会自动添加一个 cookbook 库,让你在角色或者 node 中定义 chef_environment

    如果使用大厨 11,除了 cookbook 版本外,除了版本外,所有的环境功能都将出现在该框中。

    数据包搜索

    Chef Solo不支持数据包搜索。 为了能够使用搜索,需要在cookbooks目录中显示 chef-solo-search库。

    [chef search documentation] [] 中的大多数示例都是可能的,包括以下内容: search(:users,"married:true AND age:35")

    node-搜索

    通过在节点/视图中创建"node"数据包,并根据节点/服务器中定义的属性值( 在标准 Chef属性首选项规则中的结果值) 来实现 node 搜索,从而实现搜索。 还添加了一些自动属性

    munin_servers = search(:node, "role:#{node['munin']['server_role']} AND chef_environment:#{node.chef_environment}")
    日志

    配置运行的厨师独奏输出将在 node的/var/log/chef/solo.log 中找到,前面的配置运行将移动到 solo.log.1

    metadata.rb 和 ruby-角色

    LittleChef依赖于 cookbook 元数据和角色的JSON版本来正确地合并属性。 你仍然可以使用 ruby 版本,在进行更改时生成JSON版本。 如果你在本地安装了刀具,则在检测到更改的metadata.rb 时,它甚至会自动完成。 ruby 角色还没有自动转换,但计划了一个实现。

    插件插件

    你可以将自己的LittleChef任务定义为 python 插件模块。 它们应该位于 plugins 目录中。 文件名将是插件 NAME 和 MODULE 文档的描述。 每个插件应该定义一个执行函数,在 node ( 烹饪部分描述了如何运行插件) 上应用插件时,它将被执行。

    你可以在存储库插件目录中找到示例插件。

    除了少量节点外,跟踪所有内容变得越来越困难。 为了解决这个问题,我们创建了 Kitchen,这是一个非常有用的仪表板,provies概述所有节点和角色依赖性的图形化可视化。

    安装

    桌面支持

    在所有主要操作系统上进行测试: Linux,Mac OS X,Windows 和 FreeBSD

    要求

    • python 2.6 +
    • fabric 1.5 +

    安装LittleChef的最佳方法是使用 pip。 通过键入以下命令安装所需软件包:

    
    $ sudo apt-get install python-pip python-dev
    
    
    
    

    对于Debian和 Ubuntu,或者

    
    $ yum install python-pip python-devel
    
    
    
    

    对于RHEL和 CentOS。

    安装

    你可以直接从PyPI安装 LittleChef:

    
    $ pip install littlechef
    
    
    
    

    用法

    免责声明

    小心你的节点所做的 !

    一个著名的厨师:我该怎么说? - 谁都可以做饭- LittleChef: 是的。 但这并不意味着任何人都应该。

    本地设置

    要创建新厨房,请键入:

    
    $ fix new_kitchen
    
    
    
    

    这将在当前目录中创建一些文件和目录,LittleChef需要能够进行以下操作: littlechef.cfgenvironmentsroles/data_bags/nodes/cookbooks/site-cookbooks/。 你可以在电脑上创建和拥有尽可能多的厨房。

    身份验证

    要向远程节点发出命令,你需要使用sudo权限输入用户和密码。 new_kitchen 将创建一个名为 littlechef.cfg的文件。 你现在可以编辑它以输入所需的认证数据。 有几种可能:

    • 用户名和密码
    • 用户名,密码和密钥对文件
    • 对ssh配置文件的引用

    最后一个允许最大的灵活性,因为它允许你为每个主机定义不同的用户名。密码和/或者密钥。 默认情况下LittleChef将查看 ~/.ssh/config,但你始终可以在 littlechef.cfg 中指定另一个路径:

    [userinfo]user = myusernamepassword = mypasswordssh-config =/path/to/config/file

    ~/.ssh/config file: 示例

    
    Host www.cooldomain.com
    
    
     HostName www.cooldomain.com
    
    
     IdentityFile ~/.ssh/prod_rsa
    
    
     User produser
    
    
    Host *.devdomain.com
    
    
     IdentityFile ~/.ssh/dev_rsa
    
    
     User devuser
    
    
    
    

    Berkshelf支持

    littlechef 支持 Berkshelf。 如果给定文件存在,littlechef将执行 berks供应商 berksfile-cookbooks-directory,如果用户不提供 berksfile_cookbooks_directory,则使用tmp中的random目录。 如果用户想上传一些不能在Berskfile中跟踪的书,他们必须将它们放到的烹饪目录 directory。

    [kitchen]berksfile = Berksfileberksfile_cookbooks_directory = berks-cookbooks

    其他配置选项

    还可以选择替代在节点上使用的目录以同步你的厨房:

    [kitchen]node_work_path =/tmp/chef-solo

    你可以使用加密数据包。 创建密钥,使用 knife-solo_data_bag gem 创建加密数据包,并为 encrypted_data_bag_secret file: 指定路径。

    [userinfo]encrypted_data_bag_secret = ~/path/to/encrypted_data_bag_secret

    这将把encrypted_data_bag_secret放在 /etc/chef/encrypted_data_bag_secret 带有 perms 0600的权限 root:root。 chef solo将自动使用它在你的食谱中使用 Chef::EncryptedDataBagItem.load。 它也将移除 /etc/chef/encrypted_data_bag_secret 运行时来自 node的文件。

    如果你不愿意在远程 node 中保留数据袋,那么可以告诉littlechef在运行结束时删除它们:

    [userinfo]remove_data_bags=true
    [userinfo]autodeploy_chef=true

    如果设置为 true,将在每次部署厨师独奏之前执行检查,如果不存在,将使用复合方法安装。

    [connection]gateway = hub.example.com

    如果你想在chef_solo运行时使用 http/https代理。 你必须在配置文件中添加以下条目。 它们将使用配置好的http/https代理创建 solo.rb 配置文件。

    [connection]http_proxy = "http://172.14.1.12:8888"https_proxy = "http://172.14.1.12:8888"

    sync-packages 部分允许你定义远程目录和本地目录,然后在每次运行时同步这些目录。

    [sync-packages]dest-dir =/srv/packageslocal-dir =./packages

    部署厨师独奏

    为了方便,有一个命令可以让你将chef部署到 node。

    最好的方法是使用聚合方法 getchef: fix node:MYNODE deploy_chef:version=11.12

    你也可以在不要求确认的情况下安装厨师独奏: fix node:MYNODE deploy_chef:ask=no

    注意,如果你已经在节点上安装了 Chef,那么你将不需要这个。 另外,如果以前使用任何其他程序安装过厨师,请不要使用deploy_chef安装方法,首先删除厨师可能是个不错的主意。

    多跳littlechef设置

    如果节点不能直接访问,则可能需要指定网关主机。 fix命令将连接到指定的主机并发出来自该主机的所有下列连接。 所有ssh通信都将通过这里网关连接进行隧道连接。 如果节点位于防火墙之后,并且只有一个主机可以从当前网络位置访问,则可以使用这里选项。

    [connection]gateway = hub.example.com

    在发出修复命令之后,这将连接到 hub.example.com. 所有 node 连接都将从 hub.example.com. 完成

    为了能够正确地连接到 hub.example.com,应该在配置中定义相同的主机。 因为最终连接是由 hub.example.com 发出的,所以任何必需的ssh密钥都必须在它或者用户需要设置 ssh代理转发 forwarding。

    烹饪

    注意:不要在厨房外做饭。

    命令列表:

    • fix -v: 显示版本号
    • fix -l: 显示所有可用订单的列表
    • fix -y: 自动提示提示;假设"是"作为所有提示的答案并运行非交互式
    • fix node:MYNODE role:MYROLE: 在给定的node 上运行完整的厨师独奏配置。 使用ssh_config主机名指令
    • 配置多个节点。对于所有"修复 node"命令,具有属性 dummy 设置为 true的节点将不会被配置,并且将被跳过
    • fix node:all: 它将应用所有的角色。配方和属性,为 nodes/ 中的每个 node
    • 将属性 chef_environment 设置为 MYENV的所有节点配置为 fix --env=MYENV node:all
    • fix node:MYNODE role:MYROLE: 在给定节点上应用给定的角色
    • fix node:MYNODE recipe:MYRECIPE: 在给定节点上应用给定的配方
    • fix nodes_with_role:ROLE1: 将所有具有给定角色的节点配置为 run_list
    • fix nodes_with_role:ROL*: 配置至少有一个角色的所有节点,它们的run_list从'角色角色'开始
    • fix nodes_with_recipe:MYRECIPE: 将所有具有给定配方的节点配置在run_list中
    • fix nodes_with_tag:MYTAG: 配置所有已经分配标记 MYTAG的节点。 --include-guests 还将配置属于每个主机的客户机节点,这些主机具有指定的标记
    • fix node:MYNODES ssh:"my shell command" :在 node 上执行给定的命令
    • fix node:MYNODES plugin:save_ip: 获取这里 node的实际IP并将它的保存到 ipaddress 属性中

    选项:

    • fix --env=MYENV nodes_with_role:ROLE1 :将环境中的所有节点配置为在它的run_list中具有特定角色。
    • fix --verbose node:MYNODE: 大厨 0.10.6介绍了 verbose_logging 选项。 当 false 时,"处理"消息不再显示。 这是LittleChef的新默认值,因此你现在只能看到这里配置运行中发生了什么更改。 --verbose 把这个重新打开。
    • fix --debug node:MYNODE: 你可以使用 fix --debug 启动所有命令,以查看所有厨师独奏调试信息。 此外,node 文件和 node databag不会从 node 中删除,verbose也将是 true
    • fix --no-report node:MYNODE: 将阻止Chef输出的日志记录到/var/log/chef/
    • fix --why-run node:MYNODE: 将在 Whyrun 模式中配置 node

    一旦 node 具有配置文件,最常用的命令就是 fix node:MYNODE,它可以重复调整 node的菜谱和属性。

    并行配置节点

    默认情况下LittleChef可以串行配置节点,但是它也可以使用并行的fabric SSH支持来并行配置多个节点。 支持所有命令( node。nodes_with_role。ssh。角色和菜谱)

    • fix --concurrency node:NODELIST: 将并行配置多个节点
    • fix --concurrency node:NODELIST ssh:COMMAND :将在并行的多个节点上运行ssh命令
    • fix --concurrency 5 node:NODELIST :将并行配置多个节点,但限制为 5个连接

    查询库存

    • fix list_nodes: 列出所有已经配置的节点,显示它的相关的配方和角色
    • fix list_nodes_detailed: 与上面相同,但它也显示所有属性
    • fix list_nodes_with_recipe:MYRECIPE :列出与配方 MYRECIPE 相关联的节点
    • fix list_nodes_with_role:MYROLE: 显示与角色 MYROLE 相关联的节点
    • fix list_nodes_with_tag:MYTAG: 显示指定了标记 MYTAG的节点。 --include-guests 还将显示属于每个主机的客户机节点,这些主机具有指定的标记
    • fix list_envs: 列出所有可用的环境
    • fix list_recipes: 列出所有可用的配方
    • fix list_recipes_detailed: 与上面相同,但显示说明,版本,依赖项和属性
    • fix list_roles: 列出所有可用的角色
    • fix list_roles_detailed: 与上面相同,但显示说明和属性
    • fix list_plugins: 显示可用插件的列表

    使用LittleChef作为库

    你可以将 littlechef.py 导入你自己的python 项目中。 下面的脚本等效于使用 fix 命令:

    from littlechef import runner as lc
    lc.env.user ='MyUsername'lc.env.password ='MyPassword'lc.env.host_string ='MyHostnameOrIP'lc.deploy_chef(gems='yes', ask='no')
    lc.recipe('MYRECIPE') #Applies <MYRECIPE> to <MyHostnameOrIP>lc.node('MyHostnameOrIP') #Applies the saved nodes/MyHostnameOrIP.json configuration

    性能提示

    你可以通过重用现有连接来大大减少SSH连接设置时间。 通过将 ControlMaster 指令添加到ssh配置中,可以在Unix系统上执行以下操作:

    
    #~/.ssh/config
    
    
    Host *
    
    
     ControlMaster auto
    
    
     ControlPath/tmp/ssh-%r@%h:%p
    
    
    
    

    其他教程材料

    获取帮助

    如有关于使用 LittleChef,或者分享任何想法或者建议的帮助,请在LittleChef讨论小组网站上发表帖子。

    报告 Bug

    Build Status

    如果你发现 Bug,请在 https://github.com/tobami/littlechef/issues 报告。

    Happy !


    Server  CHEF  
    相关文章