2-1·Ansible部署、上线、安装、配置、清单、JSON、命令,ansiblejson


二·Deploying Ansible

1)安装Ansible

1.ansible必备条件-控制节点:
● ansible 使用的是无代理架构
● ansible只需要在控制节点上安装,收管理的主机不需要安装
● 控制节点仅要求Python2.6以上版本(暂时不支持Python3)
● ansible软件包在ansible官网下载https://www.ansible.com/get-started

2.Ansible必备条件-受管主机:
● 受管主机不需要安装Ansible代理,但他们需要Python2.4以上版本。如果版本早于2.5,则需要安装Python-simplejson软件包
● ansible控制节点通过网络与受管主机通信。默认使用SSH,通常使用控制节点上运行Ansible用户连接主机
● SSh会话要求在发起每一连接时进行身份验证,在企业环境中,选择基于秘钥的SSH身份验证

2)引用清单主机

● 安装Ansible之后,便可执行Ansible的命令。–help -h 提示方法

● $ ansible -h

● ansible命令可以用于主机管理,必须为他提供清单文件,定义收管理的主机列表。
● 可以使用-i选项指定清单的文件路径

 $  ansible <host-pattern>  -i /path/to/inventory/file  [option]
 $  ansible --list-hosts           //查看主机受管列表

3)主机名称

最基本的模式是受管主机名称在列表清单中!

$ cat myinventory
$  ansible web.example.com -i myinventory --list-hosts
hosts(1):
web.example.com

4) IP地址inventroy可以通过IP地址和主机名来识别受管主机

$  ansible 192.168.2.1 -i myinventory --list-hosts                 //检查主机是否在清单

5)组当组名称用作主机模式时,ansible将对属于该组的主机进行操作

$  ansible lab -i myinventory --list-hosts

6)列表:

● 可以通过逗号分隔,引用清单文件中的多个条目来作为主机模式
● 可以包含任何清单条目,主机名称和IP、组等

$  ansible labhost1.example.com,test,192.168.2.2 -i myinventory --list-hosts

7)所有清单项目

● inventory 文件中的所有主机
● 可使用all关键字

$  ansible all -i myinventory --list-hosts

8)通配符wildcards:

● 若要达成all主机模式相同的目标,可使用通配符“*”,他将匹配任意字符串
● 可单独使用星号字符来引用所有受管主机
● 也可和主机名称、IP、组、字符串结合使用,来匹配主机的子集

$  ansible '*'  -i  myinventory --list-hosts

9)高级主机模式:

● 除包含通配符外,ansible也可使用排除与包含逻辑创建复杂的主机模式
● 包含的实现用’:’字符分隔主机模式中的组以表示OR逻辑

$  ansible lab:datacenter1 -i myinventory --list-hosts

10)配置Ansible

11)配置文件的优先级

● 由于ansible配置文件有多种,当前使用哪一个配置文件可能令人困惑
● 可使用ansible –version 命令。除了显示安装版本,他还显示生效的配置文件
● 显示活动的Ansible配置文件还有一种方式,那就是在命令行执行ansible -v选项

$  ansible --version
ansible 2.0.1.0
config file  =  /etc/ansible/ansible.cfg
$  ansible servers --list-hosts -v
Using  /etc/ansible/ansible.cfg as config file
 ....output omitted....

12)Ansible配置文件

● ansible配置文件由若干个部分组成,每一部分含有 键/值 对 形式定义的设置
● 在默认的Ansible配置文件中,各项设置分组到下列六个部分中

$  grep "^\["  /etc/ansible/ansible.cfg
[defaults]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[accelerate]
[selinux]

● 配置文件中的大部分设置在[defaults]
● [privilege_escalation] 中定义对受管主机执行特权升级
● [paramiko_connection]、[ssh_connection] 和 [accelerate] 用于优化受管主机连接
● [selinu] 定义如何配置selinx交互

13)Ansible设置

● inventory = ansible清单文件的位置
● remote user = 用于建立与受管主机的连接的用户账户
● become = 为受管主机上的操作启动或禁用特权升级
● become_method = 定义受管主机上的特权升级方法
● become_user = 在受管主机上升级特权的用户
● become_ask_pass = 定义受管主机上的特权是否提示输入密码

14)使用Ansible执行临时命令(ad-hoc):

● ansible允许管理员对受控主机执行任务。临时命令是可以通过Ansible执行的最基本操作
● 临时命令在控制节点上运行ansible并在命令当中执行对受管主机的操作
● 每一临时命令能够执行一项操作,如需要对受管主机执行多个操作,管理员需要执行多个命令
● 临时命令是管理员开始使用Ansible的一种便捷途径,也充当更为高级的Ansible功能的入门基础,如模块,任务,play和playbook
● 及时掌握了高级ansible的功能后,管理员仍会用到临时命令,实际有用!
● 临时命令可被用于快速更改大量受管主机,如更改配置文件和执行软件管理等任务
● 临时命令也可用于执行非入侵性命令,如查询一大组受管主机来获取诊断信息

15)使用临时命令:

