ansible的安装及简单配置

  • 一、ansible的简介
  • 官方网站
  • 二、ansible的安装
  • 1、下载epel仓库
  • 2、安装ansible
  • 3、全局测试
  • 4、ansible的命令参数
  • 三、ansible配置清单
  • 1、构建清单
  • 2、嵌套清单
  • 3、主机规格的范围化操作
  • 4、指定清单的正则表达式
  • 四、ansible配置文件
  • 1、分类与优先级
  • 2、常用配置参数
  • 五、不同用户的配置设定


一、ansible的简介

1、ansible是新出现的自动化运维工具,完全基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
2、ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
3、ansible的特点:

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

官方网站

https://www.ansible.com/

ansible docker安装指定包 ansible安装配置_运维

二、ansible的安装

1、下载epel仓库

(1)rhel8环境

yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

(2) rhel7.6环境

yum install wget -y
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2、安装ansible

yum install ansible -y

查看版本及配置文件

ansible --version
rpm -qc ansible

ansible docker安装指定包 ansible安装配置_运维_02

/etc/ansible/ansible.cfg

全局配置文件

/etc/ansible/hosts

全局主机清单文件

3、全局测试

(1)指定远程主机

vim /etc/ansible/hosts

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_03


(2)列出远程主机

ansible all --list-hosts

ansible docker安装指定包 ansible安装配置_运维_04

(3)使用ping模块测试远程主机

-m:使用模块,-k:使用交互式输入ssh的密码

ansible 172.25.36.2 -m ping -k

ansible docker安装指定包 ansible安装配置_配置文件_05

  • 使用root用户调用权限太大,所以一般用普通用户的身份操作远程主机

(4)在server2主机创建devops用户,并赋予密码,同时下放权力给devops用户

useradd devops
echo devops | passwd --stdin devops
visudo  ##下放权力

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_06

(5)做ssh免密认证,将公钥发送给远程主机的devops用户

ssh-keygen
ssh-copy-id devops@172.25.36.2

ansible docker安装指定包 ansible安装配置_运维_07

(6)使用远程主机的devops用户执行一些命令

-a:指定模块参数,--become参数,表示使用sudo执行命令,-u:指定用户

ansible 172.25.36.2 -a "touch /mnt/testfile" -u devops --become

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_08

ansible docker安装指定包 ansible安装配置_配置文件_09

4、ansible的命令参数

  • anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]

参数

功能

-i

指定hosts文件路径,默认在/etc/ansible/hosts

-m

指定使用的module名称,默认command模块

-a

指定模块参数

-k(小写)

提示输入ssh密码,并非基于ssh密钥认证

-K(大写)

提示输入sudo密码

-b

使用sudo执行命令

-become-user=

指定sudo的用户

-f,-forks=NUM

NUM默认是整数5,指定fork开启同步进程的个数

-u

指定远程主机的执行用户

-v

详细模式,如果执行成功,输出详细结果,-vv -vvv更详细过程

-C

预执行检测

-T

执行命令的超时时间,默认10s

--list

显示主机列表,也可以用--list-hosts

--version

显示版本

三、ansible配置清单

1、构建清单

cd /etc/ansible/
vim skk
ansible all -i skk --list-hosts  ##查看skk清单中的主机
ansible ungrouped -i skk --list-hosts  ##查看skk清单中未定义组的主机
ansible test -i skk --list-hosts  ##查看skk清单中组为test的主机

ansible docker安装指定包 ansible安装配置_ansible_10

2、嵌套清单

[westos:children]

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_11

3、主机规格的范围化操作

[start:end]

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_12

4、指定清单的正则表达式

*

所有

:

逻辑或

:&

逻辑与

:!

逻辑非

~

以关键字开头

~(str1|str2)

以条件1或条件2开头

vim inventory

ansible docker安装指定包 ansible安装配置_ansible docker安装指定包_13

ansible '172.*' -i inventory --list
ansible 'westos_list1:westos_list2' -i inventory --list
ansible 'westos_list2:&westos_list3' -i inventory --list
ansible 'westos_list2:!westos_list3' -i inventory --list
ansible '~westos' -i inventory --list

