#Ansible
简介
- 特点 :Ansible 是基于 Python 开发的,以简单易用、免客户端安装(被管理节点无需额外软件)等特点受到广泛欢迎。它默认使用SSH 协议对远程主机进行配置管理,通过模块化的方式实现各种自动化任务。
- 架构 :Ansible 的架构相对简单,主要由控制节点(Manage Node)和被管理节点(ManagedNode)组成。控制节点是运行 Ansible 命令的机器,被管理节点是需要被配置和管理的目标机器。
使用
- 安装 :在官网https://www.ansible.com/获取安装包,或通过系统的包管理工具安装 Ansible。
- 基本配置 :安装完成后,需要配置 Ansible的配置文件(通常位于/etc/ansible/ansible.cfg),以及定义被管理节点的清单文件(Inventory文件,通常位于/etc/ansible/hosts)。在清单文件中,可以按组的方式列出被管理的主机。
- 基本命令 :Ansible 提供了大量的模块用于执行各种任务,如文件管理、包管理、服务管理等。可以通过ansible命令直接执行ad-hoc(一次性)任务。
例如,要查看被管理节点的主机名,可以执行以下命令:
ansible all -m ping
这里的all
表示对所有被管理节点执行,-m ping
表示使用 ping 模块测试连接。
要安装一个软件包(如 nginx),可以执行:
ansible all -m apt -a "name=nginx state=present"
这里-m apt
指定使用 apt 模块(适用于 Debian 系列系统),-a
后面是模块的参数,name=nginx
指定软件包名称,state=present
表示确保软件包已安装。
- 编写 Playbook :Playbook 是 Ansible 的核心功能之一,它允许你定义一系列任务,按顺序执行以实现复杂的配置和部署。Playbook 使用 YAML 格式编写。
以下是一个简单的 Playbook 示例,用于安装并启动 Nginx:
---
- name: Install and start Nginx
hosts: all
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx service
service:
name: nginx
state: started
enabled: yes
将上述内容保存为nginx.yml
文件,然后使用以下命令执行 Playbook:
ansible-playbook nginx.yml
Playbook 中的hosts
指定对哪些组的主机执行任务,become: yes
表示需要以管理员权限执行任务,tasks
部分定义了具体的任务列表。
Ansible 的其他功能
- 模板 :Ansible 提供模板功能,允许你使用变量来生成配置文件。可以使用 Jinja2 模板引擎来创建动态配置文件。
- 角色 :角色是一种组织 Playbook 和相关文件的方式,它允许你将 Playbook 分解为可重用的模块,便于管理和共享。
- 回调插件 :Ansible 提供了回调插件机制,可以自定义任务执行时的输出格式,或者在任务执行过程中触发其他操作。
Puppet
简介
Puppet 是一款开源的自动化配置管理工具,它使用声明式语言来定义系统配置,用户只需描述系统应有的状态,Puppet 会自动处理如何将系统配置达到该状态。
使用
- 安装 :在官网https://puppet.com/下载适合操作系统的安装包,按指引完成安装。
- 架构部署 :通常采用主从架构,Master 节点负责存储配置定义和编译配置,Agent 节点安装在被管理机器上,定期向 Master发起连接请求,获取配置并应用。
- 定义配置(Manifests) :使用 Puppet 的配置语言编写 Manifests 文件,以 .pp为后缀。这些文件定义了系统资源的配置,如文件、包、服务等。例如,要确保 nginx 已安装且服务已启动,可编写如下代码:
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
subscribe => Package['nginx'],
}
- 应用配置 :在 Agent 节点执行 puppet agent --test 命令,即可应用配置,使系统达到预期状态。Master节点通过 HTTP 或 HTTPS 与 Agent 节点通信,定期推送配置更新。
Chef
简介 :
Chef 使用纯 Ruby 编写的配方(Recipes)和食谱(Cookbooks)来定义基础设施配置和应用程序部署,具有灵活、强大的自动化能力,能实现复杂配置任务的自动化。
使用 :
- 安装 :从https://www.chef.io/获取安装包,根据操作系统选择并安装 Chef Development Kit(Chef DK)。
- 架构搭建 :一般有 Chef Server、Workstation 和 Node 组成。Chef Server 存储 Cookbooks、节点配置等信息; Workstation 是管理配置的中心,用于开发、测试和上传 Cookbooks;Node 是被管理的机器,安装 Chef Client,定期与 Chef Server 通信获取配置。
- 编写 Cookbooks 和 Recipes:创建一个 Cookbook,包含多个 Recipes。Recipe是具体的配置脚本,例如,安装 Apache 并启动服务的 Recipe:
package 'apache2'
service 'apache2' do
action [:enable, :start]
end
- 上传和应用配置:将 Cookbook 从 Workstation 上传至 Chef Server,使用 knife cookbook upload <cookbook_name> 命令。在 Node 上执行 Chef Client,运行 chef-client 命令,它会从 Chef Server 获取分配的 Cookbooks 并应用配置。