自动化运维之Ansible

简介

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

 

Ansible特性

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

 

 

Ansible组件

 

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

 

Ansible工作机制

Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用版本控制系统(git/svn)来管理自定义模块及playbooks。

 

Ansible的安装

Ansible的安装方式有很多种,常用的安装方法是基于yum或者源码,如果是基于yum安装,需要配
置epel源,然后直接执行yum ‐y install ansible 即可。

源码安装配置如下: # 解决依赖关系: yum install ‐y python36 python36‐devel python36‐setuptools gcc libffi‐devel openssl‐devel # 下载ansible: wget https:
//github.com/ansible/ansible/archive/v2.8.0.tar.gz #解压安装 tar xf v2.8.0.tar.gz cd ansible‐2.8.0/ python setup.py build python setup.py install mkdir /etc/ansible cp ‐r examples/* /etc/ansible

 

Ansible配置文件优先级

ansible与我们其他的服务在这一点上有很大不同,配置文件是从多个地方查找的,顺序如下:

1,检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
2,~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
3,/etc/ansible.cfg检查etc目录的配置文件。

 

Ansible配置

inventory:该参数表示inventory文件的位置,资源清单(inventory)就是Ansible需要连接管理的一些主机列表。
library:Ansible的所有操作都使用模块来执行实现,这个library参数就是指向存放Ansible模块的目录。
forks:设置默认情况下Ansible最多能有多少个进程同时工作,默认5个进程并行处理。具体需要设置多少个,可以根据控制端性能和被管理节点的数量来确定。
sudo_user:设置默认执行命令的用户,也可以在playbook中重新设置这个参数。
remote_port:指定连接被管理节点的管理端口,默认是22,除非设置了特殊的SSH端口,否则不需要修改此参数。
host_key_checking:设置是否检查SSH主机的密钥。可以设置为True或False。即ssh的主机再次验证。
timeout:设置SSH连接的超时间隔,单位是秒。
log_path:Ansible默认不记录日志,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path。需要注意,模块将会调用被管节点的(r)syslog来记录,执行Ansible的用户需要有写入日志的权限。
ansible_ssh_host: ansible使用ssh要连接的主机。
ansible_ssh_port: ssh的端口。默认为22。
ansible_ssh_user: ssh登录的用户名。默认为root。
ansible_ssh_pass: ssh登录远程用户时的认证密码。
ansible_ssh_private_key_file: ssh登录远程用户时的认证私钥。(?)
ansible_connection: 使用何种模式连接到远程主机。默认值为smart(智能),表示当本地ssh支持持久连接(controlpersist)时采用ssh连接,否则采用python的paramiko ssh连接。
ansible_shell_type: 指定远程主机执行命令时的shell解析器,默认为sh(不是bash,它们是有区别的,也不是全路径)。
ansible_python_interpreter: 远程主机上的python解释器路径。默认为/usr/bin/python。
ansible_*_interpreter:使用什么解释器。例如,sh、bash、awk、sed、expect、ruby等等。

 

posted @ 2021-05-31 12:02  wzzsldws  阅读(142)  评论(0)    收藏  举报