ansible docker安装指定包 ansible安装配置_配置文件_14

四、ansible配置文件

1、分类与优先级

/etc/ansible/ansible.cfg

基本配置文件,找不到其他配置文件此文件生效

~/.ansible.cfg

用户当前目录中没有ansible.cfg此文件生效

./ansible.cfg

优先级最高

2、常用配置参数

[default]

基本配置信息

inventory=

指定清单路径

remote_user=

在远程主机上登陆的用户名称,未指定使用当前用户

ask_pass=

是否提示输入SSH密码,如果公钥登陆设定为false

library=

库文件存放目录

local_tmp=

本机临时命令执行目录

remote_tmp=

远程主机临时py命令文件存放目录

forks=

默认并发数量

host_key_checking=

第一次连接远程主机时是否要输入yes建立host_key

sudo_user=

默认sudo用户

ask_sudo_pass=

每次在远程主机执行ansible命令时是否询问sudo密码

module_name=

默认模块,默认使用command,可以修改为shell

log_path=

日志文件路径

[privilege_escalation]

身份信息设定

become=

连接后是否自动切换用户

become_method=

设定切换用户的方式,通常用sudo

become_user=

在远程主机中切换到的用户,通常为root

become_ask_pass

是否需要为become_method提示输入密码,默认为false

(1)修改清单路径

vim /etc/ansible/ansible.cfg 

 14 inventory      = /etc/ansible/hosts,/etc/ansible/westos

ansible docker安装指定包 ansible安装配置_运维_15


(2)python储存文件

remote_tmplocal_tmp是远端的本地临时文件路径;当执行ansible命令后,主机生成py临时脚本,通过ssh发送到远程主机,远程主机执行完删除该临时文件,主机也会删除临时文件。

vim /etc/ansible/ansible.cfg

 17 remote_tmp     = ~/.ansible/tmp
 18 local_tmp      = ~/.ansible/tmp

执行远程主机等待60秒的命令,监控两边是否有临时文件产生

ansible 172.25.36.2 -m shell -a 'sleep 60' -u devops -b
watch -n 1 ls -l ~/.ansible/tmp/
ls ~/ansible/tmp

ansible docker安装指定包 ansible安装配置_运维_16


等待60秒后,生成的两个临时文件自动消失

ansible docker安装指定包 ansible安装配置_ansible_17

(3)默认执行become模块

执行命令时,连接远程主机的用户为devops,在远程主机中操作指令时转换用户身份,并用sudo调用为root用户,执行sudo调用命令时不提示输入密码。

vim /etc/ansible/ansible.cfg

107 remote_user = devops
339 become=True
340 become_method=sudo
341 become_user=root
342 become_ask_pass=False

不需要加-b-K

ansible 172.25.36.2 -m shell -a 'hostname' -v

ansible docker安装指定包 ansible安装配置_配置文件_18

五、不同用户的配置设定

  • ansible只有一个主配置文件,不同用户的配置不同时,需要把配置独立出来,一个用户一个配置文件。需要该用户创建配置目录及配置文件,只有在配置目录时,才会优先读取该用户的配置文件。

1、创建skk用户及其配置目录

useradd skk
passwd skk
su - skk
mkdir /home/skk/ansible

2、编辑配置文件

su - skk
vim /home/skk/ansible/ansible.cfg

[defaults]
inventory               = ~/ansible/inventory
host_key_checking       = False
ask_pass                = False
remote_user             = devops
module_name             = shell

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

3、编写配置清单

vim /home/skk/ansible/inventory

[demo]
172.25.36.2

4、用ansible主机的root用户将自己的私钥给skk用户发送一份,保证可以连接到远程主机的devops用户

公钥在前面做全局测试时已经发送给远程主机的devops用户

scp ~/.ssh/id_rsa skk@172.25.36.1:~/.ssh/

5、切换到skk用户,用ping模块测试

su - skk
cd ansible/
ansible demo -m ping -v

ansible docker安装指定包 ansible安装配置_ansible_19