Ansible 是一种简单而强大的自动化工具,主要用于配置管理、应用部署和任务执行。它由 Michael DeHaan 于 2012 年创建,并于 2015 年被 Red Hat 收购。Ansible 的目标是提供一种易于使用且无需复杂架构的自动化解决方案。
Ansible 的架构基于 “推送” 模式,主要由以下组件构成:
- 控制节点(Control Node):运行 Ansible 命令的主机,通常是一台服务器或个人计算机。
- 被管理节点(Managed Nodes):需要被配置或管理的目标主机。
- Inventory(主机清单):定义了被管理节点的列表,以及它们的分组信息。
- Playbooks(剧本):用 YAML 格式编写的文件,用于定义任务的执行顺序和逻辑。
- Modules(模块):Ansible 的核心功能单元,用于执行具体的操作(如文件操作、服务管理等)。
- Connection Plugins(连接插件):用于与被管理节点建立连接,最常用的是 SSH。
- 无代理(Agentless):Ansible 无需在被管理节点上安装任何代理软件,仅通过 SSH 连接即可执行任务,简化了部署和管理。
- 模块化:Ansible 提供了丰富的模块,涵盖了文件管理、服务控制、软件包安装等常见运维任务。
- 易用性:Ansible 的配置文件采用 YAML 格式,易于阅读和编写,降低了学习成本。
- 幂等性:Ansible 的任务执行具有幂等性,即多次执行相同任务的结果是一致的,不会导致意外的副作用。
- 扩展性:用户可以自定义模块和插件,以满足特定需求。
- 简单高效:Ansible 的设计简洁,易于上手,同时能够高效地完成复杂的任务。
- 安全性:基于 SSH 的连接方式确保了通信的安全性。
- 可扩展性:支持大规模部署,能够管理数千台服务器。
- 社区支持:Ansible 拥有庞大的社区,提供了丰富的文档和插件资源。
- 配置管理:自动化配置服务器、安装软件包、设置服务等。
- 应用部署:快速部署应用程序到多个服务器。
- 任务自动化:执行重复性任务,如备份、监控等。
- 多环境管理:支持跨不同操作系统和平台的统一管理。
展开代码- name: Install and start Apache hosts: webservers tasks: - name: Install httpd yum: name: httpd state: present - name: Start httpd service service: name: httpd state: started
local host:centos7(192.168.88.100)
ansible1:Ubuntu(192.168.88.120)
展开代码yum -y install epel-release

展开代码yum -y install ansible

安装完成后,通过ansible --version命令验证安装结果,确保Ansible版本信息显示正常
在CentOS 7主机上生成SSH密钥对
展开代码ssh-keygen

将公钥复制给远程主机
展开代码ssh-copy-id root@192.168.88.120

尝试通过SSH免密登录Ubuntu主机,验证登录是否成功

编辑/etc/ansible/hosts文件,添加Ubuntu主机的IP地址
展开代码vim /etc/ansible/hosts

使用ansible ping模块测试与Ubuntu主机的连接
展开代码ansible webservers -m ping

如果返回pong,则表示连接成功,Ansible安装和配置完成
setup模块用于收集目标主机的详细信息,包括硬件配置(如CPU、内存、磁盘等)、操作系统版本、网络配置、环境变量等。这些信息可以作为后续任务的参考依据,帮助运维人员更好地了解目标主机的状态。setup模块获取目标主机的详细信息,可以快速定位问题或确定配置方案。展开代码ansible webservers -m setup

copy模块是常用的工具。展开代码ansible all -m copy -a 'dest=/root src=/root/text/text1.txt'


file模块用于管理文件、目录和链接的属性,例如创建、删除、设置权限、改变所有者等。它还可以用于创建目录、删除文件等操作。file模块非常实用。展开代码ansible all -m file -a 'path=/root/text1.txt state=absent'

展开代码ansible all -m shell -a 'ps -ef|grep mysql' ansible all -m command -a 'ps -ef'

group模块用于管理用户组,包括创建、删除、修改用户组的属性等。group模块是必不可少的工具。展开代码ansible webservers -m group -a 'gid=2017 name=test'

user模块用于管理用户账户,包括创建、删除、修改用户属性(如密码、用户组、登录Shell等)。user模块非常实用。展开代码ansible webservers -m user -a 'name=test group=test'

get_url模块用于从指定的URL下载文件到目标主机的指定路径。它支持多种协议(如HTTP、HTTPS等),并可以设置文件的校验和,确保文件完整性。get_url模块非常方便。展开代码ansible all -m get_url -a 'dest=/root url=http://www.baidu.com'

yum模块用于在基于RPM的系统(如CentOS、RHEL等)上管理软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。yum模块是常用的工具。展开代码ansible 192.168.88.120 -m yum -a "name=tree state=present"

