自动化运维工具--ansible

1.ansible简介

ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansible

ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的ansible所运行的模块,ansible只是提供一种框架,主要包括:

  1. 连接插件connection plugins:负责和被监控端实现通信
  2. host inventory:指定操作的主机,是一个配置文件里定义监控的主机
  3. 各种核心模块,command模块、自定义模块
  4. 借助于插件完成记录日志邮件等功能
  5. playbook:剧本执行多个任务时,非必需2可以让节点一次性运行多个任务

2.部署ansible服务

配置依赖环境

yum -y install epel-release		#安装epel源、通过在线源下载

安装ansible软件

yum -y install ansible		

此时生成三个主要文件在/etc/ansible下

ls /etc/ansible
ansible.cfg		#ansible的配置文件
hosts			#ansible的主仓库,用于存储需要管理的远程主机的相关信息
roles			#角色文件,用于playbook

配置需要管理的远程主机

vi /etc/ansible/hosts
##可单独添加IP地址,也可自定义主机池名用于调用相关所有主机
[webservers]		#主机池名
192.168.20.10
192.168.20.100

配置ssh,用于ansible的connection plugins连接插件连接主机

ssh-keygen -t rsa		#建立非对称密钥
#此时交互设置密钥存放路径,以及设置私钥

ssh-copy-id root@192.168.20.10		#将公钥传给三台主机
ssh-copy-id root@192.168.20.100
#此时交互输入对方主机的用户密码(此时是使用对方root用户身份登录)

#配置ssh免交互代理
ssh-agent bash		#表示使用免交互代理
ssh-add			#添加个人私钥
#此时交互输入此前设置的个人私钥

2.1测试ansible服务

ansible all -a 'date'

在这里插入图片描述

3. ansible命令语法及模块详解

3.1命令语法

基本语法

ansible 主机标识/ip -m 模块 -a ‘参数’

主机标识/ip:在管理主机文件中定义,可以是主机标识(主机池),也可以是具体主机IP地址,若是all,则为所有主机

模块:ansible的各种模块,若不指定(-m ),则默认使用command

参数:管理命令,根据具体模块决定命令语法

3.2模块详解

模块查询操作

ansible-doc -l	#列出所有已安装模块,按q退出查询
ansible-doc -s 模块名	#查询指定模块的描述信息和操作动作

1.command模块
一般用于执行单条linux命令

ansible 192.168.20.100 -m command -a 'date'
ansible webservers -a 'id'	#不加m指定模块,默认使用command,查看用户信息

2.cron模块
用于设置计划任务

ansible 192.168.20.10 -m cron -a 'minute="*/1" job="/usr/bin/echo hello >> /opt/test.txt" name="test"'		#创建名为test的计划任务,每分钟执行一次
ansible 192.168.20.10 -m cron -a 'name=test state=absent'	#删除test任务

参数组成:
时间:minute、hour、day、weekday、month
任务:job,用job定义执行的任务
计划任务名称:name
状态(state):present(添加任务,可以省略),absent(移除任务)

3.user模块
用于管理用户

ansible 192.168.20.10 -m user -a 'name="user01"'	#创建用户user01
ansible 192.168.20.10 -m user -a 'name="user01" state=absent'		#删除用户user01
ansible 192.168.20.10 -m user -a 'name="user01" uid=1002 group=user01'		#设置user01的uid和属组

4.group模块
用户管理组

ansible 192.168.20.10 -m group -a 'name=web gid=270'	#创建组web,设置gid号
ansible 192.168.20.10 -m group -a 'name=web state=absent'	删除web组

5.copy模块
复制文件、目录及写入内容至文件

ansible all -m copy -a 'src=/etc/hosts dest=/opt/hosts.bak owner=root mode=640'	#复制文件,设置属主及权限
ansible all -m copy -a 'content="hello" dest=/opt/test'		#对文件写入内容

6.file模块
管理文件、目录及创建软连接

