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配置参数。
        pipelining = False    #默认为false,定义为true时,ansible通过管道的方式,减少在远程被管理机器上执行任务模块过程的SSH连接数量,来提高性能,如果需要使用sudo切换用户的话,需要在被管理服务器/etc/sudoers中定义Disable requiretty
 
  • 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:    #定义私钥路径

 

posted @ 2020-03-16 12:11  qinliang  阅读(175)  评论(0编辑  收藏  举报