自动化运维必备!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安装在管理端,管理后端节点,而在节点上无需进行操作。

  • 安装epel源
yum -y install epel-release
yum -y install ansible
#查看ansible版本
ansible --version
  • 树状结构展示工作目录
tree /etc/ansible/
/etc/ansible/
├── ansible.cfg   #ansible的配置文件
├── hosts  #ansible的主仓库,用于存储需要管理的远程主机的相关信息
└── roles  #角色
  • 配置主机清单
vi /etc/ansible/hosts
添加主机模块
可对节点进行分组,便于针对性的统一管理
[webserver]   #设置组名
10.0.0.11   #节点ip
10.0.0.12
[mysql]
10.0.0.13
...
[webserver2]    #一般用FQDN,完全合格域名,像www.baidu.com
www1.example.org    #定义被监控主机,需要修改/etc/hosts文件
www2.example.org:2222     #冒号后定义远程连接端口,默认是ssh的22端口
www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456 
#列表方式标识主机,代表50台节点,www01到www50的主机。以root和123456密钥ssh登录,此方式不安全
db-[a:f].example.org    #也支持匹配a b c ... f,代表六台主机

主机清单变量:

1)主机变量
[webserver]
www1.magedu.com http_port=80 maxRequestsChild=808
www2.magedu.com http_port=8080 maxRequestsChild=9092)组变量
[servers:vars]
ntp_server=ntp.example.org
nfs_server=nfs.example.org
(3)组嵌套
[apache]
http1.example.org
http2.example.org

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

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

(4)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	      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh''fish'.
ansible_python_interpreter	   目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
ansible_*_interpreter	     这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
ansible_shell_executable	 这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh。
  • 配置密钥对验证
    与所要管理的节点,进行密钥对验证,可ssh登录节点
ssh-keygen -t rsa   #回车,输入密钥密码
ssh-copy-id root@10.0.0.13   #输入13节点密码
  • 配置免交互代理(临时的不需要输入密码就可执行ansible)
ssh-agent  bash
ssh-add   #输入密钥密码

三、ansible的命令行模块

ansible命令格式

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

常用模块

----cron---周期性计划任务
ansible-doc -s 模块名 #模块用法      
ansible -m cron -a 'minute=*/1 job=/usr/bin/echo ... name=test1'
ansible -m cron -a 'name=test1 state=absent'   #删除任务

----user---用户设置
ansible -m user -a  'name=aa uid=1111'   #创建用户
ansible mysqI -m user -a 'name="test01" state=absent'    #删除用户

----group---组设置
ansible mysqI -m group -a 'name =mysq| gid=306 system=yes'
ansible mysqI -m user -a 'name=test01 uid= 306 system=yes group=mysql'
ansible mysq| -a 'id test01'

----copy---拷贝工具,也可创建由内容的文件,无法使用path
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #将本地文件拷贝至节点, fetch与之相反,将节点文件拷贝至管理端(本地)
ansible mysqI -m copy -a 'content="hello heihei!" dest =/opt/fstab.back'  #创建有内容的文件

----file---文件操作,建立空文件,目录
ansible mysq| -m file -a 'owner=mysq| group=mysqI mode= 644 path=/opt/fstab.back'
ansible mysqI -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'   #软链接
ansible mysql -m file -a 'path=/opt/fstab.back state=absent'  #删除
ansible mysqI -m file -a 'path=/opt/test state=touch'  #建空文件
ansible webserver -m file -a ' path=/opt/temp state=directory mode=755' 

----ping---用在检测管理端与节点的连通性
ansible all -m ping

-----yum----安装卸载工具
ansible mysql -m yum -a 'name=httpd' 
ansible mysql -m yum -a 'name=httpd state=absent'  #卸载
ansible mysql -a 'rpm -q httpd'

----service---服务模块
ansible webserver -a 'systemctl status httpd'    //查看web服务器httpd运行状态
ansible webserver -m service -a 'enabled=true name=httpd state= started'   #开机自启,并开启
ansible all -m service -a 'name=firewalld state=stopped' //关闭防火墙

----shell---与command有区别
shell  #可执行多条语句,支持重定向,而command只支持追加,一条语句
chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
creates: 指定一个文件,当指定的文件存在时,就不执行对应命令,还是会进行创建文件
removes:使用此参数指定-个文件,当指定的文件不存在时,就不执行对应命令。
ansible mysqI -m shell -a 'chdir=/opt/share echo heihei > heihei.txt'
ansible mysqI -m shell -a 'chdir=/opt/share Is'

----script----用于执行脚本
vi test.sh //在ansible管理端创建脚本
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt
chmod +x test.sh
ansible all -m script -a 'test.sh'  #可在多主机批量执行

----setup----
ansible mysq| -m setup    #获取mysq|组主机的facts信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值