[ansible系列①]ansible详解

 一.    Ansible简介

1.    什么是Ansible

    Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
    Ansible 用 python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt,Puppet,Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于,如果需要的话,你可以在不止一个地方控制你的整个基础架构。

2.    Ansible特性 

  • Agentless:不需要在被管理节点上安装客户端,只要有sshd即可
  • Serverless: 在服务端不需要启动任何服务,只需要执行命令就行
  • Modules in any language:基于模块工作,可以使用任意语言开发ansible模块
  • YAML, not code:使用yaml语言定制playbook
  • SSH by default:默认使用ssh控制各节点
  • Strong multi-tier solution:可实现多级控制

 3.    Ansible基本组件

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):把需要完成的多个任务定义在剧本中
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  • 主机群(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作

 4.    Ansible工作机制

     Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统基于OpenSSH通信,Windows系统基于PowerShell,管理端必须是Linux系统,使用者认证通过后在管理节点通过Ansible工具调用各个应用模块将指令推送到被管理端执行,并在执行完毕后自动删除产生的临时文件。

    根据Ansible使用过程中的不同角色,我们将其分为:1)使用者;2)Ansible工具集;3)作用对象。

1)使用者:
 ansible使用者来源于多种维度,图中有四种;
第一种方式:CMDB(Configuration   Management   Database,配置管理数据库),CMDB存储和管理企业IT架构中的各项配置信息,是构建ITIL项目的核心工具,运维人员可以组合CMDB和ansible,通过CMDB直接下发指令调用Ansible工具集,完成操作者所下达的指令。

第二种方式:PUBLIC/PRIVATE方式,ansible除了丰富的内置模块外,同时提供丰富的api语言接口,如PHP,PYTHON,PERL等当下流行语言,基于PUBLIC(公有云)/PRIVATE(私有云),ansible以调用的方式运行。

第三种方式:USERS直接使用AD-Hoc临时命令集调用ansible工具集来完成任务。

第四种方式:USERS预先编写好ansbile  playbook,通过执行playbook中预先编排好的任务集按顺序完成任务执行。

2)ansible工具集:
        ansible命令是ansible的核心工具,ansible命令并非自身完成所有的功能集,其只是ansible执行任务的调用入口,所有命令的执行通过其调兵遣将完成最终目标。

3)作用对象:
        ansible的作用对象不仅仅是linux和非linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。

dddb5c6f8ce94a12afa1e74824d330a0.png

 根据上图我们可以看出,ansible主要由6个部分组成。

·  ansilbe  playbook:任务剧本,编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是json格式的YML文件。

·  inventory:ansible管理主机的清单;

·  modules:ansible执行命令的功能模块,多数为内置核心模块,可自定义;

·  plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等(该功能不常用)

·  api:供第三方程序调用的应用程序编程接口;

·  ansible:该部分上图显示不明显,组合inverntory,api,modules,plugins的核心执行工具

d319e869eeb14b7293b22c79f0cf664b.png

   使用者使用ansible(AD-Hoc)或者Ansible-playbook(读取对应的playbook文件)时,在管理端输入ansible的AD-Hoc命令集或Playbook后,ansible会遵循预先编排的规则将playbook拆解为play,再将Play组织成ansible可识别的任务(task),随后调用任务涉及的所有模块(module)和插件(plugin),根据inventory中定义的主机列表通过ssh将任务集一临时文件或命令的形式传输到远程客户端执行,并返回执行结果,如果是临时文件,执行完毕后会自行删除。

二.    Ansible安装 

 1.    pip安装方式

     ansible底层是基于Python编写的,所以可以通过PIP方式安装ansible。

1.1    安装python-pip

yum  install   -y  python-pip  python-devel

 1.2    安装ansible服务

## 安装钱确保gcc,gibc开发环境均已安装,系统几乎所有的软件包编译都基于gcc,如果不确认可以执行以下命令。
yum   install   gcc   glibc-devel  zlib-devel  openssl-devel   rpm-build  -y

