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


背景

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

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

  看了非常多的對比資料最后依據項目的實際情況選擇了Ansible。

  (對比部分參考資料見:

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

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

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

  )

Ansible

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

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

  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變量;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM