Ansible系列-基础篇-Ansible Inventory的合理化配置

欢迎关注个人公众号 DailyJobOps

原文地址:Ansible系列-基础篇-Ansible Inventory的合理化配置


Ansible 是对主机进行管理,可以对主机进行分组等配置,默认配置存放在 /etc/ansible/hosts 文件

Ansible Inventory内置参数

在进行配置之前,我们先了解下 Inventory都有哪些内置的参数

参数 参数说明
ansible_ssh_host ssh 连接的主机IP
ansible_ssh_user ssh 连接的主机user
ansible_ssh_port ssh 连接的主机端口,默认是22
ansible_ssh_pass ssh 连接的主机用户密码;建议采用--ask-pass 或者SSH秘钥登录
ansible_ssh_sudo sudo 用户
ansible_sudo_pass sudo 用户对应的密码; 建议采用 --ask-sudo-pass
ansible_sudo_exe sudo 路径 (version 1.8 以上支持)
ansible_connection 与主机连接的方式;Anisble1.2以上采用paramiko;1.2之后采用smart
ansible_ssh_private_key_file ssh连接使用的私钥文件地址,可以有多个
ansible_shell_type 目标系统的shell类型,默认是'sh',也可以配置'csh' 后者 'fish' 等
ansible_python_interpreter 目标主机的 python 路径,如果目标主机有多个Python,则非常有用

Inventory 常规配置

ansible_ssh_host=192.168.1.2 ansible_ssh_user=devops ansible_ssh_port=9555

[dbgroup]
db-master ansible_ssh_host=192.168.1.3 ansible_ssh_user=devops ansible_ssh_port=9555
db-slave ansible_ssh_host=192.168.1.4 ansible_ssh_user=devops ansible_ssh_port=9555 

[web_group]
ansible_ssh_host=192.168.1.[5:7] ansible_ssh_user=devops ansible_ssh_port=9555 http_port=9090

[website:children]
dbgroup
web_group

[web_group:vars]
domain=www.colinspace.com

结合Inventory内置参数和上面的配置Demo,来逐步说明解析

  • 可以单独配置一些主机,比如第一行记录,同时执行了端口和用户,IP地址
  • 可以把某些具有共性的主机放到一个分组中,比如上面的两个数据库和三个web主机;主机名放到[]中,另外建议主机名采用下划线分割,不然会有warnning
  • 可以给配置的主机 配置别名 比如上面的 db-master 和 db-slave ,其实这个别名可以配置成对应的主机名,这里可以思考下,配置成主机名有什么优势?
  • 在配置一些主机的时候,如果主机出现的有规律,可以类似第8行配置进行简写
  • 分组可以嵌套,比如 website 分组包含了dbgroup 和 web_group
  • 另外可以定义分组的变量,如 14 和 15行配置
  • 第8行最后的 http_port 是定义的主机变量

这里不管是主机变量还是分组变量都是为了在后续的 playbook 中使用,当然这种把变量配置到 Inventory配置文件中的做法不是最优解,官方给出的建议是单独配置

扩展:分文件定义 Host 和 Group 变量

注意:inventory文件格式是 ini ;但是这里分文件之后的Host或者Group变量存放文件的格式是 yaml

  • /etc/ansible/host_vars/xxx 存放主机变量,该文件夹下每个文件都是一个主机名称,内容存放需要的主机变量
  • /etc/ansible/group_vars/yyy 存放分组变量,该文件夹下每个文件都是一个分组名称,内容存放需要的分组变量

在实际使用中我们可以如下操作

# 直接 使用对应的主机IP来访问
ansible 192.168.1.2 -m ping
# 也可以使用别名
ansible db-master -m shell -a 'ps -ef|grep mysql'
# 可以针对分组操作
ansible dbgroup -m shell -a 'ps -ef|grep mysql'
# 上面分组操作等同于
ansible db-master:db-slave -m ping
# 或者使用 * 通配符
ansible db-* -m ping 

上述命令行操作是ansible ad-hoc 方式,-m 后面接模块名称 -a 后面接模块需要的参数

Inventory 优化配置

比如,常规ansible操作是通过普通账号操作,有时候需要sudo权限,上面 Inventory中没有配置sudo相关,是因为我们在 主配置文件/etc/ansible/ansible.cfg 中进行了相关配置

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

另外刚才提到 Inventory 中可以给每个主机配置一个别名,建议是配置成对应的主机名,好处就是:在运维操作中,一般会把 主机名和其对应的IP地址解析添加到 /etc/hosts 文件中去,这样的话我们只在inventory中配置主机名即可

如果这个时候默认端口是22,同时操作的用户就是ansible管理节点当前登录的用户,那么 inventory的配置文件就可以简化为

devops-demo-vpc 

[dbgroup]
db-master-vpc
db-slave-vpc

[web_group]
web-01-vpc
web-02-vpc
web-03-vpc

[website:children]
dbgroup
web_group

[web_group:vars]
domain=www.colinspace.com

在每个主机的 /etc/hosts 文件中同步如下配置即可

192.168.1.2 devops-demo-vpc
192.168.1.3 db-master-vpc
192.168.1.4 db-slave-vpc
192.168.1.5 web-01-vpc
192.168.1.6 web-02-vpc
192.168.1.7 web-03-vpc

/etc/hosts 的管理可以通过后续介绍的playbook管理同步,结合cmdb就可以实现内部域名(可以是内部定义的有意义的域名或者主机名)解析

这个有个前提就是ansible管理是通过公私钥对来进行ssh免密登录连接,这里引申出几个运维规范:

1、Linux主机禁止root登录

2、Linux主机禁止密码登录

3、Linux用户通过公私钥对登录

4、Linux主机最小化SA账号开通sudo权限

多Inventory配置

一般都会存在多个环境,为了有效管理,就可以为不同的环境配置不同的inventory配置。

配置说明

# 主配置文件中通过 inventory 参数指定一个默认
inventory = /etc/ansible/inventory/prod.hosts

# 在 inventory目录下分别存放各环境的 inventory文件

| - /etc/ansible/inventory/
| - - /etc/ansible/inventory/prod.hosts
| - - /etc/ansible/inventory/gamma.hosts
| - - /etc/ansible/inventory/test.hosts
| - - /etc/ansible/inventory/dev.hosts

默认是管理生产环境主机,如果需要管理其他环境主机,只需要通过 -i 参数指定不同的 inventory 文件即可

ansible -i /etc/ansible/inventory/dev.hosts xxx-host -m shell -a 'df -h'

还有一种做法就是 inventory 参数配置成目录,比如

inventory = /etc/ansible/inventory/

这样就不存在通过 -i 参数指定不同的inventory的问题,ansible 会从该目录下所有文件中去查询需要操作的主机或者分组。如果文件太多遍历存在一定的性能消耗,而且一定要清楚操作的目标节点。这就需要清晰的环境主机名规划才可以,

两种方式各有优缺点,大家自行选择即可

动态 Inventory

目的是为了解决超大量主机管理时,维护 inventory 文件成本的问题。ansible通过支持动态Inventory,其文件里的主机列表和变量信息都可以从外部拉取

所以需要一个脚本,配置如下

inventory = /etc/ansible/inventory.py

不过 ansible 对这个脚本是有要求的

  • --list 或者 -L 显示所有主机和主机组的信息,JSON格式。
  • --host 或者 -H 返回某台主机的信息,JSON格式。

一般静态配置文件方式即可满足大家1K以内主机管理,如果更多就结合运维的CMDB来实现动态,这里先不扩展介绍,在最后的扩展章节,结合运维平台CMDB实现动态inventory 真实案例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342