##  升级本地pip版本
pip  install   --upgrade  pip


##安装ansible
pip   install   -y   ansible

2.    YUM安装 方式

 2.1    先安装epel源

epel(RHEL 8)
1)安装 epel 配置包
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm


2)将 repo 配置中的地址替换为阿里云镜像站地址
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

2.2   yum安装ansible服务

yum   install   -f   ansible

 3.    apt安装方式

apt-get install software-properties-common
##添加ansible源
apt-add-repository   -y   ppa:ansible/ansible

## 更新仓库
apt   update

##安装ansible
apt-get   install   -y  ansible

 三.    配置文件解析

 1.    配置文件优先级

 ansible的配置文件名为ansible.cfg,它一般会存在于四个地方:

  • ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文件
  • ./ansible.cfg:当前工作目录,即当前执行ansible指令的目录,如果ANSIBEL_CONFIG环境变量未定义,则优先使用该配置文件
  • ~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前工作目录下不存在ansible.cfg配置文件,则会查找用户家目录下的该隐藏文件
  • /etc/ansible/ansible.cfg:默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件

 需要说明的是,配置文件中所有的配置项都可以通过环境变量的方式来定义,而环境变量定义的配置项具有最高优先级,会覆盖掉所有配置文件中的配置项

2.    ansible.cfg配置文件说明

 2.1   配置文件分段说明

ansible.cfg的配置默认分为十段:

  • [defaults]:通用配置项
  • [inventory]:与主机清单相关的配置项
  • [privilege_escalation]:特权升级相关的配置项
  • [paramiko_connection]:使用paramiko连接的相关配置项,Paramiko在RHEL6以及更早的版本中默认使用的ssh连接方式
  • [ssh_connection]:使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式
  • [persistent_connection]:持久连接的配置项
  • [accelerate]:加速模式配置项
  • [selinux]:selinux相关的配置项
  • [colors]:ansible命令输出的颜色相关的配置项
  • [diff]:定义是否在运行时打印diff(变更前与变更后的差异)

2.2    配置文件默认基础参数 

[default]
inventory      = /etc/ansible/hosts
remote_user    = root
ask_pass       = false
log_path       = /var/log/ansible.log

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

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s 
host_key_checking = False 


inventory:定义默认使用的主机清单
remote_user: ansible在操作远程主机时,使用远程主机上的哪个用户身份,默认是root
ask_pass:ansible在操作远程主机时,获取远程主机上的用户身份,是否交互提示密码验证,默认为true。如果使用密钥认证的话,建议将其设置为false
log_path:默认ansible 执行的时候,并不会输出日志到文件,打开该配置项,所有的命令执行后,都会将日志输出到/var/log/ansible.log文件。
become:如果ansible在操作远程主机时,使用的是远程主机上的普通用户,该普通用户是否允许提权
become_method:如果允许提权,使用何种提权方式,默认是sudo
become_user:提权到哪个用户身份,默认是root
become_ask_pass:提权时,是否交互提示密码验证,默认为False
ssh_args:ansible通过ssh连接远程被管理机,这里用于定义一些ssh连接时的参数,如-C启用压缩传输,ControlPersist用于提升性能。
host_key_checking:通过ssh首次连接远程主机时,由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes/no进行确认将key字符串加入到~/.ssh/known_hosts文件中。将此项设置为False将跳过该确认过程。

2.3   详细配置文件参数

2.3.1    [defaults]    通用配置项

该类型配置下定义常规 的连接类配置,如inventory,library,remote_tmp,local_tmp,forks,poll_interval,sudo_user,ask_user,ask_sudo_pass,ask_pass,transport,remote_port等

