Ansible 運維自動化 ( 配置管理工具 )

背景

  出差背景,要搞項目的自動化部署。由於只直接對接生產分發,機器又很是多,這樣以往使用的bat只能做爲應急方案了,仍是得考慮使用專業化的工具來作這個事情!python

  當下有許多的運維自動化工具( 配置管理 ),例如:Puppet、Chef、Ansible、SaltStack、Puppet、Fabric 等。web

  看了很是多的對比資料最後依據項目的實際狀況選擇了Ansible。shell

  (對比部分參考資料見:ruby

    http://www.ccw.com.cn/article/view/57348  架構

    https://www.zhihu.com/question/21053472運維

    http://blog.csdn.net/puncha/article/details/8741511ssh

  )工具

Ansible

  Ansible 一種集成 IT 系統的配置管理、應用部署、執行特定任務的開源平臺,是 AnsibleWorks 公司名下的項目,該公司由 Cobbler 及 Func 的做者於 2012 年建立成立。大數據

  Ansible 基於 Python 語言實現,由 Paramiko 和 PyYAML 兩個關鍵模塊構建。ui

  Ansible 特色:

  >> 部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做。
  >> 默認使用 SSH(Secure Shell)協議對設備進行管理。
  >> 主從集中化管理。
  >> 配置簡單、功能強大、擴展性強。
  >> 支持 API 及自定義模塊,可經過 Python 輕鬆擴展。
  >> 經過 Playbooks 來定製強大的配置、狀態管理。
  >> 對雲計算平臺、大數據都有很好的支持。
  >> 提供一個功能強大、操做性強的 Web 管理界面和 REST API 接口 ---- AWX 平臺。

Ansible優勢

(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;

(2)、批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行;

(3)、使用python編寫,維護更簡單,ruby語法過於複雜;

(4)、支持sudo。

注意:默認是以root用戶執行,可是基於ssh鏈接操做要屢次輸入密碼,爲方即可以使用基於ssh密鑰方式進行認證

 

ansible架構

ansible core:ansible自身核心模塊
host inventory:主機庫,定義可管控的主機列表
connection plugins:鏈接插件,通常默認基於ssh協議鏈接
modules:core modules(自帶模塊)、custom modules(自定義模塊)
playbooks:劇本,按照所設定編排的順序執行完成安排任務

 

配置文件:

(1)ansible應用程序的主配置文件:/etc/ansible/ansible.cfg
(2) Host Inventory定義管控主機:/etc/ansible/hosts

 

ansible應用程序命令

1.ansible-doc命令:獲取模塊列表,及模塊使用格式;

ansible-doc -l:獲取列表
ansible-doc -s module_name:獲取指定模塊的使用信息

2.ansible命令格式

ansible <host-pattern> [-f forks] [-m module_name] [-a args]
<host-pattern>

  

<host-pattern>

指明管控主機,以模式形式表示或者直接給定IP,必須事先定義在文件中;all設置全部

 [-f forks]

指明每批管控多少主機,默認爲5個主機一批次

[-m module_name]

使用何種模塊管理操做,全部的操做都須要經過模塊來指定

[-a args]

指明模塊專用參數;args通常爲key=value格式

注意:command模塊的參數非爲kv格式,而是直接給出要執行的命令便可;

注意:command模塊的參數非爲kv格式,而是直接給出要執行的命令便可;

注意:<host-pattern>默認讀取/etc/ansible/hosts,也能夠指明自定義文件路徑

-iPATH, --inventory=PATH:指明使用的host inventory文件路徑;

經常使用模塊(module_name):

1)command:默認模塊,可省略。在遠程主機上進行操做命令

-a 'COMMAND'

注意:comand模塊的參數非key=value格式,直接給出要執行的命令

[root@localhost ~]# ansible all -m command -a 'ifconfig'

2)user:
-a 'name= state={present(建立)|absent(刪除)} force=(是否強制操做刪除家目錄) system= uid= shell= home='
[root@localhost ~]# ansible all -m user -a 'name=ansible state=present'

3)group:
-a 'name= state={present|absent} gid= system=(系統組)'
[root@localhost ~]# ansible all -m group -a 'name=mygroup state=presentsystem=true'

4)cron:
-a 'name= state= minute= hour= day= month= weekday= job='
[root@localhost ~]# ansible all -m cron -a 'name='Time' state=presentminute='*/5' job='/usr/sbin/ntpdate 172.168.0.1 &> /dev/null''

5)ping:

無參數

[root@localhost ~]# ansible all -m ping

6)file:文件管理
-a 'path= mode= owner= group= state={file|directory|link|hard|touch|absent} src=(link,連接至何處)'
[root@localhost ~]# ansible all -m file -a 'path=/tmp/testdirstate=directory'
[root@localhost ~]# ansible all -m file -a 'path=/tmp/test.txt state=touchmod=600 owner=user1'

7)copy:

-a 'dest=(遠程主機上路徑) src=(本地主機路徑) content=(直接指明內容) owner= group= mode='
[root@localhosttmp]# ansible web -m copy -a 'src=/etc/yum.repos.d/aliyun.repodest=/etc/yum.repos.d/'

8)template

-a 'dest= src=\'#\'" content= owner= group= mode='

9)yum:

-a 'name= conf_file=(指明配置文件) state={present|latest|absent} enablerepo= disablerepo=' 
[root@localhost ~]# ansible all -m yum 'name=httpd state=present' 

10)service:

-a 'name= state={started|stopped|restarted} enabled=(是否開機自動啓動) runlevel='
[root@localhost ~]# ansible all -m service -a 'name=httpd state=started'

11)shell:

-a 'COMMAND' 運行shell命令
[root@localhost ~]# ansible all -m shell -a echo "123456789" |passwd --stdin user1'

12)script:

-a '/PATH/TO/SCRIPT'運行腳本
[root@localhost ~]# ansible all -m script -a '/tmp/a.sh'

13)setup:獲取指定主機的facts變量;

相關文章
相關標籤/搜索