若执行临时命令:

$  ansible host-pattern -m module [-a 'module arguments']  [-i inventory]

● host-pattern:用于提供Ansible对其执行命令的受管主机列表,由此参数确定
● -i :用于指定备选清单文件位置
● -m :选项指定模块定义使用哪一个ansible模块执行远程操作。模块将在后续阐述,目前,可将模块视作实际为完成特定任务的工具
● -a:选项传递参数到指定的模块,一些模块可以无参数;一些模块可以多参数,参数说明可以在模块文档找到
● 管理员可以使用/etc/ansible/ansible.cfg Ansible配置文件[defaults]部分下的module_name 定义模块

#default module name for /usr/bin/ansible
#module_name =  command

16)command 模块

● 如果执行临时命令省略了-m选项,ansible将参考配置文件的预定义的command 模块
● 如果未定义模块,ansible 将使用内部定义的command模块
● 一下命令是相同的:

$  ansible host-pattern -m command -a 'module arguments'
$  ansible host-pattern -a 'module arguments'


● 默认的command模块是允许管理员对受管主机执行命令。通过-a选项指模块的参数为要执行的命令。

$  ansible mymanagedhosts -m command -a /usr/bin/hostname 
host1.lab.example.com |  success | rc=0 >>
host1.lab.example.com
......

第一行返回主机名和操作结果
第二行输出

● 若要改善临时命令输出的可读性,管理员可将每一项操作单独输出(-o 参数)

$  ansible mymanagedhosts -m command -a /usr/bin/hostname -o 

17)临时命令配置-连接设置:

● Ansible默认使用SSH协议发起与受管主机的连接
● SSH协议要求使用受管主机上的账号创建连接。此账户被Ansible指代为远程用户,配置文件[defaults]部分下的remote_user 进行设置

remote_user =  root 

● 默认情况下,remote_user 参数在/etc/ansible/ansible.cfg 中已注释掉。如果未定义此参数,临时命令将使用控制节点上执行该临时命令的用户连接受管主机
● 因为操作是通过远程用户发起的,所以他将受限制与该用户的权限

18)临时命令配置-特权升级:

● 在以远程用户身份连接受管主机后,ansible可以切换为该主机上的其他用户,然后执行操作
● 通过Ansible的特权升级功能实现;sudo 可以以root身份执行
● 启用特权升级的配置在ansible.cfg配置文件的[privilege_escalation] ,要启用特权升级,取消become注释,并定义为True
● 启用特权升级后,become_method, become_user 和 become_ask_pass 参数可发挥作用,即使在/etc下被注释,但他们已在Ansible.cfg进行了预定义:

become  =  True  
become_method =  sudo 
become_user =  root 
become_ask_pass =  False 

19)ansible命令行选项

使用之前,可以通过查询ansible –help 输出当前定义值

inventory =  -i 
remote_user =  -u 
become   =  -b ,--become
become_method  =  --become_method
become_user =  --become_user 
become_ask_pass =  --ask-become-pass,  -K

20) 使用动态清单:

● 默认情况下,ansible提供基于文本的清单来定义要管理的主机
● 在运营大型基础架构时,系统信息通常由外部目录服务提供,或者通过其他服务提供,如zabbix 或cobbler
● ansible支持这些从外部数据源动态构建的清单
● 云计算和虚拟化基础架构也有实例和虚拟机的信息,这些信息可能会在短期内创建并删除,ansible动态清单也可以从红帽OpenStack平台和AmazonEC2等用云和虚拟解决方案实施构建
● ansible中的静态清单可以直接在/etc/ansible/hosts文件指定,或者通过-i参数指定
● 如果清单文件可以执行,他将被视为动态清单程序,ansible则将尝试运行它来生成清单,如过文件不可执行,则被视为静态清单

21)支持的平台

● ansible的GitHub网站提供若干脚本
● 这些脚本支持基于主机信息动态生成清单,主机信息可以来自多平台
● 私有云:Redhat OpenStack
● 公有云:RackspaceCloud AWS
● 虚拟化平台:Ovirt(上游虚拟化)
● PaaS: openshift
● 生命周期托管工具:Spacewalk(红帽卫星)
● 主机托管程序: Digital Ocean or Linode

22)编写动态清单程序

可以编写自定义动态清单程序
可以使用任何语言编写,必须JSON格式返回

$  ./inventoryscript --list
{
"webservers"  : ["web1.lab.example.com","web2.lab.example.com"],
"databases"  :  ["db1.lab.example.com","db2.lab.example.com"]
}

23)处理多个清单

● ansible支持使用多个清单,如果传递-i 参数的值或/etc/ansible/ansible.cfg配置中inventory 参数的值是目录,该目录中包含的文件将被用于多个清单(无论静态or动态)检索信息。该目录中的可执行文件将用于检索动态清单,其他文件用作静态清单。
● 存在多个清单文件时,它们将按照字母顺序进行检查。如果一个文件的内容依赖另一个文件,则前者的文件名务必要在字母顺序上一排的后面

相关内容

    暂无相关文章