作者:黃勝
Ansible批量自動(dòng)化管理
1.ansible的介紹
Ansible是一個(gè)用來(lái)遠(yuǎn)程管理服務(wù)器的工具軟件。
Ansible是一個(gè)用來(lái)批量部署遠(yuǎn)程主機(jī)上服務(wù)的工具。這里“遠(yuǎn)程主機(jī)(Remote Host)”是指任
何可以通過(guò)SSH登錄的主機(jī),所以它既可以是遠(yuǎn)程虛擬機(jī)或物理機(jī),也可以是本地主機(jī)。
Ansible通過(guò)SSH協(xié)議實(shí)現(xiàn)管理節(jié)點(diǎn)與遠(yuǎn)程節(jié)點(diǎn)之間的通信。理論上來(lái)說(shuō)榕茧,只要能通過(guò)SSH登錄到
遠(yuǎn)程主機(jī)來(lái)完成的操作,都可以通過(guò)Ansible實(shí)現(xiàn)批量自動(dòng)化操作客给。
涉及管理操作:復(fù)制文件用押、安裝服務(wù)、服務(wù)啟動(dòng)停止管理靶剑、配置管等等蜻拨。
2.Ansible特點(diǎn)
Ansible基于Python語(yǔ)言實(shí)現(xiàn),由Paramiko和PyYAML兩個(gè)關(guān)鍵模塊構(gòu)建桩引。
Shell缎讼、Python是Linux運(yùn)維學(xué)員必會(huì)的兩門語(yǔ)言。
1)安裝部署過(guò)程特別簡(jiǎn)單坑匠,學(xué)習(xí)曲線很平坦血崭。
2)不需要單獨(dú)安裝客戶端,只是利用現(xiàn)有的SSHD服務(wù)(協(xié)議)即可厘灼。
3)不需要服務(wù)端(no servers)夹纫。
4)ansible playbook,采用yaml配置设凹,提前編排自動(dòng)化任務(wù)舰讹。
5)ansible功能模塊較多,對(duì)于自動(dòng)化的場(chǎng)景支持豐富闪朱。
3.Ansible架構(gòu)介紹(見圖說(shuō)明)
1月匣、連接插件connectior plugins用于連接主機(jī) 用來(lái)連接被管理端
2、核心模塊 core modules 連接主機(jī)實(shí)現(xiàn)操作奋姿, 它依賴于具體的模塊來(lái)做具體的事情
3锄开、自定義模塊 custom modules,根據(jù)自己的需求編寫具體的模塊
4胀蛮、插件 plugins院刁,完成模塊功能的補(bǔ)充
5糯钙、劇本 playbooks粪狼,ansible的配置文件,將多個(gè)任務(wù)定義在劇本中退腥,由ansible自動(dòng)執(zhí)行
6、主機(jī)清單 inventor再榄,定義ansible需要操作主機(jī)的范圍
最重要的一點(diǎn)是 ansible是模塊化的 它所有的操作都依賴于模塊
4.Ansible的實(shí)踐
1.主機(jī)列表配置
cat >/etc/ansible/hosts<<EOF
[oldboy]
172.16.1.31
172.16.1.41
[oldgirl]
172.16.1.31
172.16.1.41
172.16.1.51
EOF
cat /etc/ansible/hosts
/etc/ansible/ansible.cfg #ansible的配置文件
2.Ansible 的配置文件連接認(rèn)證優(yōu)化
修改 /etc/ansible/ansible.cfg中的71行
70 # uncomment this to disable SSH key host checking
71 #host_key_checking = False
71行的注釋取消:host_key_checking = False
3.批量非交互式分創(chuàng)建并發(fā)秘鑰文件
創(chuàng)建秘鑰:ssh-keygen -f ~/.ssh/id_rsa -P '' -q
分發(fā)秘鑰腳本:
for ip in 7
? ? ? ? ? ? ? ? ? ? ?do
? sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip
done
4.Ansible命令參數(shù)和模塊的使用
4.1Ansible命令參數(shù)
-m MODULE_NAME, 模塊名字狡刘,默認(rèn)command
-a MODULE_ARGS, 模塊參數(shù)
-f FORKS ? ? 并發(fā)進(jìn)程數(shù),默認(rèn)5個(gè)困鸥。
-i INVENTORY(default=/etc/ansible/hosts)指定主機(jī)列表文件
4.2Ansible模塊使用
(1)command模塊(相當(dāng)于在遠(yuǎn)端命令行執(zhí)行命令)
例:ansible oldboy -m command -a "free -m" ——查看內(nèi)存信息
特點(diǎn):不能支持特殊字符嗅蔬,比如正則表達(dá)式,可選用shell模塊替代疾就。