蚊章汇 - 配置管理
type: channel
link: https://linuxcn.bwsl.wang/tag/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/
items: 五大最流行的配置管理工具
items: 如何在 Ubuntu 上安装配置管理系统 Chef （大厨）
items: 通过 SaltStack 管理服务器配置
items: Ansible ：一个配置管理和IT自动化工具

五大最流行的配置管理工具
type: item
date: 2019-02-02T01:52:58+08:00
description: 了解一下配置管理工具，以找出哪个最适合你的 DevOps 组织。DevOps 正因为有提高产品质量、缩短产品开发时间等优势，目前备受业界关注，同时也在长足发展当中。DevOps 的核心价值观是 团队文化 Culture 、 自动化 Automation 、 评估 Measurement 和 分享 Sharing （CAMS），同时，团队对 DevOps 的执行力也是 DevOps 能否成功的重要因素。团队文化让大家团结一致；自动化是 DevOps 的基础；评估保证了及时的改进；分享让 CAMS 成为一个完整的循环过程。DevOps 的另一个思想是任何东西，包括服务器、数据库、网络、日志文件、应用配置、文档、自动化测试、部署流程等，都可以通过代码来管理。在本文中，我主要介绍配置管理的自动化。配置管理工具作为 基础架构即代码 Infrastructure as Code （IaC）的一部分，支持使用经过测试和验证的软件开发实践，通过明文定义文件管理和配置数据中心。DevOps 团队只需要通过操作简单的配置文件，就可以实现应用开发中包括版本控制、测试、小型部署、设计模式在内的这些最佳实践。总而言之，配置管理工具实现了通过编写代码来使基础架构的配置和管理变得自动化。为什么要使用配置管理工具？配置管理工具可以提高应用部署和变更的效率，还可以让这些流程变得可重用、可扩展、可预测，甚至让它们维持在期望的状态，从而让资产的可控性提高。使用配置管理工具的优势还包括：让代码遵守编码规范，提高代码可读性；具有 幂等性 Idempotency ，也就是说，无论执行多少次重复的配置管理操作，得到的结果都是一致的；分布式的设计可以方便地管理大量的远程服务器。配置管理工具主要分为 拉取 pull 模式和 推送 push 模式。拉取模式是指安装在各台服务器上的 代理 agent 定期从 中央存储库 central repository 拉取最新的配置并应用到对应的服务器上；而推送模式则由 中央服务器 central server 的中央服务器会触发其它受管服务器的更新。五大最流行的配置管理工具目前配置管理工具有很多，不同的配置管理工具都有自己最适合的使用场景。而对于下面五个我按照字母顺序列出的配置管理工具，都对 DevOps 有明显的帮助：全都具有开源许可证、使用外部配置文件、支持无人值守运行、可以通过脚本自定义运行。下面对它们的介绍都来源于它们的软件库和官网内容。Ansible“Ansible 是一个极其简洁的 IT 自动化平台，可以让你的应用和系统以更简单的方式部署。不需要安装任何代理，只需要使用 SSH 的方式和简单的语言，就可以免去脚本或代码部署应用的过程。”——GitHub Ansible 代码库官网文档社区Ansible 是我最喜欢的工具之一，我在几年前就开始使用了。你可以使用 Ansible 在命令行中让多个服务器执行同一个命令，也可以使用 YAML 格式的 剧本 playbook 来让它自动执行特定的操作，这促进了技术团队和非技术团队之间的沟通。简洁、无代理、配置文件对非技术人员友好是它的几个主要优点。由于 Ansible 不需要代理，因此对服务器的资源消耗会很少。Ansible 默认使用的推送模式需要借助 SSH 连接，但 Ansible 也支持拉取模式。剧本 可以使用最少的命令集编写，当然也可以扩展为更加精细的自动化任务，包括引入角色、变量和其它人写的模块。你可以将 Ansible 和其它工具（包括 Ansible Works、Jenkins、RunDeck、ARA 等）结合起来使用，因为这些工具 提供了运行剧本时的可追溯性，这样就可以创建控制流程的中央控制台。CFEngine“CFEngine 3 是一个流行的开源配置管理系统，它主要用于为大规模的系统提供自动化配置和维护。”——GitHub CFEngine 代码库官网文档社区CFEngine 最早在 1993 年由 Mark Burgess 作为自动配置管理的科学方法提出，目的是降低计算机系统配置中的熵，最终收敛到期望的配置状态，同时还阐述了幂等性是让系统达到期望状态的能力。Burgess 在 2004 年又提出了 承诺理论 Promise Theory ，这个理论描述了代理之间自发合作的模型。CFEngine 的最新版本已经用到了承诺理论，在各个服务器上的代理程序会从中央存储库拉取配置。CFEngine 的配置对专业技能要求较高，因此它比较适合技术团队使用。Chef“为整个基础架构在配置管理上带来便利的一个系统集成框架。”——GitHub Chef 代码库官网文档社区Chef 通过由 Ruby 编写的“ 菜谱 recipe ”来让你的基础架构保持在最新、最兼容的状态，这些“菜谱”描…

