人的一生,有许多事情,是需要放在心里慢慢回味的,过去的就莫要追悔,一切向前看吧 任何打击都不足以成为你堕落的借口,即使你改变不了这个世界,你却依然可以改变自己,选择条正确的路永远走下去。
返回顶部

ansible的安装及常用模块详解

一、ansible简介

1.1 什么是ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。

1.2 ansible的特点

  • 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  • 默认使用SSH协议对设备进行管理;
  • 有大量常规运维操作模块,可实现日常绝大部分操作;
  • 配置简单、功能强大、扩展性强;
  • 支持API及自定义模块,可通过Python轻松扩展;
  • 通过Playbooks来定制强大的配置、状态管理;
  • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  • 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

1.3 ansible模块

  • Ansible:Ansible核心程序。
  • HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
  • Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  • CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
  • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  • ConnectionPlugins:连接插件,Ansible和Host通信使用

二、安装ansible

ansible安装在管理端,管理后端节点,而在节点上无需进行操作

2.1、安装epel源

1 yum -y install epel-release
2 yum -y install ansible
3 #查看ansible版本
4 ansible --version

2.2、树状结构展示工作目录

1 tree /etc/ansible/
2 /etc/ansible/
3 ├── ansible.cfg   #ansible的配置文件
4 ├── hosts  #ansible的主仓库,用于存储需要管理的远程主机的相关信息
5 └── roles  #角色

2.3、配置主机清单

 1 vi /etc/ansible/hosts
 2 添加主机模块
 3 可对节点进行分组,便于针对性的统一管理
 4 [webserver]   #设置组名
 5 20.0.0.20   #节点ip
 6 20.0.0.30
 7 [mysql]
 8 20.0.0.40
 9 
10 [webserver2]    #一般用FQDN,完全合格域名,像www.baidu.com
11 www1.example.org    #定义被监控主机,需要修改/etc/hosts文件
12 www2.example.org:2222     #冒号后定义远程连接端口,默认是ssh的22端口
13 www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456 
14 #列表方式标识主机,代表50台节点,www01到www50的主机。以root和123456密钥ssh登录,此方式不安全
15 db-[a:f].example.org    #也支持匹配a b c ... f,代表六台主机

2.4、主机清单变量

①主机变量
[webserver]
www1.magedu.com http_port=80 maxRequestsChild=808
www2.magedu.com http_port=8080 maxRequestsChild=909
②组变量
[servers:vars]
ntp_server=ntp.example.org
nfs_server=nfs.example.org
③组嵌套
[apache]
http1.example.org
http2.example.org

[nginx]
ngx1.example.org
ngx2.example.org

[webservers:children] #可包含多个主机组
apache
nginx

④inventory变量参数

 1 ansible_ssh_host    将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
 2 ansible_ssh_port    ssh端口号.如果不是默认的端口号,通过此变量设置.
 3 ansible_ssh_user    默认的 ssh 用户名
 4 ansible_ssh_pass    ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
 5 ansible_ssh_private_key_file       ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
 6 ansible_ssh_common_args    此设置附加到sftp,scp和ssh的缺省命令行
 7 ansible_sftp_extra_args      此设置附加到默认sftp命令行。
 8 ansible_scp_extra_args      此设置附加到默认scp命令行。
 9 ansible_ssh_extra_args      此设置附加到默认ssh命令行。
10 ansible_ssh_pipelining      确定是否使用SSH管道。 这可以覆盖ansible.cfg中得设置。
11 ansible_shell_type          目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh''fish'.
12 ansible_python_interpreter       目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
13 ansible_*_interpreter         这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
14 ansible_shell_executable     这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh

2.5、配置密钥对验证

与所要管理的节点,进行密钥对验证,可ssh登录节点

1 ssh-keygen -t rsa   #回车,输入密钥密码
2 ssh-copy-id root@20.0.0.20   #输入20节点密码

2.6、配置免交互代理(临时的不需要输入密码就可执行ansible)

1 ssh-agent  bash
2 ssh-add   #输入密钥密码

三、ansible的命令行模块

ansible命令格式

1 ansible  主机标识(IP)  -m 模块  -a ‘参数’  默认模块是command

常用模块

 1 ----cron---周期性计划任务
 2 ansible-doc -s 模块名 #模块用法      
 3 ansible -m cron -a 'minute=*/1 job=/usr/bin/echo ... name=test1'
 4 ansible -m cron -a 'name=test1 state=absent'   #删除任务
 5 
 6 ----user---用户设置
 7 ansible -m user -a  'name=aa uid=1111'   #创建用户
 8 ansible mysqI -m user -a 'name="test01" state=absent'    #删除用户
 9 
10 ----group---组设置
11 ansible mysqI -m group -a 'name =mysq| gid=306 system=yes'
12 ansible mysqI -m user -a 'name=test01 uid= 306 system=yes group=mysql'
13 ansible mysq| -a 'id test01'
14 
15 ----copy---拷贝工具,也可创建由内容的文件,无法使用path
16 ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #将本地文件拷贝至节点, fetch与之相反,将节点文件拷贝至管理端(本地)
17 ansible mysqI -m copy -a 'content="hello heihei!" dest =/opt/fstab.back'  #创建有内容的文件
18 
19 ----file---文件操作,建立空文件,目录
20 ansible mysq| -m file -a 'owner=mysq| group=mysqI mode= 644 path=/opt/fstab.back'
21 ansible mysqI -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'   #软链接
22 ansible mysql -m file -a 'path=/opt/fstab.back state=absent'  #删除
23 ansible mysqI -m file -a 'path=/opt/test state=touch'  #建空文件
24 ansible webserver -m file -a ' path=/opt/temp state=directory mode=755' 
25 
26 ----ping---用在检测管理端与节点的连通性
27 ansible all -m ping
28 
29 -----yum----安装卸载工具
30 ansible mysql -m yum -a 'name=httpd' 
31 ansible mysql -m yum -a 'name=httpd state=absent'  #卸载
32 ansible mysql -a 'rpm -q httpd'
33 
34 ----service---服务模块
35 ansible webserver -a 'systemctl status httpd'    //查看web服务器httpd运行状态
36 ansible webserver -m service -a 'enabled=true name=httpd state= started'   #开机自启,并开启
37 ansible all -m service -a 'name=firewalld state=stopped' //关闭防火墙
38 
39 ----shell---与command有区别
40 shell  #可执行多条语句,支持重定向,而command只支持追加,一条语句
41 chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
42 creates: 指定一个文件,当指定的文件存在时,就不执行对应命令,还是会进行创建文件
43 removes:使用此参数指定-个文件,当指定的文件不存在时,就不执行对应命令。
44 ansible mysqI -m shell -a 'chdir=/opt/share echo heihei > heihei.txt'
45 ansible mysqI -m shell -a 'chdir=/opt/share Is'
46 
47 ----script----用于执行脚本
48 vi test.sh //在ansible管理端创建脚本
49 #!/bin/bash
50 echo "hello ansible from script" > /opt/script.txt
51 chmod +x test.sh
52 ansible all -m script -a 'test.sh'  #可在多主机批量执行
53 
54 ----setup----
55 ansible mysq| -m setup    #获取mysq|组主机的facts信息

 

posted @ 2021-01-18 20:37  yy1299050947  阅读(410)  评论(0编辑  收藏  举报