ansible安装及原理
介绍两种安装方式yum 和编译
1)yum安装
yum install ansible -y
2)编译安装
...
ansible原理和架构
主要包含6个组件:
1)Ansible核心
2)Inventory主机清单
3)Modules模块
4)Playbook剧本
5)Plugins插件
6)连接插件
1.1)ansible提供了两种方式来执行任务。
第一,直接用ansible命令。
比如:ansible webserver -m command -a "uptime"
webserver表示主机组
-m 之后是命令模块
-a 之后是模块中的参数
第二,使用ansible-playbook命令,使用这个方式更多相当于第一种方法。
ansible-playbook webserver.yml
webserver.yml是一个定义好的Playbook,自动化运维,大部分靠它实现。
2.1)Inventory主机清单,就是被管理主机清单,在执行ansible任务时,必须指定被管理的主机清单。
默认在/etc/ansible/hosts文件中定义,也可以使用-i /path/hosts 来指定主机清单文件的位置。
3.1)Modules 模块:分为三类,核心模块、扩展模块、自定义模块。
4.1)Playbook剧本:可以将一个复杂的任务,非常清晰地表述出来。YAML格式编写。
5.1)Plugins插件:插件是ansible功能的补充,比如日志、邮件功能。
6.1)连接插件:默认使用SSH协议连接被管理服务器,提供4种连接方式open SSH,local(执行本地任务),paramiko(python的SSH连接库),zeromq(一个基于消息队列的多线程网络库)
ansible配置项说明
配置文件的默认路径 /etc/ansible/ansible.cfg
通过分块来定义各项参数,以[分块名称]表示,一共包含以下几块。
- default:定义一些通用的配置参数
- inventory = /etc/ansible/hosts #定义主机清单路径
- forks = 5 #定义任务的并发数,默认5个,执行时通过-f 指定
- sudo_user = root #定义默认的sudo用户,默认为root
- gathering = implicit #允许获取facts的值,如果定义为explicit,将无法获取setup模块所能获取到的变量值
- host_key_checking = False #关闭第一次连接系统是检查keys的提示
- action_plugins = /usr/share/ansible_plugins/action_plugins #定义插件的路径
- callback_plugins = /usr/share/ansible_plugins/callback_plugins #定义插件的路径
- connection_plugins = /usr/share/ansible_plugins/connection_plugins #定义插件的路径
- lookup_plugins = /usr/share/ansible_plugins/lookup_plugins #定义插件的路径
- vars_plugins = /usr/share/ansible_plugins/vars_plugins #定义插件的路径
- filter_plugins = /usr/share/ansible_plugins/filter_plugins #定义插件的路径
- fact_caching = memory #定义fact的缓存方式,可以选memory和redis
- privilege_escalation:定义一些提升权限的参数,一般保持默认即可。
- paramiko_connection:定义python的paramiko模块相关的配置优化参数,默认即可。
- ssh_connection:定义SSH配置参数。
- acceleerate:定义具体的端口、超时时间等参数,默认即可。
- selinux:定义文件系统的安全上下文设置,正常情况下操作将复制现有的安全上下文或者使用用户默认,对于某些文件系统,需要文件依照该文件系统中的上下文权限来继承,默认的例外的文件系统是nfs,vboxsd,fuse,ramfs,一般默认配置即可。
Inventory定义格式
使用-i参数指定inventory(主机清单)文件的路径,默认在ansible中定义的inventory路径为/etc/ansible/hosts。
支持主机名、ip、主机分组、简单正则、变量参数、主机分组之间的包含关系。
[dbservers] #定义了一个主机组,执行任务时可以指定某个主机组
db.example.com #定义被管理主机名称,注意该主机需要能被dns解析为ip地址,比如内网地址的名称和ip,写入host,也是可以的。
192.168.1.100 #定义被管理服务器的ip地址。
[gameservers]
gs[1:5] #使用通配符匹配主机,将包括gs1,gs2...gs5。5台主机
192.168.2.[101:105] #定义主机ip地址时,也可以使用数字通配符
[dnsservers]
dns.sh[a:b].example.com #支持字母匹配,得到两台主机dns.sha.example.com和dns.shb.example.com
[test01]
192.168.2.103 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=P@ssw0rd #为特定的参数赋值,此处定义了连接类型,ssh用户名和密码。
192.168.2.104 vsftpd_port=2121 #自定义变量,在playbook中可以引用。
[test02]
192.168.2.105
192.168.2.106
[test02:vars] #为一组主机定义相同的变量参数
ansible_connection=ssh
ansible_ssh_user=root
ansible_ssh_pass=P@ssw0rd
[testserver:children] #定义主机组testserver其中包含test01,test02两个分组
test01
test02
#所有的主机都包含在all分组中,慎用ansible all -m modules
inventory定义中有常用的自带变量
ansible_ssh_port: #定义连接主机的ssh端口
ansible_ssh_user: #定义连接到主机的ssh用户
ansible_ssh_pass: #定义连接到主机的ssh密码
ansible_sudo_pass: #定义sudo的密码
ansible_connection: #定义ansible的连接类型,可以是local、ssh或paramiko
ansible_ssh_private_key_file: #定义私钥路径