自動化運維工具之ansible

一、什麼樣的情形需要批量部署

1、操作系統的安裝

常見的有collber,red hat satelite(redhat)系統專用。

2、操作系統的配置

常見的有cfengine,puppet,chef,func。其中puppet最受歡迎

3、批量程序的部署

4、批量命令的運行查看狀態信息

二、ansible介紹

ansible的架構大致如下

wKiom1cNHvbQi9C5AABpqTFIsoM324.pngansible是新出現的運維工具是基於Python研發的糅合了衆多老牌運維工具的優點實現了批量操作系統配置、批量程序的部署、批量運行命令等功能。

運維工具常見的工作模式  

1、agent模式: 基於ssl實現。代理工作在被監控端。像puppet。  

2、agentless模式: 基於ssh服務實現工作在被監控端。監控端是ssh的客戶端。 


ansible是工作在agentless模式下具有冪等性。ansible在控制端只需要告訴監控端的期望狀態就可以實現批量部署。名詞解釋  

冪等性不會重複執行相同的指令。例如不會重複安裝軟件  

期望狀態只需要告訴被監控端的期望狀態 

ansible是基於模塊工作的ansible本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊ansible只是提供一種框架。架構包括

  • 連接插件connection plugins負責和被監控端實現通信。

  • Host Inventory:指定操作的主機,是一個配置文件裏面定義監控的主機

  • 各種模塊核心模塊command模塊自定義模塊

  • 藉助於插件完成記錄日誌郵件等功能

  • PlayBooks:劇本執行多個任務時。並非必需可以讓節點一次性運行多個任務

三、ansible的基本使用

安裝軟件yum install ansible -y # 對應的軟件在 epel 倉庫中也可自己手動編譯

wKioL1cNIFKAVw01AAA1PhcMadI893.png

查看模塊

ansible-doc -l

ansible-doc -s 模塊名

 

ansible <Host-partten> [-f forks][-m module_name][-a args]

                          -f forks: 啓動時併線程

                                     -m module_name 要使用的模塊

                                                       -a args:模塊參 常見模塊:command:默認模塊,用來執行遠程命令

# ansible all -m command -a 'cat /etc/passwd

# ansible all -a 'date'

# ansible 192.168.2.35 -m command -a 'yum remove mysql -y'

 

查看模塊參數

# ansible-doc -s 模塊名

 

cron:計劃模塊

ansible 192.168.2.35 -m cron -a 'minute="*/10" job="/bin/echo fcuk you" name="test cron job"'

           present:安裝

                       absent:移出


user模塊,用來添加刪除用戶

# ansible all -m user -a 'name=test1'

# ansible all -m user -a 'name=test1 state=absent'  移除user

 

group 組模塊,添加刪除組

# ansible all -m group -a 'name=mysql gid=306 system=yes'

 

copy 模塊,拷貝文件

   sec:本地源文件路徑

   dest:遠程存取路徑

   content:取代src=,直接用來生成目標文件內容。

# ansible all -m copy -a 'src=/etc/fstab dest=/tmp/'

# ansible all -m copy -a 'content="Hello\nHi test.com" dest=/tmp/test.txt'

 

file 模塊,主要用來改權限,做連接,

 範例:把文件fstab 屬主改成mysql 組改爲mysql 權限是600

ansible 192.168.2.35 -m file -a 'owner=mysql mode=600 group=mysql path=/tmp/fstab'


fstab創建一個連接fstab.link

src=:源文件

path=:產成符號連接的路徑

# ansible 192.168.2.35 -m file -a 'path=/tmp/fstab.link src=/tmp/fstab state=link'

 

ping模塊遠程主機在線否

# ansible all -m ping


service模塊指定運行的程序:

enabled=:是否開機自啓動,取值爲ture或者false;

name=:服務器名

state=狀態,取值有started,stoped,restarted

# ansible-doc -m service

# ansible all -a 'service httpd status'

# ansible all -a 'chkconfig --list httpd'

 wKioL1cN0xGSwDhzAACX7lVsX9I204.png

# ansible-doc -s shell

shell 模塊:在遠程主機上運行模塊,尤其用到管道有等功能時

 範例:創建user1用戶並添加密碼

# ansible web1 -m user -a 'user=user1'

# ansible web1 -m shell -a 'echo 123456 | passwd --stdin user1'

 

 script模塊

# ansible-doc -s script

將本地腳本複製到遠程並運行

# ansible web1 -m script -a '/root/test.sh'

 

yum模塊:

# ansible-doc -s yum

     name=:指明安裝的軟件名,可以帶上版本號

     state=absent:卸載

# ansible all  -m yum -a name=mysql-server

# ansible all  -m yum -a ‘name=mysql-server state=absent’

 

setup:收集遠程的facts

       facts:每個被管理主機在被管理前,會把自己主機相關信息報告給ansible主機



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章