[default]
inventory      = /etc/ansible/hosts            #定义Inventory主机清单文件
library        = /user/share/my_modules        #自定义lib库存放目录
remote_tmp     = $HOME/.ansible/tmp            #临时文件远程主机存放目录
local_tmp      = $HOME/.ansible/tmp            #临时文件本地存放路径
forks    = 5                                   #默认开启的并发数
poll_interval = 15                             #默认轮询时间间隔
sudo_user = root                               #默认sudo用户
ask_sudo_pass = True                           #是否需要sudo密码
ask_pass = True                                是否需要密码
roles_path = /etc/ansible/roles                #默认下载的roles存放的目录
host_key_checking = False                      #首次连接是否需要检查key认证,建议设置为False
timeout = 10                                   #默认超时时间
log_path = /var/log/ansible.log                #执行日志存放文件
module_name = command                          #默认执行的模块
#action_plugins = /usr/share/ansible/plugins/action    #action插件的存放目录
#callback_plugins = /usr/share/ansible/plugins/callback    #callback插件的存放目录#connection_plugins = /usr/share/ansible/plugins/connection    #connection插件的存放目录
#lookup_plugins = /usr/share/ansible/plugins/lookup        #lookup插件的存放目录
#vars_plugins = /usr/share/ansible/plugins/vars     #vars插件的存放目录 
#filter_plugins = /usr/share/ansible/plugins/filter    #filter插件的存放目录
#test_plugins = /usr/share/ansible/plugins/test     #test插件的存放目录 
#strategy_plugins = /usr/share/ansible/plugins/strategy    #strategy插件的存放目录
# fact_caching = memory     #getfact缓存的主机信息存放方式 
#retry_files_enabled = False
#retry_files_save_path = ~/.ansible-retry #错误重启文件存放目录

上述是日常可能用到的配置,这些多数保持默认即可。

2.3.2    [privilege_escalation]特权升级相关的配置项

 处于安全考虑,部分公司不希望直接以root的高级管理员权限直接部署应用,往往会开放普通用户权限并给予sudo的权限,该部分主要是针对sudo用户提权配置。

[peivilege_escalation]
become = True                #是否sudo
become_method = sudo         #提权方式
become_user = root           #提权后变为root用户
become_ask_pass = False      #提权后是否严重密码

 2.3.3     [paramiko_connection]

 使用paramiko连接的相关配置项,Paramiko在RHEL6以及更早的版本中默认使用的ssh连接方式,该配置部分功能不常用。

[paramiko_connection]
record_host_keys = False     #不记录新主机的key,以提升效率
pty = False                  #禁用sudo功能

2.3.4    [ssh_connection]

 使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式,该部署主要是ssh连接的一些配置,配置项少,多数默认即可

【ssh_connection】
pipelining = False          #管道加速功能,需要配合requiretty使用,方可生效

 2.3.5    [accelerate]  加速模式配置项

 ansible连接加速相关配置,因为有部分使用者不满意ansible的执行速度,所以ansible的连接和执行速度方面也在不断的优化,该配置项在提升ansible连接熟读时会涉及,多数保持默认

【accelerate】
accelerate_port  = 5099            #加速连接端口
accelerate_timeout = 30            #命令执行超时时间,单位秒
accelerate_connect_timeout = 5.0   #连接超时时间,单位秒
accelerate_daemon_timeout = 30     #上一个活动连接的时间,单位分钟
accelerate_multi_key = yes         

2.3.6    [selinux] selinux相关的配置项

关于selinux的相关配置几乎不会涉及,保持默认即可

【selinux】
libvirt_lxc_nodeclabel  = yes

2.3.7    [colors]  ansible命令输出的颜色相关的配置项

 ansible对于输出结果的颜色也进行了详细的定义,且可配置,该选项对日常功能应用影响不大,几乎不用修改,保持默认即可。

【colors】
highlight  =  while
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

 上面尽可能全的介绍了运维工作中可能需要修改的配置选项,除了在关闭首次连接提示(host_key_checking = False)或提速调整(accelerate)时可能会做稍微调整,其中绝大多数选项默认即可,ansible安装好后无需任何修改即可使用。

猜你喜欢

转载自blog.csdn.net/qq_43714097/article/details/127208843