目录
Ansible
详细描述
1. 简介
Ansible 是一种简单而强大的自动化工具,主要用于配置管理、应用部署和任务执行。它由 Michael DeHaan 于 2012 年创建,并于 2015 年被 Red Hat 收购。Ansible 的目标是提供一种易于使用且无需复杂架构的自动化解决方案。
2. 架构
Ansible 的架构基于 “推送” 模式,主要由以下组件构成:
控制节点(Control Node):运行 Ansible 命令的主机,通常是一台服务器或个人计算机。
被管理节点(Managed Nodes):需要被配置或管理的目标主机。
Inventory(主机清单):定义了被管理节点的列表,以及它们的分组信息。
Playbooks(剧本):用 YAML 格式编写的文件,用于定义任务的执行顺序和逻辑。
Modules(模块):Ansible 的核心功能单元,用于执行具体的操作(如文件操作、服务管理等)。
Connection Plugins(连接插件):用于与被管理节点建立连接,最常用的是 SSH。
3. 特点
无代理(Agentless):Ansible 无需在被管理节点上安装任何代理软件,仅通过 SSH 连接即可执行任务,简化了部署和管理。
模块化:Ansible 提供了丰富的模块,涵盖了文件管理、服务控制、软件包安装等常见运维任务。
易用性:Ansible 的配置文件采用 YAML 格式,易于阅读和编写,降低了学习成本。
幂等性:Ansible 的任务执行具有幂等性,即多次执行相同任务的结果是一致的,不会导致意外的副作用。
扩展性:用户可以自定义模块和插件,以满足特定需求。
4. 优势
简单高效:Ansible 的设计简洁,易于上手,同时能够高效地完成复杂的任务。
安全性:基于 SSH 的连接方式确保了通信的安全性。
可扩展性:支持大规模部署,能够管理数千台服务器。
社区支持:Ansible 拥有庞大的社区,提供了丰富的文档和插件资源。
5. 适用场景
配置管理:自动化配置服务器、安装软件包、设置服务等。
应用部署:快速部署应用程序到多个服务器。
任务自动化:执行重复性任务,如备份、监控等。
多环境管理:支持跨不同操作系统和平台的统一管理。
6. 简单的playbook示例
- 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)
一、安装Ansible
yum -y install epel-release
yum -y install ansible
安装完成后,通过ansible --version
命令验证安装结果,确保Ansible版本信息显示正常
二、配置SSH无密码登录
在CentOS 7主机上生成SSH密钥对
ssh-keygen
将公钥复制给远程主机
ssh-copy-id root@192.168.88.120
尝试通过SSH免密登录Ubuntu主机,验证登录是否成功
三、配置Ansible主机清单
编辑/etc/ansible/hosts
文件,添加Ubuntu主机的IP地址
vim /etc/ansible/hosts
使用ansible ping
模块测试与Ubuntu主机的连接
ansible webservers -m ping
如果返回pong
,则表示连接成功,Ansible安装和配置完成
模块操作示例
1. Setup模块
-
功能描述:
setup
模块用于收集目标主机的详细信息,包括硬件配置(如CPU、内存、磁盘等)、操作系统版本、网络配置、环境变量等。这些信息可以作为后续任务的参考依据,帮助运维人员更好地了解目标主机的状态。 -
应用场景:在进行系统配置、软件安装或故障排查时,通过
setup
模块获取目标主机的详细信息,可以快速定位问题或确定配置方案。
ansible webservers -m setup
2. Copy模块
-
功能描述:该模块可实现从管理机向节点拷贝静态文件,并且设置合理的文件权限。Copy模块在复制文件时会先比较一下文件的checksum(校验和),如果相同则不会复制,返回状态为OK;如果不同才会复制,返回状态为changed。
-
应用场景:在配置管理、部署应用程序或分发配置文件时,
copy
模块是常用的工具。
ansible all -m copy -a 'dest=/root src=/root/text/text1.txt'
3. File模块
-
功能描述:
file
模块用于管理文件、目录和链接的属性,例如创建、删除、设置权限、改变所有者等。它还可以用于创建目录、删除文件等操作。 -
应用场景:在进行文件系统管理、配置文件修改或清理工作时,
file
模块非常实用。
ansible all -m file -a 'path=/root/text1.txt state=absent'
4. Command模块和shell模块
- Command模块可以运行节点权限范围所有的Shell命令,但是command模块执行的命令是获取不到$HOME这样的环境变量的,还有一些运算符(>、<等),也不支持管道符
- Shell模块是command模块的增强版,他可以执行远程主机的Shell脚本文件,也支持管道
ansible all -m shell -a 'ps -ef|grep mysql'
ansible all -m command -a 'ps -ef'
5. Group模块
-
功能描述:
group
模块用于管理用户组,包括创建、删除、修改用户组的属性等。 -
应用场景:在进行系统用户管理、权限分配时,
group
模块是必不可少的工具。
ansible webservers -m group -a 'gid=2017 name=test'
6. User模块
-
功能描述:
user
模块用于管理用户账户,包括创建、删除、修改用户属性(如密码、用户组、登录Shell等)。 -
应用场景:在进行用户管理、权限分配或系统配置时,
user
模块非常实用。
ansible webservers -m user -a 'name=test group=test'
7. Get_url模块
-
功能描述:
get_url
模块用于从指定的URL下载文件到目标主机的指定路径。它支持多种协议(如HTTP、HTTPS等),并可以设置文件的校验和,确保文件完整性。 -
应用场景:在需要从远程服务器下载文件(如软件包、配置文件等)时,
get_url
模块非常方便。
ansible all -m get_url -a 'dest=/root url=http://www.baidu.com'
8. Yum模块
-
功能描述:
yum
模块用于在基于RPM的系统(如CentOS、RHEL等)上管理软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。 -
应用场景:在进行系统软件管理、安装应用程序时,
yum
模块是常用的工具。
ansible 192.168.88.120 -m yum -a "name=tree state=present"
SaltStack
详细描述
1. 简介
SaltStack 是一种开源的配置管理工具,由 Thomas Hatch 于 2011 年创建。它旨在提供一种高效、可扩展的解决方案,用于管理大规模基础设施。SaltStack 通过其独特的 “Master-Minion” 架构,实现了对大量服务器的集中管理。
2. 架构
SaltStack 的架构基于 “拉取” 模式,主要由以下组件构成:
Master(主节点):负责管理和分发任务,存储配置数据和指令。
Minion(从节点):被管理的主机,负责执行 Master 分发的任务。
States(状态):定义了目标主机的期望状态,类似于 Ansible 的 Playbooks。
Pillars(柱子):用于存储敏感数据或特定于环境的配置信息。
Grains(谷物):描述了 Minion 的系统信息(如操作系统、CPU、内存等)。
Beacons(信标):用于监控系统事件,并触发相应的响应。
3. 特点
Master-Minion 架构:通过集中式管理,实现了对大量服务器的高效管理。
高并发能力:SaltStack 支持高并发通信,能够快速处理大量任务。
灵活性:提供了丰富的 API 和插件机制,方便用户自定义功能。
实时性:支持实时通信和任务执行,能够快速响应系统变化。
多语言支持:支持多种编程语言(如 Python、Shell 等)编写状态文件和模块。
4. 优势
高性能:SaltStack 的并发处理能力使其能够高效管理大规模集群。
可扩展性:支持从几十台到数千台服务器的管理。
灵活性:提供了丰富的自定义功能,能够满足复杂的需求。
实时性:能够实时监控和响应系统事件,适合动态环境。
5. 适用场景
大规模集群管理:适用于管理大规模数据中心或云计算环境。
实时监控与响应:通过信标功能实时监控系统状态,快速响应事件。
复杂环境管理:支持多种操作系统和平台的统一管理。
自动化部署:快速部署和配置应用程序及服务。
6. 简单的状态文件(SLS)示例
apache:
pkg.installed:
- name: apache2
service.running:
- name: apache2
- enable: True
安装
配置环境
master端:Ubuntu--2(192.168.88.121)
minion端:Ubuntu(192.168.88.120)
一、安装SaltStack Master端
apt install salt-master
启动SaltStack Master服务
systemctl start salt-master
systemctl enable salt-master
二、安装SaltStack Minion端
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完成
模块操作示例
1. 查看模块
salt 'saltminion' sys.list_modules
2. 查看模块的操作方法
salt 'saltminion' sys.list_functions service
3. 查看操作方法
salt 'saltminion' sys.doc service.start
4. Cmd模块
-
功能描述:
cmd
模块用于在目标主机上执行命令。它支持多种命令执行方式,包括简单的命令执行、脚本运行等。 -
应用场景:在需要执行系统命令、脚本或进行系统状态检查时,
cmd
模块非常实用。
salt 'saltminion' cmd.run 'free -m'
5. Pkg模块
-
功能描述:
pkg
模块用于管理目标主机上的软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。 -
应用场景:在进行系统软件管理、安装应用程序时,
pkg
模块是常用的工具。
salt 'saltminion' pkg.install vsftpd
6. Service模块
-
功能描述:
service
模块用于管理目标主机上的服务。它支持启动、停止、重启服务,并可以查询服务状态。 -
应用场景:在进行服务管理、故障排查时,
service
模块非常实用。
salt 'saltminion' service.start vsftpd
salt 'saltminion' service.enable vsftpd
7. User模块
-
功能描述:
user
模块用于管理目标主机上的用户账户。它支持创建、删除用户,修改用户属性(如密码、用户组等)。 -
应用场景:在进行用户管理、权限分配时,
user
模块是必不可少的工具。
salt 'saltminion' user.add zzz
8. Group模块
-
功能描述:
group
模块用于管理目标主机上的用户组。它支持创建、删除用户组,修改用户组属性。 -
应用场景:在进行用户管理、权限分配时,
group
模块是常用的工具。
salt 'saltminion' group.add test
salt 'saltminion' group.adduser test zzz
9. File模块
-
功能描述:
file
模块用于管理目标主机上的文件和目录。它支持文件复制、文件权限设置、目录创建等操作。 -
应用场景:在进行文件系统管理、配置文件修改时,
file
模块非常实用。
salt 'saltminion' file.addend /etc/profile "export JAVA_HOME=/usr/local/jdk"
Ansible 与 SaltStack 对比
特性 | Ansible | SaltStack |
---|---|---|
架构 | 无代理,基于 SSH 推送 | Master-Minion 架构,基于 ZeroMQ 拉取 |
安装复杂度 | 简单,无需在被管理节点上安装代理 | 需要在被管理节点上安装 Minion |
并发能力 | 中等,适合中小规模部署 | 高并发,适合大规模集群 |
实时性 | 任务执行后生效 | 支持实时监控和响应 |
易用性 | 配置文件简单,易于上手 | 配置复杂,学习曲线较陡 |
适用场景 | 中小规模部署,简单任务自动化 | 大规模集群管理,复杂环境 |