Ansible学习 / 系统运维

Ansible安装和基本使用

浅时光博客 · 12月13日 · 2020年 9.2w 次已读

2.1、Ansible安装

Ansible的安装方法有多种,只需要在主控端安装即可

2.1.1:EPEL源的rpm包安装

yum install epel*

yum clean all
yum makecache

yum info ansible	#查看当前Epel中ansible的版本
yum install ansible

2.1.2:编译安装

yum-y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible

2.1.3:Git方式

git clone git://github.com/ansible/ansible.git--recursive
cd ./ansible
source ./hacking/env-setup

2.1.4:pip安装

yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openss1-devel 
pip instal1--upgrade pip 
pip install ansible--upgrade

2.1.5:确认安装

ansible --version

2.2、Ansible相关文件

2.2.1:配置文件

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
  • /etc/ansible/hosts   主机清单文件,管理的目标主机地址清单
  • /etc/ansible/roles/   存放角色的目录

2.2.2:ansible主配置文件

Ansible 的配置文件/etc/ansible/ansible.cfg其中大部分的配置内容无需进行修改
[defaults]
#inventory = /etc/ansible/hosts		#主机列表配置文件
#library =/usr/share/my_modules/	#库文件存放目录
#remote_tmp = $HOME/.ansible/tmp	#临时py命令文件存放在远程主机目录
#local_tmp = $HoME/.ansible/tmp		#本机的临时命令执行目录
#forks = 5				#默认并发数
#sudo_user = root			#默认sudo用户
#ask_sudo_pass = True			#每次执行ansible命令是否询间ssh密码
#ask_pass = True
#remote_port = 22
host_key_checking = False		#检查对应服务器的host_key,建议取消注释
log_path=/var/1og/ansible.log		#日志文件,建议启用
#module_name = command			#默认模块,可以修改为shell模块
注意:ansible不是一个服务,更改配置无需重启

2.2.3:inventory主机清单

  • ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名默认的inventory file为/etc/ansible/hosts
  • inventoryfile可以有多个,且也可以通过Dynamic Inventory来动态生成
主机清单文件格式
  • inventory文件遵循IN文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

范例:

ntp.dqzboy.com

[webservers]
www1.dqzboy.com:2222
www2.dqzboy.com

[dbservers]
db1.dqzboy.com
db2.dqzboy.com
db3.dqzboy.com

[websrvs]
www[1:100].example.com

[dbsrvs]
db-[a:f].example.com

[appsrvs]
192.168.66.[1:100]

实践:

我这里有3台主机,IP地址为:192.168.66.151-153,主机名为Ansible-01,Ansible-02,Ansible-03
[root@ansible-server ~]# vim /etc/ansible/hosts
[webservers]
192.168.66.[151:153]

[dbservers]
192.168.66.151

[appservers]
192.168.66.[152:153]

2.3、Ansible相关工具

  • /usr/bin/ansible          主提序,临时命令执行工具
  • /usr/bin/ansible-doc          查看配置文档,模块功能查看工具
  • /us/bin/ansible-galaxy      下载/上传优秀代码或Roles模块的自网平台
  • /usr/bin/ansible-playbook       定制自动化任务,编排剧本工具
  • /usr/bin/ansible-pull         远程执行命令的工具
  • /usr/bin/ansible-vault       文件加密工具
  • /usr/bin/ansible-console   基于Console界面与用户交互的执行工具
利用ansible实现管理的主要方式:
  • Ad-Hoc即利用ansible命令,主要用于临时命令使用场景
  • Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

2.3.1:ansible-doc

此工具用来显示模块帮助

格式:

ansible-doc [options][module...]
-l,--list	#列出可用模块
-s,--snippet	#显示指定模块的playbook片段

注:按q键退出

范例:

#列出所有模块
ansible-doc -l

#查看指定模块帮助用法
ansible-doc ping

#查看指定模块帮助用法[简化版的帮助]
ansible-doc -s ping

2.3.2:调用ansible

此工具通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点

格式:

ansible <host-pattern> [-m module_name] [-a args]

范例:

利用shpass批量实现基于key验证
[root@ansible-server ~]# vim auto_ssh.sh
ssh-keygen -f /root/.ssh/id_rsa -P ''
#定义网络端
NET=192.168.66
#主机root用户密码
export SSHPASS=dqz123456
for IP in {151..153};do sshpass -e ssh-copy-id $NET.$IP;done

[root@ansible-server ~]# chmod +x auto_ssh.sh

