目录
一 Ansible概述
1.Ansible是什么
2.为什么要学Ansible(特点)
二 Ansible的架构及运行机制
1.Ansible的架构
2.Ansible的运行机制
三 Ansible环境安装部署
1.控制节点安装ansible
2.Ansible目录结构
3.Ansible 命令行模块
(1) command 模块
(2)shell模块
(3)cron 模块
(4)user模块
(5)group模块
(6)copy模块
Ansible是一个基于Python开发的配置管理和应用部署工具,可以用于自动化部署、配置和管理计算机系统。它以简单性、可读性和灵活性为设计理念,使用SSH协议进行通信,并且不需要在被管理的计算机上安装任何额外的客户端软件。
自动化部署和配置管理:Ansible使得软件部署和配置变得简单且可重复。通过编写Ansible脚本,可以定义和描述所需的系统配置,并自动应用到多台计算机上。这可以大大减少手动操作的时间和错误,并提高系统的一致性和可靠性。
简单易学:相比其他自动化工具,Ansible的学习曲线相对较低。它采用基于文本的配置语言(YAML)和简单的任务模块,易于理解和编写。
平台无关性:Ansible是基于SSH协议进行通信的,因此可以在各种不同的操作系统和云平台上运行。
扩展性和灵活性:Ansible具有丰富的模块库和插件生态系统,可以满足各种不同场景下的自动化需求。
社区支持和广泛应用:Ansible拥有庞大的开源社区支持,并且得到了广泛的应用。无论是小型项目还是大型企业环境,Ansible都被广泛使用于系统管理、应用部署、配置管理等方面。
在Ansible中,数据的流向可以概括为以下几个部分:
控制节点到被控制节点:控制节点是运行Ansible的主机,它通过SSH协议与被控制节点建立连接。控制节点将任务和命令发送到被控制节点,并接收执行结果。
主机清单到控制节点:主机清单文件列出了被控制节点的连接信息,包括主机名或IP地址、SSH用户名和密码等。控制节点读取主机清单文件,获取被控制节点的信息,以便建立与被控制节点的连接。
Playbook到控制节点和被控制节点:Playbook是一个YAML文件,定义了自动化流程、任务和主机清单的组合。控制节点读取Playbook文件,解析其中的任务和主机清单信息,并将任务和命令发送到相应的被控制节点。
模块和插件的数据传输:Ansible使用各种模块和插件来实现不同的任务。数据在控制节点和被控制节点之间通过SSH协议传输。例如,当执行文件复制任务时,控制节点将文件发送到被控制节点,或者从被控制节点获取文件。
总体上,数据从控制节点流向被控制节点,包括命令、任务、文件等。控制节点负责解析和发送数据,而被控制节点负责执行任务并返回执行结果。这种数据流向使得Ansible可以实现自动化管理和配置的目标主机。
Ansible的运行机制是基于控制节点和被控制节点之间的通信,控制节点是运行Ansible的主机,被控制节点是需要管理和配置的目标计算机,主机清单文件列出了所有被控制节点的连接信息,模块定义了要执行的任务,Playbook定义了整个自动化流程,Ansible通过SSH协议连接到被控制节点,并在每个节点上依次执行相应的任务。Ansible的运行机制简单高效,适用于大规模环境和复杂的自动化需求。
控制节点 | 192.168.27.30 ansible |
---|---|
被控制节点 | 192.168.27.40 |
被控制节点 | 192.168.27.50 |
(1)安装epel源、ansible
yum install -y epel-release
yum install -y ansible
(2)配置主机清单
cd /etc/ansible
vim hosts
[webservers] #配置组名
192.168.27.10 #组里包含的被控制的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
[dbservers]
192.168.27.20
(3)配置密钥对验证
ssh-keygen -t rsa #一路回车,使用免密登录
sshpass -p '123456' ssh-copy-id [email protected]
sshpass -p '123456' ssh-copy-id [email protected]
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles/
在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command #-s 列出指定模块的描述信息和操作动作
ansible webservers -m command -a 'date' #指定组执行 date
ansible all -m command -a 'date' #all 代表所有 hosts 主机
ansible all -a 'ls /' #如省略 -m 模块,则默认运行 command 模块
ansible 192.168.27.40 -m command -a 'date' #指定 ip 执行 date
命令格式:ansible <组名> -m <模块> -a <参数列表>
常用的参数:
- chdir:在远程主机上运行命令前提前进入目录。
- creates:判断指定文件是否存在,如果存在,不执行后面的操作。
- removes:判断指定文件是否存在,如果存在,执行后面的操作。
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)。
ansible dbservers -m shell -a 'echo 123456| passwd --stdin work'
在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron #按 q 退出
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'
#移除计划任务,假如该计划任务没有取名字,name=None即可
常用的参数:
- minute/hour/day/month/weekday:分/时/日/月/周
- job:任务计划要执行的命令
- name:任务计划的名称
用户管理的模块
ansible-doc -s user
ansible dbservers -m user -a 'name="work01"' #创建用户work01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="work01" state=absent' #删除用户work01
常用的参数:
- name:用户名,必选参数
- state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
- system=yes|no:是否为系统账号
- uid:用户uid
- group:用户基本组
- shell:默认使用的shell
- move_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
- password:用户的密码,建议使用加密后的字符串
- comment:用户的注释信息
- remove=yes|no:当state=absent时,是否删除用户的家目录
用户组管理的模块
ansible-doc -s group
ansible dbservers -m group -a 'name=mysql gid=306 system=yes' #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=work01 uid=306 system=yes group=mysql'
#将work01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id work01'
用于复制指定主机文件到远程主机的。
ansible-doc -s copy
常用的参数:
- dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容。
- src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
- mode:指出复制时,目标文件的权限 。
- owner:指出复制时,目标文件的属主。
- group:指出复制时,目标文件的属组。
- content:指出复制到目标主机上的内容,不能与src一起使用。