SaltStack 是一种开源的配置管理工具,由 Thomas Hatch 于 2011 年创建。它旨在提供一种高效、可扩展的解决方案,用于管理大规模基础设施。SaltStack 通过其独特的 “Master-Minion” 架构,实现了对大量服务器的集中管理。
SaltStack 的架构基于 “拉取” 模式,主要由以下组件构成:
- Master(主节点):负责管理和分发任务,存储配置数据和指令。
- Minion(从节点):被管理的主机,负责执行 Master 分发的任务。
- States(状态):定义了目标主机的期望状态,类似于 Ansible 的 Playbooks。
- Pillars(柱子):用于存储敏感数据或特定于环境的配置信息。
- Grains(谷物):描述了 Minion 的系统信息(如操作系统、CPU、内存等)。
- Beacons(信标):用于监控系统事件,并触发相应的响应。
- Master-Minion 架构:通过集中式管理,实现了对大量服务器的高效管理。
- 高并发能力:SaltStack 支持高并发通信,能够快速处理大量任务。
- 灵活性:提供了丰富的 API 和插件机制,方便用户自定义功能。
- 实时性:支持实时通信和任务执行,能够快速响应系统变化。
- 多语言支持:支持多种编程语言(如 Python、Shell 等)编写状态文件和模块。
- 高性能:SaltStack 的并发处理能力使其能够高效管理大规模集群。
- 可扩展性:支持从几十台到数千台服务器的管理。
- 灵活性:提供了丰富的自定义功能,能够满足复杂的需求。
- 实时性:能够实时监控和响应系统事件,适合动态环境。
- 大规模集群管理:适用于管理大规模数据中心或云计算环境。
- 实时监控与响应:通过信标功能实时监控系统状态,快速响应事件。
- 复杂环境管理:支持多种操作系统和平台的统一管理。
- 自动化部署:快速部署和配置应用程序及服务。
展开代码apache: pkg.installed: - name: apache2 service.running: - name: apache2 - enable: True
master端:Ubuntu--2(192.168.88.121)
minion端:Ubuntu(192.168.88.120)
展开代码apt install salt-master

启动SaltStack Master服务
展开代码systemctl start salt-master systemctl enable salt-master

展开代码apt install -y salt-minion

修改Minion端配置文件/etc/salt/minion,添加以下内容
展开代码vim /etc/salt/minion

启动Minion端服务
展开代码systemctl start salt-minion systemctl enable salt-minion

使用salt-key命令查看minion端连接情况
展开代码salt-key -L

测试salt命令验证master与minion端的通信
展开代码salt '*' test.ping salt '*' cmd.run 'uptime'

安装saltstack完成
展开代码salt 'saltminion' sys.list_modules

展开代码salt 'saltminion' sys.list_functions service

展开代码salt 'saltminion' sys.doc service.start

cmd模块用于在目标主机上执行命令。它支持多种命令执行方式,包括简单的命令执行、脚本运行等。cmd模块非常实用。展开代码salt 'saltminion' cmd.run 'free -m'

pkg模块用于管理目标主机上的软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。pkg模块是常用的工具。展开代码salt 'saltminion' pkg.install vsftpd

service模块用于管理目标主机上的服务。它支持启动、停止、重启服务,并可以查询服务状态。service模块非常实用。展开代码salt 'saltminion' service.start vsftpd salt 'saltminion' service.enable vsftpd

user模块用于管理目标主机上的用户账户。它支持创建、删除用户,修改用户属性(如密码、用户组等)。user模块是必不可少的工具。展开代码salt 'saltminion' user.add zzz

group模块用于管理目标主机上的用户组。它支持创建、删除用户组,修改用户组属性。group模块是常用的工具。展开代码salt 'saltminion' group.add test salt 'saltminion' group.adduser test zzz

file模块用于管理目标主机上的文件和目录。它支持文件复制、文件权限设置、目录创建等操作。file模块非常实用。展开代码salt 'saltminion' file.addend /etc/profile "export JAVA_HOME=/usr/local/jdk"

| 特性 | Ansible | SaltStack |
|---|---|---|
| 架构 | 无代理,基于 SSH 推送 | Master-Minion 架构,基于 ZeroMQ 拉取 |
| 安装复杂度 | 简单,无需在被管理节点上安装代理 | 需要在被管理节点上安装 Minion |
| 并发能力 | 中等,适合中小规模部署 | 高并发,适合大规模集群 |
| 实时性 | 任务执行后生效 | 支持实时监控和响应 |
| 易用性 | 配置文件简单,易于上手 | 配置复杂,学习曲线较陡 |
| 适用场景 | 中小规模部署,简单任务自动化 | 大规模集群管理,复杂环境 |
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!