准备环境
适用版本:■UOS服务器操作系统d版
适用架构:■ARM64、AMD64、MIPS64
网络:连接互联网情况下进行
本次测试环境如下:
注:请根据实际情况操作该文方法进行配置。
功能描述
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可
安装与配置
一、安装ansible工具
1、直接 命令安装
apt install ansible -y
2、验证安装结果
通过
ansible --version
验证安装结果如果命令可以正常执行,则表示ansible安装成功
3、配置ssh免密登录
在ansible-server(以下简称server)上配置对ansible-client(以下简称client)的免密登录,本次实现为实现批量操作,在server中也配置针对自己主机的免密登录。
生成密钥
ssh-keygen
拷贝密钥至client
ssh-copy-id root@192.168.247.154
拷贝密钥至server主机
ssh-copy-id root@192.168.247.131
二、Ansible使用
1、主机清单配置
Ansible 管理主机信息的配置文件,相当于系统 Hosts 文件的功能,默认存放在 /etc/ansible/hosts。在 hosts 文件中,通过分组来组织设备。实验配置如下:
2、ansible命令
Ansible 的维护命令大多数是以 ansible 开头,在终端输入 ansible 后连续按两次Tab键,会补全所有跟 ansible 相关的命令。
(1)ansible命令说明:
ansible 是生产环境中使用非常频繁的命令之一,主要用于临时性的维护,如查看web服务器组磁盘使用情况、复制一个文件到其他机器等。类似这些没有规律的、临时需要做的任务,我们成为非固化需求,临时一次性操作,语法如下:
ansible <host-pattern> [options]
- -v(—verbose):输出详细的执行过程信息,可以得到执行过程所有信息;
- -i PATH(—inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts;
- -f NUM(—forks=NUM):并发线程数,默认为5个线程;
- —private-key=PRIVATE_KEY_FILE:指定密钥文件;
- -m NAME,—module-name=NAME:指定执行使用的模块;
- -M DIRECTORY(—module-path=DIRECTORY) :指定模块存放路径,默认为/usr/share/ansible;
- -a ARGUMENTS(—args=ARGUMENTS):指定模块参数;
- -u USERNAME(—user=USERNAME):指定远程主机以USERNAME运行命令;
- -l subset(—limit=SUBSET):限制运行主机;
①检查所有主机是否存活,执行命令如下:
ansible all -m ping
②列出web组主机列表,执行命令如下:
③批量显示web组中的磁盘使用空间,执行命令如下:
ansible web -m command -a "df -hT"
(2)ansible-doc
ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍,语法如下:
ansible-doc ping
(3)ansible-playbook
Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux中的sh或source命令,用来执行系列任务。其工作机制:通过读取预先编写好的playbook文件实现集中处理任务。ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下:
Ansible-playbook playbook.yml
<!--playbook.yml文件要提前编写好,建议使用绝对路径-->
3、ansible模块
(1)command模块
command模块在远程主机执行命令,不支持管道、重定向等shell的特性。常用的参数如下:
- chdir:在远程主机上运行命令前要提前进入的目录;
- creates:在命令运行时创建一个文件,如果文件已存在,则不会执行创建任务;
- removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务;
- executeable:指明运行命令的shell程序;
示范:
ansible all -m command -a "ls -lst /data"
(2)shell模块
shell模块在远程主机执行命令,相当于调用远程主机的Shell进程,然后在该Shell下打开一个子Shell运行命令。和command模块的区别是它支持Shell特性:如管道、重定向等。
示范:
ansible all -m shell -a "ping www.baidu.com -c 2 "
ansible all -m shell -a “echo hello world >/data/1.txt”
(3)copy模块
copy模块用于复制指定主机文件到远程主机的指定位置。常见的参数如下:
- dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容;
- src:指出源文件的路径,可以使用相对路径和绝对路径,支持直接指定目录。如果源是目录,则目标也要是目录;
- mode:指出复制时,目标文件的权限,可选;
- owner:指出复制时,目标文件的属主,可选;
- group:指出复制时目标文件的属组,可选;
- content:指出复制到目标主机上的内容,不能和src一起使用,相当于复制content指明的数据到目标文件中;
示范:
ansible web -m copy -a "src=/etc/hosts dest=/data/server.hosts mode=777 "
说明:将本机的/etc/hosts文件复制到web分组的控制端,并修改权限为777
(4)apt模块
apt模块基于apt机制,对远程主机管理程序包。常用的参数如下:
- name:程序包名称,可以带上版本号。若不指明版本,则默认为最新版本;
- state=present|atest|absent:指明对程序包执行的操作:present表明安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包;
- disablerepo:在用apt安装时,临时禁用某个仓库的ID;
- enablerepo:在用apt安装时,临时启用某个仓库的ID;
- conf_file:apt运行时的配置文件,而不是使用默认的配置文件;
- disable_gpg_check=yes|no:是否启用完整性校验功能;
示范:
ansible all -m apt -a "name=apache2"
ansible web -m shell -a "systemctl status apache2"
(5)service模块
service模块为用来管理远程主机上的服务的模块。常见的参数如下:
- name:被管理的服务名称;
- state=started|stopped|restarted:动作包含启动,关闭或重启;
- enable=yes|no:表示是否设置该服务开机自启动;
- runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自动启动;
示范:
ansible web -m service -a "name=apache2 enabled=yes state=restarted"
(6)user模块
user模块主要用于管理远程主机上的用户账号。常见的参数如下:
- name:必选参数,账号名称;
- state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除;
- system=yes|no:是否为系统账户;
- uid:用户UID;
- group:用户的基本组
- groups:用户的附加组;
- shell:默认使用的shell;
- home:用户的家目录;
- mve_home=yes|no:
- 如果设置的家目录已经存在,是否将已存在的家目录进行移动;
- pssword:用户的密码,建议使用加密后的字符串;
- comment:用户的注释信息;
- remore=yes|no:当state=absent时,是否要删除用户的家目录;
示范:
ansible web -m user -a "name=test002 system=yes shell=/bin/bash home=/home/test002 password=123@123"
不建议用,个人尝试密码登录失败
三、playbook配置文件
1、执行配置文件
playbook配置文件使用YAML语法,具有简洁明了、结构清晰等特点。playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表。上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下。更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维。YAML文件的扩展名通常为.yaml或.yml。YAML语法与其他高级语言类似,其结构通过缩进来展示,通过“-”来代表项;“:”用来分隔键和值;整个文件以“---”开头并以“…”结尾。
语法如下:
ansible-playbook [option] /PATH/TO/PLAYBOOK.yaml
- --syntax-check:检测yaml文件的语法;
- -C(—check):预测试,不会改变目标主机的任何设置;
- --list-hosts:列出yaml文件影响的主机列表;
- --list-tasks:列出yaml文件的任务列表;
- --list-tags:列出yaml文件中的标签;
- -t TAGS(—tags=TAGS):表示只执行指定标签的任务;
- --skip-tags=SKIP_TAGS:表示除了指定标签的任务,执行其他任务;
- --start-at-task=START_AT:从指定的任务开始往下运行;
示范:
©统信软件技术有限公司。访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本网站任何内容或服务进行转载,须备注:该文档出自【faq.uniontech.com】统信软件知识分享平台。否则统信软件将追究相关版权责任。