1、什么是ansible?
ansible是新出現(xiàn)的自動(dòng)化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。
2、如何安裝ansible?
ansible的安裝來源于epel倉庫,因此在安裝前需確保安裝了正確的epel源:yum install -y epel-release安裝ansible命令:yum install ansible -y查看ansible是否安裝:rpm -qa |grep ansible ,whereis ansible查看ansible安裝信息:ansible --version
3、ansible的特點(diǎn)?
ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運(yùn)行的模塊,ansible只是提供一種框架。主要包括:
(1) 連接插件connection plugins:負(fù)責(zé)和被監(jiān)控端實(shí)現(xiàn)通信
(2) host inventory:指定操作的主機(jī),是一個(gè)配置文件里面定義監(jiān)控的主機(jī)
(3) 各種模塊核心模塊、command模塊、自定義模塊
(4) 借助于插件完成記錄日志郵件等功能
(5) playbook:劇本執(zhí)行多個(gè)任務(wù)時(shí),非必需可以讓節(jié)點(diǎn)一次性運(yùn)行多個(gè)任務(wù)
4、ansible相關(guān)概念
1、Play:將一系列主機(jī)與需要在主機(jī)上運(yùn)行的任務(wù)列表相關(guān)聯(lián)
2、Playbook:一個(gè)ansible腳本,它指定一系列play與一批play執(zhí)行的對(duì)象主機(jī)
3、Task:Ansible play中的工作單元,一個(gè)task指定一個(gè)模塊和相關(guān)參數(shù),以及一個(gè)可選名字與一些可選的參數(shù)
4、TLS(Transport Layer Security):用于Web服務(wù)器與瀏覽器之間相關(guān)的安全通信協(xié)議
5、Transport :Ansible用于連接到遠(yuǎn)程主機(jī)的協(xié)議與實(shí)現(xiàn),默認(rèn)的transport是SSH
6、Convergence(收斂性):配置管理系統(tǒng)的一種屬性,具有這種屬性的系統(tǒng)將會(huì)對(duì)一臺(tái)服務(wù)器執(zhí)行多次讓服務(wù)器接近期望的狀態(tài)(Ansible執(zhí)行一次后就會(huì)將服務(wù)器置為期望狀態(tài),所以不具備收斂性)
5、ansible的主機(jī)清單配置?
ansible 通過讀取默認(rèn)的主機(jī)清單配置/etc/ansible/hosts,可以同時(shí)連接到多個(gè)遠(yuǎn)程主機(jī)上執(zhí)行任務(wù)。
管理節(jié)點(diǎn)(即安裝ansible的節(jié)點(diǎn))上添加目標(biāo)節(jié)點(diǎn)(即需要管理的節(jié)點(diǎn))的ssh認(rèn)證信息。管理節(jié)點(diǎn)生成SSH-KEY:ssh-keygen添加目標(biāo)節(jié)點(diǎn)的SSH認(rèn)證信息:ssh-copy-id root@目標(biāo)節(jié)點(diǎn)IP添加認(rèn)證信息后,目標(biāo)節(jié)點(diǎn)主機(jī)的~/.ssh/目錄下將會(huì)出現(xiàn)一個(gè)authorized_keys文件,里面包含了ansible管理節(jié)點(diǎn)的公鑰信息,可以檢查一下是否存在。測(cè)試ping探測(cè)test1客戶主機(jī)是否存活:ansible -m ping test1
6、ansible的常用模塊?
1 、file模塊
用于設(shè)定或修改文件的屬性信息
group:默認(rèn)為空
owner:默認(rèn)為空
path:默認(rèn)為空,別名:'dest', `name'
recurse:yes, no 默認(rèn)為no
src:創(chuàng)建連接文件時(shí)有用
state:file, link, directory, hard, touch, absent
file 默認(rèn)屬性,如果文件不存在則不創(chuàng)建,并且報(bào)錯(cuò),用于修改已存在文件的屬性
directory 如果目錄不存在,則創(chuàng)建目錄和子目錄
absent 遞歸刪除文件或目錄
link 在創(chuàng)建軟鏈接是有用
hard 創(chuàng)建硬鏈接
示例
---
- name: file
hosts: local
tasks:
- name: file
file:
src: '/tmp/{{ item.src }}'
dest: '{{ item.dest }}'
state: link
with_items:
- { src: 'x', dest: 'y' }
- { src: 'z', dest: 'k' }
2 、synchronize 模塊
archive:是否采用地規(guī)模上同步
compress:開啟壓縮默認(rèn)為開啟
copy_links:同步是否復(fù)制連接
delete:刪除源中沒有而目標(biāo)文件存在文件
dest= 目標(biāo)地址
dirs 以非遞歸的方式傳輸目錄
mode:push或pull,默認(rèn)為push
recursive 是否遞歸
rsync_opts 使用rsync的參數(shù)
rsync-path=PATH # 指定遠(yuǎn)程服務(wù)器上的rsync命令所在路徑信息
rsync_timeout # 指定 rsync 操作的 IP 超時(shí)時(shí)間,和rsync命令的 --timeout 參數(shù)效果一樣.
set_remote_user # put user@ for the remote paths. If you have a custom ssh config to define the remote user for
src= # 源,同步的數(shù)據(jù)源
times #
--exclude=.Git 忽略同步.git結(jié)尾的文件
注:同步businessdata目錄下單獨(dú)某個(gè)文件到對(duì)應(yīng)目錄,delete: yes 先清空再同步
---
- name: synchronize test1/sit files to develop
hosts: develop
tasks:
- name: synchronize
synchronize:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
delete: yes
with_items:
- { src: '/tmp1/', dest: '/tmp1/' }
- { src: '/tmp2/', dest: '/tmp2/' }
3 、template模塊
文檔內(nèi)變量的替換的模塊
ansible develop –m template –a ‘src=/mytemplates/foo.j2 dest=/etc/file.conf mode="u=rw,g=r,o=r"’
解釋:將src上foo.j2的變量模版復(fù)制到dest上。Template適合用playbook編寫 ,通過變量然后拷貝到遠(yuǎn)程主機(jī)。#1.2、jetty-core中的start.sh
ansible ${ENV} -m template -e "codeName=${codeName} startAddressPort=${startAddressPort}" -a "src=/etc/ansible/newProject/start.sh dest=/App/tc-${codeName}/jetty/${codeName}-core/bin/"
#2.1、Tomcat-oms:tc-xxx.sh
ansible ${ENV} -m template -e "codeName=${codeName} tcCodeNameAddressPort=${tcCodeNameAddressPort}" -a "src=/etc/ansible/newProject/tc-${codeName}.sh dest=/app/tc-${codeName}/tomcat/"
7、ansible學(xué)習(xí)資源?
1、小白學(xué)Ansible之基本介紹:https://zhuanlan.zhihu.com/p/91231901?utm_source=wechat_session&utm_medium=social&utm_oi=724990794020167680
2、AnsibleBook01:https://www.kancloud.cn/hiyang/ansiblebook/305223
3、AnsibleBook02:https://www.kancloud.cn/louis1986/ansible/544331