如何在 Ubuntu 上安装配置管理系统 Chef （大厨）
type: item
date: 2015-08-10T21:53:00+08:00
description: Chef是面对IT专业人员的一款配置管理和自动化工具，它可以配置和管理你的基础设施（设备），无论它在本地还是在云上。它可以用于加速应用部署并协调多个系统管理员和开发人员的工作，这包括可支持大量的客户群的成百上千的服务器和程序。chef最有用的是让基础设施变成代码。一旦你掌握了Chef，你可以获得自动化管理你的云端基础设施或者终端用户的一流的网络IT支持。下面是我们将要在本篇中要设置和配置Chef的主要组件。安装Chef的要求和版本我们将在下面的基础环境下设置Chef配置管理系统。管理和配置工具：Chef 基础操作系统Ubuntu 14.04.1 LTS (x86\_64)Chef ServerVersion 12.1.0Chef ManageVersion 1.17.0Chef Development KitVersion 0.6.2内存和CPU4 GB , 2.0+2.0 GHzChef服务端的安装和配置Chef服务端是核心组件，它存储配置以及其他和工作站交互的配置数据。让我们在他们的官网https://www.chef.io下载最新的安装文件。我使用下面的命令来下载和安装它。1) 下载Chef服务端root@ubuntu-14-chef:/tmp# wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.1.0-1_amd64.deb 2) 安装Chef服务端root@ubuntu-14-chef:/tmp# dpkg -i chef-server-core_12.1.0-1_amd64.deb 3) 重新配置Chef服务端现在运行下面的命令来启动所有的chef服务端服务，这一步也许会花费一些时间，因为它需要由许多不同一起工作的服务组成一个可正常运作的系统。root@ubuntu-14-chef:/tmp# chef-server-ctl reconfigure chef服务端启动命令'chef-server-ctl reconfigure'需要运行两次，这样就会在安装后看到这样的输出。Chef Client finished, 342/350 resources updated in 113.71139964 seconds opscode Reconfigured! 4) 重启系统安装完成后重启系统使系统能最好的工作，不然我们或许会在创建用户的时候看到下面的SSL连接错误。ERROR: Errno::ECONNRESET: Connection reset by peer - SSL_connect 5) 创建新的管理员运行下面的命令来创建一个新的管理员账户及其配置。创建过程中，用户的RSA私钥会自动生成，它需要保存到一个安全的地方。--file选项会保存RSA私钥到指定的路径下。root@ubuntu-14-chef:/tmp# chef-server-ctl user-create kashi kashi kashi kashif.fareedi@gmail.com kashi123 --filename /root/kashi.pem Chef服务端的管理设置Chef Manage是一个针对企业级Chef用户的管理控制台，它提供了可视化的web用户界面，可以管理节点、数据包、规则、环境、Cookbook 和基于角色的访问控制（RBAC）。1) 下载Chef Manage从官网复制链接并下载chef manage的安装包。root@ubuntu-14-chef:~# wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/opscode-manage_1.17.0-1_amd64.deb 2) 安装Chef Manage使用下面的命令在root的家目录下安装它。root@ubuntu-14-chef:~# chef-server-ctl install opscode-manage --path /root 3) 重启Chef Manage和服务端安装完成后我们需要运行下面的命令来重启chef manage和服务端。root@ubuntu-14-chef:~# opscode-manage-ctl reconfigure root@ubuntu-14-chef:~# chef-server-ctl reconfigure Chef Manage网页控制台我们可以使用localhost或它的域名来访问网页控制台，并用已经创建的管理员登录1) Chef Manage创建新的组织你或许被要求创建新的组织，或者也可…