ansible all -m file -a 'path=/opt/test state=touch'		#创建一个空文件
ansible all -m file -a 'path=/opt/test state=absent'		#删除某一个文件
ansible all -m file -a 'path=/opt/var state=directory mode=755'		#创建一个目录并设置权限
ansible all -m file -a ‘path=/opt/test owner=web group=web mode=644’		#设置文件的属主属组权限

7.ping模块
测试与被控主机的网络连接状态

ansible all -m ping		#测试连通性

8.yum模块
管理软件

ansible all -m yum -a 'name=httpd'		#yum安装软件
ansible all -m yum -a 'name=httpd state-absent'		#yum卸载软件

9.service模块
管理服务

ansible all -m service -a 'name=httpd state=started enabled=true'	#开启httpd并设为开机自启
state状态:started、stopped、status...

9.shell模块
执行多条linux指令、并可以使用重定向、追加符号
特殊参数:
chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中,等于cd命令
creates:指定一个文件,当指定的文件存在时,就不执行对应的命令
removes:使用此参数指定一个文件,当指定的文件不存在时,就不执行对应的命令

ansible all -m shell -a 'chdir=/opt/aa echo hello >> test.txt'

10.script模块
执行本地的脚本,使所有被控主机执行脚本操作(脚本只需存在ansible管理节点,被控主机无需存在该脚本)

ansible all -m script -a 'test.sh'

11.setup模块
获取主机所有信息
可配合检索命令,过滤出主机的资源占用、地址信息等所需信息

ansible all -m setup

4.主机清单

ansible默认的主机清单是/etc/ansible/hosts文件
主机清单可以手动设置,也可通过Dynamic inventory动态生成
一般主机名使用FQDN
FQDN:完全合格域名:主机名+域名,例:www.baidu.com

4.1常用基础配置

#直接写入IPFQDN
www.aa.com			
192.168.20.10		

[webservers]		#方括号设置组名(组名内可设置多个主机,即主机池)
192.168.20.100
192.168.20.60

4.2名称类似主机定义

[webservers]
www.a[1:50].com		#www.a1.com至www.a50.com的所有主机

192.168.20.1[0-9]	#192.168.20.10-192.168.20.19

www.a[a:f].com		#www.aa.com-www.af.com的所有主机,字母匹配支持a-f

4.3Inventory中变量

1.主机变量

www.aa.com http_port=80 maxRequestsChild=100	#定义该主机http端口号及最大请求数

2.组变量
定义主机名为一个变量,可直接调用

[servers:vars]		#定义主机名为变量的组
ntp_server=ntp.server.org
nfs_server=nfs.server.org

3.组嵌套
定义多个组在同一个组内

[nginx]
192.168.20.10
192.168.20.20

[tomcat]
192.168.20.30
192.168.20.40

[webservers]
nginx
tomcat

4.3.1 inventory变量参数

  • ansible_ssh_host 将要连接的远程主机名,与你想要设定的主机的别名不同的话,可以通过此变量设置
  • ansible_ssh_port ssh端口号,如果不是默认的端口号,通过此变量设置
  • ansible_ssh_user 默认的ssh用户名
  • ansible_ssh_pass ssh密码(这种方式并不安全,我们强烈建议使用–ask-pass或SSH密钥)
  • ansible_ssh_private_key_file ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况
  • ansible_ssh_common_args 此设置附加到sftp,scp和ssh的缺省命令行
  • ansible_sftp_extra_args 此设置附加到默认sftp命令行
  • ansible_scp_extra_args 此设置附加到默认scp命令行
  • ansible_ssh_extra_args 此设置附加到默认ssh命令行
  • ansible_ssh_pipelining 确定是否使用SSH管道。这可以覆盖ansible.cfg中的设置
  • ansible_shell_type 目标系统的ssh类型,默认情况下,命令的执行使用’sh’语法,可设置为’csh’或’fish’
  • ansible_python_interpreter
    目标主机的python路径,适用于的情况:系统中有多个python。或者命令路径不是/usr/bin/python
  • ansible__interpreter 这里的可以是ruby或perl或者其他语言的解释器,作用和-
    ansible_python_interpreter类似
  • ansible_shell_executable
    这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值