一、環(huán)境
系統(tǒng):centos7
主機(jī) :4臺 一個(gè)控制節(jié)點(diǎn) 3個(gè)被控制節(jié)點(diǎn)
解析:本地互相解析
192.168.2.37 master
192.168.2.168 node1
192.168.2.145 node2
192.168.2.178 node3
配置ssh公鑰認(rèn)證:
控制節(jié)點(diǎn)需要發(fā)送ssh公鑰給所有非被控制節(jié)點(diǎn)
我將主機(jī)192.168.2.37作為配置管理主機(jī),所以我們需要在192.168.2.37上安裝ansible,剩下的主機(jī)作為受管主機(jī)。
二施掏、配置yum源
[root@manager ~]# yum install epel-release -y
安裝ansible
[root@manager ~]# yum install ansible -y
[root@manager ~]# ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
三、ansible程序結(jié)構(gòu)
安裝目錄
通過使用rpm -ql ansible指令可以查看ansible安裝的所有文件位置!
配置文件目錄:/etc/ansible/
執(zhí)行文件目錄:/usr/bin/
Lib庫依賴目錄:/usr/lib/PythonX.X/site-packages/ansible/
Help文檔目錄:/usr/share/doc/ansible-X.X.X/
Man文檔目錄:/usr/share/man/man1/
ansible配置文件的查找順序
(1)倍奢、檢查環(huán)境變量ANSIBLE_CONFIG指向的路徑文件(export ANSIBLE_CONFIG=/etc/ansible.cfg )
(2)、~/.ansible.cfg垒棋,檢查當(dāng)前目錄(/etc/ansible)下的ansible.cfg配置文件
(3)卒煞、/etc/ansible.cfg 檢查etc目錄的配置文件
四、ansible配置文件
設(shè)置/etc/ansible/ansible.cfg配置參數(shù)叼架,ansible有許多參數(shù)畔裕,下面列出常用的參數(shù):
inventory:#這個(gè)參數(shù)表示資源清單inventory文件的位置,資源清單就是一些ansible需要連接管理的主 機(jī)列表乖订。這個(gè)參數(shù)的配置實(shí)例如下:
inventory = /etc/ansible/hosts
library: ansible的操作動作扮饶,無論是本地或遠(yuǎn)程,都使用一小段代碼來執(zhí)行乍构,這小段代碼稱為模塊甜无,這個(gè)library參數(shù)就是指向存放ansible模塊的目錄。配置實(shí)例如下:
library = /usr/share/ansible
ansible支持多個(gè)目錄方式哥遮,只要用冒號“ : ”隔開就可以岂丘,同時(shí)也會檢查當(dāng)前執(zhí)行playbook位置下的./library目錄。
forks:設(shè)置默認(rèn)情況下ansible最多能有多少個(gè)進(jìn)程同時(shí)工作昔善, 從ansible 1.3開始,fork數(shù)量默認(rèn)自動設(shè)置為主機(jī)數(shù)量或者潛在的主機(jī)數(shù)量,默認(rèn)設(shè)置最多5個(gè)進(jìn)程并行處理元潘。具體需要設(shè)置多少個(gè),可以根據(jù)控制主機(jī)的性能和被管節(jié)點(diǎn)的數(shù)量來確定君仆,可能是 50或100翩概。默認(rèn)值5是非常保守的值牲距,配置實(shí)例如下:
forks = 5
sudo_user:這是設(shè)置默認(rèn)執(zhí)行命令的用戶,也可以在playbook中重新設(shè)置這個(gè)參數(shù)钥庇。配置實(shí)例如下:
sudo_user = root
remote_port:這是指定連接被管節(jié)點(diǎn)的管理端口牍鞠,默認(rèn)是22。除非設(shè)置了特殊的SSH端口评姨,不然這個(gè)參數(shù)一般是不需要修改的难述。
配置實(shí)例如下:
remote_port = 22
host_key_checking:這是設(shè)置是否檢查SSH主機(jī)的密鑰⊥戮洌可以設(shè)置為True或False胁后,關(guān)閉后第一次連接沒有提示配置實(shí)例
host_key_checking = False
timeout:這是設(shè)置SSH連接的超時(shí)間隔,單位是秒嗦枢。配置實(shí)例如下:
timeout = 60
log_path:ansible系統(tǒng)默認(rèn)是不記錄日志的攀芯,如果想把a(bǔ)nsible系統(tǒng)的輸出記錄到日志文件中,需要設(shè)置log_path來指定一個(gè)存儲ansible日志的文件文虏。配置實(shí)例如下:
log_path = /var/log/ansible.log
另外需要注意侣诺,執(zhí)行ansible的用戶需要有寫入日志的權(quán)限,模塊將會調(diào)用被管節(jié)點(diǎn)的syslog來記錄氧秘。
五年鸳、ansible主機(jī)清單
在配置文件中,我們提到了資源清單丸相,這個(gè)清單就是我們的主機(jī)清單搔确,里面保存的是一些 ansible 需要連接管理
的主機(jī)列表。我們可以來看看他的定義方式:
ansible主機(jī)清單設(shè)置
編輯/etc/ansible/hosts:
[root@manager ~]# vim /etc/ansible/hosts #定義方式:
1灭忠、直接指明主機(jī)地址或主機(jī)名
192.168.2.168
192.168.2.145
192.168.2.178
2妥箕、定義一個(gè)主機(jī)組[組名]把地址或主機(jī)名加進(jìn)去
[webservers]
192.168.2.168
192.168.2.145
組成員可以使用通配符來匹配,如下 192.168.2.145.[1:6] #表示匹配從192.168.2.1------192.168.2.6的主機(jī)
需要注意的是更舞,這里的組成員可以使用通配符來匹配,這樣對于一些標(biāo)準(zhǔn)化的管理來說就很輕松方便了坎吻。
我們可以根據(jù)實(shí)際情況來配置我們的主機(jī)列表缆蝉,具體操作如下:
[root@manager ~]# vim /etc/ansible/hosts
[web]
192.168.2.168
192.168.2.145
六、ansible配置公私鑰
配置ansible使用公鑰驗(yàn)證
配置這個(gè)的原因是為了方便ansible可以實(shí)現(xiàn)無秘訪問控制其他機(jī)器瘦真,是實(shí)現(xiàn)自動化的前提刊头。這一步可以再配置好ansible.cfg文件以及hosts主機(jī)清單后執(zhí)行。
雖然ansible支持其他主機(jī)認(rèn)證方式诸尽,但是我們最常用的的還是基于秘鑰的認(rèn)證:
1原杂、首先生成秘鑰
執(zhí)行下條指令后一路回車即可!
[root@manager ~]# ssh-keygen -t rsa
2您机、然后向主機(jī)分發(fā)秘鑰:
所有添加到主機(jī)清單中的IP地址或者主機(jī)名穿肄,全部都要用下條指令執(zhí)行一遍年局。
[root@manager ~]# ssh-copy-id root@IP地址
3、如果出現(xiàn)以下情況:
-bash: ssh-copy-id: command not found
請嘗試:
[root@manager ~]# yum -y install openssh-clientsansible
七咸产、測試
語法:
ansible <pattern> -m <module_name> -a <arguments>
pattern--主機(jī)清單里定義的主機(jī)組名,主機(jī)名,IP,別名等,all表示所有的主機(jī),支持通配符,正則
: --多個(gè)組,組名之間用冒號隔開
web --組名或主機(jī)名中含web的
webservers[0] - webservers組中的第一臺主機(jī)
以~開頭,匹配正則
-m module_name: 模塊名稱,默認(rèn)為command
-a arguments: 傳遞給模塊的參數(shù)
使用ping模塊檢查ansible節(jié)點(diǎn)的連通性:
[root@manager ~]# ansible 192.168.2.168 -m ping
192.168.2.168 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@manager ~]# ansible 192.168.2.168 -m ping -o
192.168.2.168 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
這樣就說明我們的主機(jī)是連通狀態(tài)的矢否。接下來的操作才可以正常進(jìn)行。