通过 SaltStack 管理服务器配置
type: item
date: 2015-02-22T20:39:00+08:00
description: 我在搜索Puppet的替代品时，偶然间碰到了Salt。我喜欢puppet，但是我又爱上Salt了:)。我发现Salt在配置和使用上都要比Puppet简单，当然这只是一家之言，你大可不必介怀。另外一个爱上Salt的理由是，它可以让你从命令行管理服务器配置，比如：要通过Salt来更新所有服务器，你只需运行以下命令即可salt '*' pkg.upgrade 安装SaltStack到Linux上如果你是在CentOS 6/7上安装的话，那么Salt可以通过EPEL仓库获取到。而对于Pi和Ubuntu Linux用户，你可以从这里添加Salt仓库。Salt是基于python的，所以你也可以使用‘pip’来安装，但是你得用yum-utils或是其它包管理器来自己处理它的依赖关系。Salt采用服务器-客户端模式，服务器端称为领主，而客户端则称为下属。安装并配置Salt领主[root@salt-master~]# yum install salt-master Salt配置文件位于/etc/salt和/srv/salt。Salt虽然可以开箱即用，但我还是建议你将日志配置得更详细点，以方便日后排除故障。[root@salt-master ~]# vim /etc/salt/master # 默认是warning，修改如下 log_level: debug log_level_logfile: debug [root@salt-master ~]# systemctl start salt-master 安装并配置Salt下属[root@salt-minion~]#yum install salt-minion # 添加你的Salt领主的主机名 [root@salt-minion~]#vim /etc/salt/minion master: salt-master.com # 启动下属 [root@salt-minion~] systemctl start salt-minion 在启动时，下属客户机会生成一个密钥和一个id。然后，它会连接到Salt领主服务器并验证自己的身份。Salt领主服务器在允许下属客户机下载配置之前，必须接受下属的密钥。在Salt领主服务器上列出并接受密钥# 列出所有密钥 [root@salt-master~] salt-key -L Accepted Keys: Unaccepted Keys: minion.com Rejected Keys: # 使用id 'minion.com'命令接受密钥 [root@salt-master~]salt-key -a minion.com [root@salt-master~] salt-key -L Accepted Keys: minion.com Unaccepted Keys: Rejected Keys: 在接受下属客户机的密钥后，你可以使用‘salt’命令来立即获取信息。Salt命令行实例# 检查下属是否启动并运行 [root@salt-master~] salt 'minion.com' test.ping minion.com: True # 在下属客户机上运行shell命令 [root@salt-master~]# salt 'minion.com' cmd.run 'ls -l' minion.com: total 2988 -rw-r--r--. 1 root root 1024 Jul 31 08:24 1g.img -rw-------. 1 root root 940 Jul 14 15:04 anaconda-ks.cfg -rw-r--r--. 1 root root 1024 Aug 14 17:21 test # 安装/更新所有服务器上的软件 [root@salt-master ~]# salt '*' pkg.install git salt命令需要一些组件来发送信息，其中之一是下属客户机的id，而另一个是下属客户机上要调用的函数。在第一个实例中，我使用‘test’模块的‘ping’函数来检查系统是否启动。该函数并不是真的实施一次ping，它仅仅是在下属客户机作出回应时返回‘真’。‘cmd.run’用于执行远程命令，而‘pkg’模块包含了包管理的函数。本文结尾提供了全部内建模块的列表。颗粒实例Salt使用一个名为颗粒（Grains）的界面来获取系统信息。你可以使用颗粒在指定属性的系统上运行命令。[root@vps4544 ~]# salt -G 'os:Centos' test.ping minion: True 更多颗粒实例，请访问http://docs.saltstack.com/en/latest/topics/targeting/g…

