目录
一 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概述
1.Ansible是什么
Ansible是一个基于Python开发的配置管理和应用部署工具,可以用于自动化部署、配置和管理计算机系统。它以简单性、可读性和灵活性为设计理念,使用SSH协议进行通信,并且不需要在被管理的计算机上安装任何额外的客户端软件。
2.为什么要学Ansible(特点)
-
自动化部署和配置管理:Ansible使得软件部署和配置变得简单且可重复。通过编写Ansible脚本,可以定义和描述所需的系统配置,并自动应用到多台计算机上。这可以大大减少手动操作的时间和错误,并提高系统的一致性和可靠性。
-
简单易学:相比其他自动化工具,Ansible的学习曲线相对较低。它采用基于文本的配置语言(YAML)和简单的任务模块,易于理解和编写。
-
平台无关性:Ansible是基于SSH协议进行通信的,因此可以在各种不同的操作系统和云平台上运行。
-
扩展性和灵活性:Ansible具有丰富的模块库和插件生态系统,可以满足各种不同场景下的自动化需求。
-
社区支持和广泛应用:Ansible拥有庞大的开源社区支持,并且得到了广泛的应用。无论是小型项目还是大型企业环境,Ansible都被广泛使用于系统管理、应用部署、配置管理等方面。
二 Ansible的架构及运行机制
1.Ansible的架构
在Ansible中,数据的流向可以概括为以下几个部分:
-
控制节点到被控制节点:控制节点是运行Ansible的主机,它通过SSH协议与被控制节点建立连接。控制节点将任务和命令发送到被控制节点,并接收执行结果。
-
主机清单到控制节点:主机清单文件列出了被控制节点的连接信息,包括主机名或IP地址、SSH用户名和密码等。控制节点读取主机清单文件,获取被控制节点的信息,以便建立与被控制节点的连接。
-
Playbook到控制节点和被控制节点:Playbook是一个YAML文件,定义了自动化流程、任务和主机清单的组合。控制节点读取Playbook文件,解析其中的任务和主机清单信息,并将任务和命令发送到相应的被控制节点。
-
模块和插件的数据传输:Ansible使用各种模块和插件来实现不同的任务。数据在控制节点和被控制节点之间通过SSH协议传输。例如,当执行文件复制任务时,控制节点将文件发送到被控制节点,或者从被控制节点获取文件。
总体上,数据从控制节点流向被控制节点,包括命令、任务、文件等。控制节点负责解析和发送数据,而被控制节点负责执行任务并返回执行结果。这种数据流向使得Ansible可以实现自动化管理和配置的目标主机。
2.Ansible的运行机制
Ansible的运行机制是基于控制节点和被控制节点之间的通信,控制节点是运行Ansible的主机,被控制节点是需要管理和配置的目标计算机,主机清单文件列出了所有被控制节点的连接信息,模块定义了要执行的任务,Playbook定义了整个自动化流程,Ansible通过SSH协议连接到被控制节点,并在每个节点上依次执行相应的任务。Ansible的运行机制简单高效,适用于大规模环境和复杂的自动化需求。
三 Ansible环境安装部署
控制节点 | 192.168.27.30 ansible |
---|---|
被控制节点 | 192.168.27.40 |
被控制节点 | 192.168.27.50 |
1.控制节点安装ansible
(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 root@192.168.27.10
sshpass -p '123456' ssh-copy-id root@192.168.27.20
2.Ansible目录结构
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles/
- /etc/ansible/:默认的Ansible配置文件和相关文件存放目录。
- ansible.cfg:Ansible的配置文件,用于配置一些全局参数,例如SSH连接参数、默认的远程用户等。这个文件一般无需手动修改,除非需要特别定制Ansible的行为。
- hosts:Ansible的主机清单文件,用于存储需要管理的远程主机的相关信息,例如主机名、IP地址、SSH用户名和密码等。这个文件是必需的,因为Ansible需要知道要连接哪些主机,并在这些主机上执行任务。
- roles/:Ansible的角色目录,用于存放可重用的Playbook代码和任务模板。一个角色可以包含多个任务和变量,可以被多个Playbook共享和复用。角色目录结构包括tasks、handlers、templates、files、vars、defaults、meta等子目录,用于组织和管理角色的不同部分。
3.Ansible 命令行模块
(1) command 模块
在远程主机执行命令,不支持管道,重定向等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:判断指定文件是否存在,如果存在,执行后面的操作。
(2)shell模块
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)。
ansible dbservers -m shell -a 'echo 123456| passwd --stdin work'
(3)cron 模块
在远程主机定义任务计划。其中有两种状态(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:任务计划的名称
(4)user模块
用户管理的模块
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时,是否删除用户的家目录
(5)group模块
用户组管理的模块
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'
(6)copy模块
用于复制指定主机文件到远程主机的。
ansible-doc -s copy
常用的参数:
- dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容。
- src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
- mode:指出复制时,目标文件的权限 。
- owner:指出复制时,目标文件的属主。
- group:指出复制时,目标文件的属组。
- content:指出复制到目标主机上的内容,不能与src一起使用。