歡迎關(guān)注個人公眾號 DailyJobOps
原文地址:Ansible系列-基礎(chǔ)篇-Ansible Inventory的合理化配置
Ansible 是對主機進行管理诞仓,可以對主機進行分組等配置揩魂,默認(rèn)配置存放在 /etc/ansible/hosts 文件
Ansible Inventory內(nèi)置參數(shù)
在進行配置之前择份,我們先了解下 Inventory都有哪些內(nèi)置的參數(shù)
參數(shù) | 參數(shù)說明 |
---|---|
ansible_ssh_host | ssh 連接的主機IP |
ansible_ssh_user | ssh 連接的主機user |
ansible_ssh_port | ssh 連接的主機端口,默認(rèn)是22 |
ansible_ssh_pass | ssh 連接的主機用戶密碼;建議采用--ask-pass 或者SSH秘鑰登錄 |
ansible_ssh_sudo | sudo 用戶 |
ansible_sudo_pass | sudo 用戶對應(yīng)的密碼屁柏; 建議采用 --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 | 目標(biāo)系統(tǒng)的shell類型番挺,默認(rèn)是'sh',也可以配置'csh' 后者 'fish' 等 |
ansible_python_interpreter | 目標(biāo)主機的 python 路徑屯掖,如果目標(biāo)主機有多個Python玄柏,則非常有用 |
Inventory 常規(guī)配置
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
結(jié)合Inventory內(nèi)置參數(shù)和上面的配置Demo,來逐步說明解析
- 可以單獨配置一些主機贴铜,比如第一行記錄粪摘,同時執(zhí)行了端口和用戶,IP地址
- 可以把某些具有共性的主機放到一個分組中绍坝,比如上面的兩個數(shù)據(jù)庫和三個web主機徘意;主機名放到
[]
中,另外建議主機名采用下劃線分割轩褐,不然會有warnning - 可以給配置的主機 配置
別名
比如上面的 db-master 和 db-slave 映砖,其實這個別名可以配置成對應(yīng)的主機名
,這里可以思考下灾挨,配置成主機名有什么優(yōu)勢邑退? - 在配置一些主機的時候,如果主機出現(xiàn)的有規(guī)律劳澄,可以類似第8行配置進行簡寫
- 分組可以嵌套地技,比如 website 分組包含了dbgroup 和 web_group
- 另外可以定義分組的變量,如 14 和 15行配置
- 第8行最后的 http_port 是定義的主機變量
這里不管是主機變量還是分組變量都是為了在后續(xù)的 playbook 中使用秒拔,當(dāng)然這種把變量配置到 Inventory配置文件中的做法不是最優(yōu)解莫矗,官方給出的建議是單獨配置
擴展:分文件定義 Host 和 Group 變量
注意:inventory文件格式是
ini
;但是這里分文件之后的Host或者Group變量存放文件的格式是yaml
-
/etc/ansible/host_vars/xxx
存放主機變量砂缩,該文件夾下每個文件都是一個主機名稱作谚,內(nèi)容存放需要的主機變量 -
/etc/ansible/group_vars/yyy
存放分組變量,該文件夾下每個文件都是一個分組名稱庵芭,內(nèi)容存放需要的分組變量
在實際使用中我們可以如下操作
# 直接 使用對應(yīng)的主機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
后面接模塊需要的參數(shù)
Inventory 優(yōu)化配置
比如,常規(guī)ansible操作是通過普通賬號操作双吆,有時候需要sudo權(quán)限眨唬,上面 Inventory中沒有配置sudo相關(guān),是因為我們在 主配置文件/etc/ansible/ansible.cfg
中進行了相關(guān)配置
[privilege_escalation]
become=True
become_method=sudo
become_user=root
另外剛才提到 Inventory 中可以給每個主機配置一個別名好乐,建議是配置成對應(yīng)的主機名匾竿,好處就是:在運維操作中,一般會把 主機名和其對應(yīng)的IP地址解析添加到 /etc/hosts 文件中去蔚万,這樣的話我們只在inventory中配置主機名即可
如果這個時候默認(rèn)端口是22岭妖,同時操作的用戶就是ansible管理節(jié)點當(dāng)前登錄的用戶,那么 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
的管理可以通過后續(xù)介紹的playbook管理同步,結(jié)合cmdb就可以實現(xiàn)內(nèi)部域名(可以是內(nèi)部定義的有意義的域名或者主機名)解析
這個有個前提就是ansible管理是通過公私鑰對來進行ssh免密登錄連接昵慌,這里引申出幾個運維規(guī)范:
1苔巨、Linux主機禁止root登錄
2、Linux主機禁止密碼登錄
3废离、Linux用戶通過公私鑰對登錄
4侄泽、Linux主機最小化SA賬號開通sudo權(quán)限
多Inventory配置
一般都會存在多個環(huán)境,為了有效管理蜻韭,就可以為不同的環(huán)境配置不同的inventory配置悼尾。
配置說明
# 主配置文件中通過 inventory 參數(shù)指定一個默認(rèn)
inventory = /etc/ansible/inventory/prod.hosts
# 在 inventory目錄下分別存放各環(huán)境的 inventory文件
| - /etc/ansible/inventory/
| - - /etc/ansible/inventory/prod.hosts
| - - /etc/ansible/inventory/gamma.hosts
| - - /etc/ansible/inventory/test.hosts
| - - /etc/ansible/inventory/dev.hosts
默認(rèn)是管理生產(chǎn)環(huán)境主機,如果需要管理其他環(huán)境主機肖方,只需要通過 -i
參數(shù)指定不同的 inventory 文件即可
ansible -i /etc/ansible/inventory/dev.hosts xxx-host -m shell -a 'df -h'
還有一種做法就是 inventory 參數(shù)配置成目錄
闺魏,比如
inventory = /etc/ansible/inventory/
這樣就不存在通過 -i
參數(shù)指定不同的inventory的問題,ansible 會從該目錄下所有文件中去查詢需要操作的主機或者分組俯画。如果文件太多遍歷存在一定的性能消耗析桥,而且一定要清楚操作的目標(biāo)節(jié)點。這就需要清晰的環(huán)境主機名規(guī)劃才可以艰垂,
兩種方式各有優(yōu)缺點泡仗,大家自行選擇即可
動態(tài) Inventory
目的是為了解決超大量主機管理時,維護 inventory 文件成本的問題猜憎。ansible通過支持動態(tài)Inventory娩怎,其文件里的主機列表和變量信息都可以從外部拉取
所以需要一個腳本,配置如下
inventory = /etc/ansible/inventory.py
不過 ansible 對這個腳本是有要求的
- --list 或者 -L 顯示所有主機和主機組的信息胰柑,JSON格式截亦。
- --host 或者 -H 返回某臺主機的信息,JSON格式柬讨。
一般靜態(tài)配置文件方式即可滿足大家1K以內(nèi)主機管理崩瓤,如果更多就結(jié)合運維的CMDB來實現(xiàn)動態(tài),這里先不擴展介紹踩官,在最后的擴展章節(jié)却桶,結(jié)合運維平臺CMDB實現(xiàn)動態(tài)inventory
真實案例