Ansible ：一个配置管理和IT自动化工具
type: item
date: 2014-11-14T00:04:30+08:00
description: 今天我来谈谈 ansible，一个由 Python 编写的强大的配置管理解决方案。尽管市面上已经有很多可供选择的配置管理解决方案，但他们各有优劣，而 ansible 的特点就在于它的简洁。让 ansible 在主流的配置管理系统中与众不同的一点便是，它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于，如果需要的话，你可以在不止一个地方控制你的整个基础架构。最后一点是它的正确性，或许这里有些争议，但是我认为在大多数时候这仍然可以作为它的一个优点。说得足够多了，让我们来着手在 RHEL/CentOS 和基于 Debian/Ubuntu 的系统中安装和配置 Ansible。准备工作发行版：RHEL/CentOS/Debian/Ubuntu LinuxJinja2：Python 的一个对设计师友好的现代模板语言PyYAML：Python 的一个 YAML 编码/反编码函数库paramiko：纯 Python 编写的 SSHv2 协议函数库 （译者注：原文对函数库名有拼写错误）httplib2：一个功能全面的 HTTP 客户端函数库本文中列出的绝大部分操作已经假设你将在 bash 或者其他任何现代的 shell 中以 root 用户执行。Ansible 如何工作Ansible 工具并不使用守护进程，它也不需要任何额外的自定义安全架构，因此它的部署可以说是十分容易。你需要的全部东西便是 SSH 客户端和服务器了。 +-----------------+ +---------------+ |安装了 Ansible 的| SSH | 文件服务器1 | |Linux/Unix 工作站|<------------------>| 数据库服务器2 | 在本地或远程 +-----------------+ 模块 | 代理服务器3 | 数据中心的 192.168.1.100 +---------------+ Unix/Linux 服务器 其中：192.168.1.100 - 在你本地的工作站或服务器上安装 Ansible。文件服务器1到代理服务器3 - 使用 192.168.1.100 和 Ansible 来自动管理所有的服务器。SSH - 在 192.168.1.100 和本地/远程的服务器之间设置 SSH 密钥。Ansible 安装教程ansible 的安装轻而易举，许多发行版的第三方软件仓库中都有现成的软件包，可以直接安装。其他简单的安装方法包括使用 pip 安装它，或者从 github 里获取最新的版本。若想使用你的软件包管理器安装，在基于 RHEL/CentOS Linux 的系统里你很可能需要 EPEL 仓库。在基于 RHEL/CentOS Linux 的系统中安装 ansible输入如下 yum 命令:$ sudo yum install ansible 在基于 Debian/Ubuntu Linux 的系统中安装 ansible输入如下 apt-get 命令:$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible 使用 pip 安装 ansiblepip 命令是一个安装和管理 Python 软件包的工具，比如它能管理 Python Package Index 中的那些软件包。如下方式在 Linux 和类 Unix 系统中通用：$ sudo pip install ansible 从源代码安装最新版本的 ansible你可以通过如下命令从 github 中安装最新版本：$ cd ~ $ git clone git://github.com/ansible/ansible.git $ cd ./ansible $ source ./hacking/env-setup 当你从一个 git checkout 中运行 ansible 的时候，请记住你每次用它之前都需要设置你的环境，或者你可以把这个设置过程加入你的 bash rc 文件中：# 加入 BASH RC $ echo "export ANSIBLE_HOSTS=~/ansible_hosts" >> ~/.bashrc $ echo "source ~/ansible/hacking/env-setup" >> ~/.bashrc ansible 的 hosts 文件包括了一系列它能操作的主机。默认情况下 ansible 通过路径 /etc/ansible/hosts 查找 hosts 文件，不过这个行为也是可以更改的，这样…