1、Ansible簡介html
ansible是新出現的開源的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。python
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:shell
(1)、connection plugins:鏈接插件,Ansible和Host通訊使用,負責和被監控端實現通訊;編程
(2)、host inventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載;指定操做的主機,是一個配置文件裏面定義監控的主機;vim
(3)、各類模塊核心模塊、command模塊、自定義模塊;安全
Core Modules:Ansible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。併發
Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。框架
(4)、藉助於插件完成記錄日誌郵件等功能;運維
(5)、playbooks:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。ssh
(6)、Ansible:Ansible的核心程序
ansible的特色:
(一)批量管理工具
(二)模塊
(三)python
(四)無終端,是基於ssh實現管理的
(五)也支持主從模式
(六)也支持playbook
Ansible的優勢:
(1)Stupied Simple ,上手簡單,學習曲線平滑
(2)SSH by default ,安全,無需安裝客戶端
(3)配置簡單、功能強大、擴展性強
(4)支持API(應用程序接口)及自定義模塊,可經過Python輕鬆擴展
(5)經過Playbooks來定製強大的配置、狀態管理
(6)提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺(收費產品,通常不多用)
(7)冪等性:一種操做重複屢次結果相同
2、ansible的安裝
1、安裝
yum install epel-release #須要安裝epel源
yum install ansible -y
2、查看ansible的版本信息
ansible --version
3、查看ansible配置文件
[root@ren5 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
4、調用模塊(python)
paramiko #模擬ssh協議批量管理主機
jinja2 #模板語言,主要用來傳遞變量
yaml #至關因而一種編程語言
5、控制方式:
(1)免密鑰:key-gen
server: ssh-keygen
scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys
(2)用戶密碼:
參數形式:ansible_ssh_user=root; ansible_ssh_pass=root ansible_ssh_port=22
host inventory:記錄着客戶端的ip信息
[root@ren5 ~]# vim /etc/ansible/hosts
在文件最後添加:
[test_ren1]
192.168.11.4 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22
192.168.11.6 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22
注意:/root/.ssh/known_hosts需在此文件中有ssh鏈接的記錄纔可
或者取消/etc/ansible/ansible.cfg文件中#host_key_checking = False的註釋
若是用了密鑰登陸,則密碼登陸無效;也就是說這兩種方式沒法混合使用
6、調用ansible的三種模式:
hoc:命令行
playbooks:劇本|腳本
roles:角色
3、Ansible使用基本格式
1、使用格式
[root@ren5 ~]# ansible
Usage: ansible <host-pattern> [options]
2、參數:
-m:(--module-name=MODULE_NAME)指定模塊名稱
-a:(--args=MODULE_ARGS)指定模塊的具體參數
-s:以sudo的方式運行操做
-i:(--inventory=INVENTORY)指定被管理節點的主機列表
-f:(--forks=FORKS)一批鏈接幾個主機進行操做(默認是5個主機,最高255)控制併發數
線程是最小的調度單位,進程是最小的管理單元
ansible-doc -l #查看所支持的模塊
ansible-doc -s MODEL_NAME #模塊的具體用法和參數
ansible all --list-hosts #查看全部主機
4、ansible管理節點的三種方法
1、指定主機組名
[root@ren5 ~]# ansible test_ren1 -a "ip a" #默認調用command模塊
2、指定一個特定IP
[root@ren5 ~]# ansible 192.168.11.4 -a "ls"
3、使用all
[root@ren5 ~]# ansible all -a "date"
5、配置文件
ansible配置文件:(/etc/ansible/ansible.cfg)
14#inventory = /etc/ansible/hosts 主機管理資產清單
15#library = /usr/share/my_modules/ ansible操做的動做,不管是本地或者遠程,都使用一小段代碼來執行,這小段代碼稱之爲模塊,這個library就是用來存放這些模塊的路徑
16#module_utils = /usr/share/my_module_utils/
17#remote_tmp = ~/.ansible/tmp
18#local_tmp = ~/.ansible/tmp
20#forks = 5 ansible默認操做主機的併發數
21#poll_interval = 15
22#sudo_user = root 這是默認的執行命令的用戶,也能夠在playbook中從新設置這個參數
23#ask_sudo_pass = True 用來控制Ansible playbook 在執行sudo以前是否詢問sudo密碼.默認爲no
24#ask_pass = True Ansible 劇本playbook 是否會自動默認彈出彈出密碼.默認爲no
25#transport = smart
26#remote_port = 22 這個指定鏈接被管理節點的端口,默認是22,除非設置了特殊的ssh端口
27#module_lang = C 默認模塊和系統之間通訊的計算機語言,默認爲’C’語言
28#module_set_locale = False
61#host_key_checking = False 這是設置是否檢查ssh祕鑰,能夠設置爲False和True
103#timeout = 10 ssh鏈接超時時間
111#log_path = /var/log/ansible.log ansible默認是不記錄日誌的,若是想把ansible系統輸出的日誌存放到文件中能夠開啓這個選項
136#private_key_file = /path/to/file 使用ssh公鑰私鑰登陸系統的時候,使用的祕鑰路徑
.......
還有更多的配置項,你們能夠參考官方文檔,以下: http://docs.ansible.com/ansible/latest/intro_configuration.html#private-key-file
6、經常使用模塊
1、ping模塊:指定ansible server跟client的連通性,測試成功會返回「pong」
[root@ren5 ~]# ansible all -m ping
2、command模塊:命令模塊,默認模塊,用於在遠程執行命令(不支持正則和管道符)
[root@ren5 ~]# ansible test_ren1 -m command -a "date '+%F %T'"
3、cron模塊:管理定時任務
state:(prsent:安裝;absent:移除)
day、env、hour、job、minute、month、name、state、user、weekday
[root@ren5 ~]# ansible test_ren1 -m cron -a "minute=*/5 job='echo HELLO' state=present name=cron_test1"
[root@ren5 ~]# ansible test_ren1 -a "crontab -l"
[root@ren5 ~]# ansible test_ren1 -a "crontab -r"
4、user模塊:管理用戶帳戶
name=:指明建立的用戶的名字
remove=USERNAME(state=absent)
state=present #建立用戶 shell=:指定用戶shell類型
#ansible testhosts -m user -a 'name=user1 uid=250 group=group250'
5、group模塊:添加或者刪除用戶組
#ansible testhosts -m group -a 'name=group250 gid=250'
6、copy模塊:複製本地文件到遠程主機
src=:定義本地源文件路徑
dest=:定義遠程目標文件路徑
[root@ren5 ~]# ansible test_ren1 -m copy -a "src=/root/a.txt dest=/root/a.txt"
content=:取代src,表示直接用此處指定的信息生成爲目標的內容
#ansible all -m copy -a 'content=nihao dest=/root/a.txt'
7、service模塊:管理程序服務,指定運行狀態
[root@ren5 ~]# ansible all -m service -a "name=httpd state=restarted"
[root@ren5 ~]# ansible all -m shell -a "ss -tnl |grep 80"
enabled=:是否開機自動啓動,取值爲true或者false
name=:服務名稱
state=:狀態,取值有started,stopped,restarted
8、shell模塊:和command模塊相似,在遠程主機上運行命令,支持變量等符號,尤爲是在用到管道符等功能的複雜命令
[root@ren5 ~]# ansible all -m shell -a "ls /tmp |wc -l"
9、script模塊:將本地腳本複製到遠程主機並運行(無需加多餘參數,只須要在-a後面加上本地腳本路徑便可)
ansible testhosts -m script -a '/root/a.sh'
10、yum模塊:安裝程序包
[root@ren5 ~]# ansible all -m yum -a "name=httpd state=present"
[root@ren5 ~]# ansible all -m yum -a "list=httpd"
name=:指定要安裝的程序包,能夠帶上版本號
state=:present,latest,installed表示安裝,absent,removed表示卸載
list=:查看安裝的程序包
11、setup模塊:收集遠程主機的facts
每一個被管理的節點在接受並運行管理命令以前,會將本身主機相關信息,如操做系統版本,ip地址等報告給遠程ansible主機
[root@ren5 ~]# ansible all -m setup
12、file模塊:設置文件屬性
[root@ren5 ~]# ansible all -m file -a "state=touch path=/root/test.txt"