选项说明:

  • --version      #显示版本
  • -m modul文章来源(Source):浅时光博客e       #指定模块,默认为command
  • -V             #详细过程-vv -vvv更详细
  • --list-hosts    #显示主机列表,可简写–list
  • -k,--ask-pass  #提示输入ssh文章来源(Source):浅时光博客连接密码,默认key验证
  • -C,--check     #检查,并不执行
  • -T,--timeout=TIMEOUT   #执行命令的超时时间,默认10s
  • -u,--user=REMOTE_USER  #执行远程执行的用户
  • -b,--become    #代替旧版的sudo切换
  • --become-user=USERNAME  #指定sudo的runas用户,默认为root
  • -K,--ask-become-pass   #提示输入sudo时的口令
通配符
ansible "*"-m ping 
ansible 192.168.1.* -m ping 
ansible "srvs" -m ping

[root@ansible-server ~]# ansible "*" --list-hosts
  hosts (3):
    192.168.66.151
    192.168.66.152
    192.168.66.153
或关系
ansible "websrvs:appsrvs" -m ping 
ansible "192.168.66.151:192.168.66.152" -m ping
逻辑与
#在websrvs组并且在dbsrvs组中的主机
ansible "webservers:&dbservers" -m ping

192.168.66.151 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
逻辑非
#在websrvs组,但不在dbsrvs组中的主机
#注意:此处为单引号
ansible 'webservers:!dbservers' -m ping
正则表达式
ansible "webservers:&dbservers" -m ping
ansible "~(web|db)servers" -m ping
ansible命令执行过程
  1. 加载自己的配置文件默认 /etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件,如:command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户 $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  4. 给文件+x执行
  5. 执行并返回结果
  6. 删除临时py文件,退出
  • 可以通过加参数 -v 列出详细的执行过程
[root@ansible-server ~]# ansible "~(web|db)servers" -vvv -m ping > ansible.log
[root@ansible-server ~]# grep "chmod" ansible.log
ansible颜色描述
  • 绿色:表示成功
  • 黄色:修改了远程文件后并执行成功
  • 红色:表示执行失败

注意:ansible配置文件中可以定义颜色

[root@ansible-server ~]# vim /etc/ansible/ansible.cfg
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan

2.3.3:ansible-galaxy

此工具会连接 https://galaxy.ansible.com/ 下载相应的roles(角色)

范例:

#列出所有已安装的galaxy
ansible-galaxy list

#安装galaxy
ansible-galaxy install geerlingguy.redis

#删除galaxy
ansible-galaxy remove aeerlinqauy.redis

#下载互联上别人写好的roles
[root@ansible-server ~]# ansible-galaxy collection install ericsysmin.kubernetes

2.3.4:ansible-pull

此工具会推送ansible的命令至远程,效率无限提升,对运维要求较高

2.3.5:ansible-playbook

此工具用于执行编写好的playbook任务

范例:

[root@ansible-server ~]# vim hello.yml
---
#hello worlld yml file
- hosts: webservers
  remote_user: root
  tasks:
    - name: hello world
      command: /usr/bin/wall hello world

[root@ansible-server ~]# ansible-playbook hello.yml 
  • 可以在webserver节点的服务器上查看执行情况

2.3.6:ansible-vault

此工具可以用于加密解密yml文件

格式:

ansible-vault [create|decrypt|edit|encrypt|rekey|view]

范例:

ansible-vault encrypt hello.yml		#加密
ansible-vault view hello.yml		#查看
ansible-vault decrypt hello.yml		#解密
ansible-vault edit hello.yml		#编辑加密文件
ansible-vault create new.yml		#创建新文件

2.3.7:ansible-console

此工具可交互执行命令,支持ab,ansible 2.0+新增

提示符格式:

执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$

常用子命令:

  • 设置并发数:forks n    例如:forks 10
  • 切换组:cd 主机组   例如:cd web
  • 列出当前组主机列表:list

范例:

[root@ansible-server ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (3)[f:5]$
root@all (3)[f:5]$ list
192.168.66.151
192.168.66.152
192.168.66.153
root@all (3)[f:5]$ ls / | wc -l
192.168.66.151 | CHANGED | rc=0 >>
19
192.168.66.153 | CHANGED | rc=0 >>
19
192.168.66.152 | CHANGED | rc=0 >>
19
root@all (3)[f:5]$ ip a|grep ens33|grep inet|awk '{print $2}'
192.168.66.153 | CHANGED | rc=0 >>
192.168.66.153/24
192.168.66.151 | CHANGED | rc=0 >>
192.168.66.151/24
192.168.66.152 | CHANGED | rc=0 >>
192.168.66.152/24

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/4361.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。