Ansible 詳解

 

原文:https://www.cnblogs.com/keerya/p/7987886.html#_label0,有改動html

1、Ansible簡介python

  一、ansible是什麼mysql

    a、ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。nginx

    b、ansible是基於 paramiko 開發的,而且基於模塊化工做,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。ansible不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中你們承認度最高的,而且上手容易,學習簡單。sql

  二、ansible特色shell

    a、部署簡單,只需在主控端部署Ansible環境,被控端無需作任何操做;
    b、默認使用SSH協議對設備進行管理;
    c、有大量常規運維操做模塊,可實現平常絕大部分操做;
    d、配置簡單、功能強大、擴展性強;
    e、支持API及自定義模塊,可經過Python輕鬆擴展;
    f、經過Playbooks來定製強大的配置、狀態管理;
    g、輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;
    h、提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺。數據庫

  三、ansible架構主要模塊vim

    a、Ansible:Ansible核心程序。
    b、HostInventory:記錄由Ansible管理的主機信息,包括端口、密碼、ip等。
    c、Playbooks:「劇本」YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能。
    d、CoreModules:核心模塊,主要操做是經過調用核心模塊來完成管理任務。
    e、CustomModules:自定義模塊,完成核心模塊沒法完成的功能,支持多種語言。
    f、ConnectionPlugins:鏈接插件,Ansible和Host通訊使用centos

  四、ansible任務執行模式緩存

    Ansible 系統由控制主機對被管節點的操做方式可分爲兩類,即adhocplaybook

      a、ad-hoc模式(點對點模式)

        使用單個模塊,支持批量執行單條命令。ad-hoc 命令是一種能夠快速輸入的命令,並且不須要保存起來的命令。就至關於bash中的一句話shell。

      b、playbook模式(劇本模式)

        是Ansible主要管理方式,也是Ansible功能強大的關鍵所在。playbook經過多個task集合完成一類功能,如Web服務的安裝部署、數據庫服務器的批量備份等。能夠簡單地把playbook理解爲經過組合多條ad-hoc操做的配置文件。      

  五、ansible命令執行過程  

    Ansible在運行時, 首先讀取ansible.cfg中的配置, 根據規則獲取Inventory中的管理主機列表, 並行的在這些主機中執行配置的任務, 最後等待執行返回的結果。

      a、加載本身的配置文件,默認/etc/ansible/ansible.cfg;
      b、查找對應的主機配置文件,找到要執行的主機或者組;
      c、加載本身對應的模塊文件,如 command;
      d、經過ansible將模塊或命令生成對應的臨時py文件(python腳本), 並將該文件傳輸至遠程服務器;
      e、對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
      f、給文件 +x 執行權限;
      g、執行並返回結果;
      h、刪除臨時py文件,sleep 0退出;

2、ansible配置詳解

  一、安裝

    a、添加yum源 vim /etc/yum.repos.d/ansible.repo 添加以下內容

      [epel]
      name = all source for ansible
      baseurl = https://mirrors.aliyun.com/epel/7/x86_64/
      enabled = 1
      gpgcheck = 0

      [ansible]
      name = all source for ansible
      baseurl = http://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/
      enabled = 1
      gpgcheck = 0

    b、安裝ansible    

      yum clean all
      yum install ansible -y

  二、ansible 的配置文件爲/etc/ansible/ansible.cfg,ansible 有許多參數,下面咱們列出一些常見的參數

    inventory = /etc/ansible/hosts      #這個參數表示資源清單inventory文件的位置
    library = /usr/share/ansible        #指向存放Ansible模塊的目錄,支持多個目錄方式,只要用冒號(:)隔開就能夠
    forks = 5       #併發鏈接數,默認爲5
    sudo_user = root        #設置默認執行命令的用戶
    remote_port = 22        #指定鏈接被管節點的管理端口,默認爲22端口,建議修改,可以更加安全
    host_key_checking = False       #設置是否檢查SSH主機的密鑰,值爲True/False。關閉後第一次鏈接不會提示配置實例
    timeout = 60        #設置SSH鏈接的超時時間,單位爲秒
    log_path = /var/log/ansible.log     #指定一個存儲ansible日誌的文件(默認不記錄日誌)

  三、ansible主機清單

    a、在配置文件中,咱們提到了資源清單,這個清單就是咱們的主機清單,裏面保存的是一些 ansible 須要鏈接管理的主機列表。定義方式以下

1、 直接指明主機地址或主機名:
    wohaoshuai1
    wohaoshuai2
    192.168.30.42
    192.168.30.43
2、 定義一個主機組[組名]把地址或主機名加進去
    [mysql_test]
    wohaoshuai2
    192.168.30.43

    b、須要注意的是,這裏的組成員可使用通配符來匹配,這樣對於一些標準化的管理來講就很輕鬆方便了。

      [dbservers]
      wohaoshuai[1:3]

      選擇dbservers組時就會同時選擇到wohaoshuai1 wohaoshuai2 wohaoshuai3

      [databases]
      db-[a:f].wohaoshuai.com
      選擇databases組時至關於選擇db-a.wohaoshuai.com 到 db-f.wohaoshuai.com全部主機

   四、作免密登陸

    a. 配置祕鑰
      ssh-keygen
      說明:執行ssh-keygen後所有按回車;配置祕鑰可免密碼控制受管節點
      ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.30.42
      sed -i '35a StrictHostKeyChecking no' /etc/ssh/ssh_config
      說明: ssh-copy-id -i指定公鑰文件;避免ssh登陸須要肯定,須要添加StrictHostKeyChecking no到etc/ssh/ssh_config中

    b. 使用sshpass
      sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.30.43
      說明: 使用sshpass避免手工介入輸入ssh密碼;安裝ansible會安裝sshpass

    c. 大量IP配置祕鑰
      for i in $(seq 71 80)
        do
          sshpass -p '123456' ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.30.$i
        done
      說明:大量ip能夠作腳本循環;seq 71 80表示71到80之間的數

3、ansible經常使用命令

  一、咱們比較經常使用的是/usr/bin/ansible和/usr/bin/ansible-playbook

  二、命令具體格式以下

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

    經常使用命令解釋以下

-a MODULE_ARGS   #模塊的參數,若是執行默認COMMAND的模塊,便是命令參數,如: 「date」,「pwd」等等
-k,--ask-pass #ask for SSH password。登陸密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證
--ask-su-pass #ask for su password。su切換密碼
-K,--ask-sudo-pass #ask for sudo password。提示密碼使用sudo,sudo表示提權操做
--ask-vault-pass #ask for vault password。假設咱們設定了加密的密碼,則用該選項進行訪問
-B SECONDS #後臺運行超時時間
-C #模擬運行環境並進行預運行,能夠進行查錯測試
-c CONNECTION #鏈接類型使用
-f FORKS #並行任務數,默認爲5
-i INVENTORY #指定主機清單的路徑,默認爲/etc/ansible/hosts
--list-hosts #查看有哪些主機組
-m MODULE_NAME #執行模塊的名字,默認使用 command 模塊,因此若是是隻執行單一命令能夠不用 -m參數
-o #壓縮輸出,嘗試將全部結果在一行輸出,通常針對收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用戶,默認爲 root 用戶
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪一個用戶,默認爲 root 用戶
-T TIMEOUT #指定 ssh 默認超時時間,默認爲10s,也可在配置文件中修改
-u REMOTE_USER #遠程用戶,默認爲 root 用戶
-v #查看詳細信息,同時支持-vvv,-vvvv可查看更詳細信息

4、ansible經常使用模塊

  一、主機連通性測試

    ansible all(或某個hosts中的主機或組,若爲all則爲全部) -m ping

    

  二、command 模塊

    a、這個模塊能夠直接在遠程主機上執行命令,並將結果返回本主機。

    b、命令模塊接受命令名稱,後面是空格分隔的列表參數。給定的命令將在全部選定的節點上執行。它不會經過shell進行處理,好比$HOME和操做如"<",">","|",";","&" 工做(須要使用(shell)模塊實現這些功能)。注意,該命令不支持| 管道命令。

    c、該模塊經常使用的命令以下

chdir       # 在執行命令以前,先切換到該目錄
executable # 切換shell來執行命令,須要使用命令的絕對路徑
free_form   # 要執行的Linux指令,通常使用Ansible的-a參數代替。
creates  # 一個文件名,當這個文件存在,則該命令不執行,能夠
用來作判斷
removes # 一個文件名,這個文件不存在,則該命令不執行

    d、通常說來用shell模塊就能夠了,基本此模塊能幹的事情shell都能幹,下面是這個模塊的幾個實例

      1)、執行經常使用命令      

        

      2)、先進入到/application/elk路徑下再執行ls命令

        

      3)、在相應文件夾下建立文件,若是文件已經存在那麼就再也不執行後面的命令

        

      4)、刪除相應文件夾下的文件,不論文件是否存在都會執行後面的命令

        

  三、shell模塊

    a、shell模塊能夠在遠程主機上調用shell解釋器運行命令,支持shell的各類功能,例如管道

      

    b、只要是咱們的shell命令,均可以經過這個模塊在遠程主機上運行,這裏就不一一舉例了,所以能用shell的儘可能就用shell好了。

  四、copy模塊

    a、這個模塊用於將文件複製到遠程主機,同時支持給定內容生成文件和修改權限等,相關選項以下

src    #被複制到遠程主機的本地文件。能夠是絕對路徑,也能夠是相對路徑。若是路徑是一個目錄,則會遞歸複製,用法相似於"rsync"
content   #用於替換"src",能夠直接指定文件的值
dest    #必選項,將源文件複製到的遠程主機的絕對路徑
backup   #當文件內容發生改變後,在覆蓋以前把源文件備份,備份文件包含時間信息
directory_mode    #遞歸設定目錄的權限,默認爲系統默認權限
force    #當目標主機包含該文件,但內容不一樣時,設爲"yes",表示強制覆蓋;設爲"no",表示目標主機的目標位置不存在該文件才複製。默認爲"yes"
others    #全部的 file 模塊中的選項能夠在這裏使用

    b、用法舉例以下

      1)、複製文件

        

      2)、給定內容生成文件,並制定權限。

        

        

      3)、關於覆蓋和備份

        默認只會覆蓋而不會備份,設置backup=yes後就會備份後再覆蓋

        

  五、file模塊

    a、該模塊主要用於設置文件的屬性,好比建立文件、建立連接文件、刪除文件等,常見的命令以下

force  #須要在兩種狀況下強制建立軟連接,一種是源文件不存在,但以後會創建的狀況下;另外一種是目標軟連接已存在,須要先取消以前的軟鏈,而後建立新的軟鏈,有兩個選項:yes|no
group  #定義文件/目錄的屬組。後面能夠加上mode:定義文件/目錄的權限
owner  #定義文件/目錄的屬主。後面必須跟上path:定義文件/目錄的路徑
recurse  #遞歸設置文件的屬性,只對目錄有效,後面跟上src:被連接的源文件路徑,只應用於state=link的狀況
dest  #被連接到的路徑,只應用於state=link的狀況
state  #狀態,有如下選項:
    directory:若是目錄不存在,就建立目錄
    file:即便文件不存在,也不會被建立
    link:建立軟連接
    hard:建立硬連接
    touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
    absent:刪除目錄、文件或者取消連接文件

    b、建立目錄

      

    c、建立連接文件,將/application/222.txt 軟鏈接到/application/333.txt

       

    d、刪除文件

      

  六、fetch模塊

    a、該模塊用於從遠程某主機獲取(複製)文件到本地,有兩個選項

      dest:用來存放文件的目錄
      src:在遠程拉取的文件,而且必須是一個file,不能是目錄

    b、要注意,文件保存的路徑是咱們設置的接收目錄下的被管制主機ip目錄下

      

  七、cron模塊

    a、該模塊適用於管理cron計劃任務的,其使用的語法跟咱們的crontab文件中的語法一致,同時,能夠指定如下選項

day= #日應該運行的工做( 1-31, , /2, )
hour= # 小時 ( 0-23, , /2, )
minute= #分鐘( 0-59, , /2, )
month= # 月( 1-12, *, /2, )
weekday= # 周 ( 0-6 for Sunday-Saturday,, )
job= #指明運行的命令是什麼
name= #定時任務描述
reboot # 任務在重啓時運行,不建議使用,建議使用special_time
special_time #特殊的時間範圍,參數:reboot(重啓時),annually(每一年),monthly(每個月),weekly(每週),daily(天天),hourly(每小時)
state #指定狀態,present表示添加定時任務,也是默認設置,absent表示刪除定時任務
user # 以哪一個用戶的身份執行

    b、添加計劃任務

      

    c、刪除計劃任務

      

  八、yum 模塊

    a、模塊主要用於軟件的安裝,選項以下

name=  #所安裝的包的名稱
state=  #present--->安裝, latest--->安裝最新的, absent---> 卸載軟件。
update_cache  #強制更新yum的緩存
conf_file  #指定遠程yum安裝時所依賴的配置文件(安裝本地已有的包)。
disable_pgp_check  #是否禁止GPG checking,只用於presentor latest。
disablerepo  #臨時禁止使用yum庫。 只用於安裝或更新時。
enablerepo  #臨時使用的yum庫。只用於安裝或更新時。

    b、ansible all -m yum -a 'name=htop state=present'

  九、service模塊

    a、該模塊用於服務程序的管理,主要有以下選項

arguments #命令行提供額外的參數
enabled #設置開機啓動。
name= #服務名稱
runlevel #開機啓動的級別,通常不用指定。
sleep #在重啓服務的過程當中,是否等待。如在服務關閉之後等待2秒再啓動。(定義在劇本中。)
state #有四種狀態,分別爲:started--->啓動服務, stopped--->中止服務, restarted--->重啓服務, reloaded--->重載配置

    b、開啓服務並設置自啓動

      

      由於wohaoshuai3沒有安裝nginx所以失敗

    c、關閉服務

      

  十、user模塊

    a、該模塊主要是用來管理用戶帳號,主要選項以下

comment  # 用戶的描述信息
createhome  # 是否建立家目錄
force  # 在使用state=absent時, 行爲與userdel –force一致.
group  # 指定基本組
groups  # 指定附加組,若是指定爲(groups=)表示刪除全部組
home  # 指定用戶家目錄
move_home  # 若是設置爲home=時, 試圖將用戶主目錄移動到指定的目錄
name  # 指定用戶名
non_unique  # 該選項容許改變非惟一的用戶ID值
password  # 指定用戶密碼
remove  # 在使用state=absent時, 行爲是與userdel –remove一致
shell  # 指定默認shell
state  # 設置賬號狀態,不指定爲建立,指定值爲absent表示刪除
system  # 當建立一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶
uid  # 指定用戶的uid

    b、添加用戶

      

      

    c、刪除用戶

      

  十一、group模塊

    a、該模塊主要用於添加或刪除組,經常使用選項以下

gid=  #設置組的GID號
name=  #指定組的名稱
state=  #指定組的狀態,默認爲建立,設置值爲absent爲刪除
system=  #設置值爲yes,表示建立爲系統組

    b、建立組

      

    c、刪除組

      

  十二、script模塊

    a、該模塊用於將本機的腳本在被管理端的機器上運行。

    b、相應實例

      首先編輯腳本並給予其執行權限

      

      而後,咱們直接運行命令來實如今被管理端執行該腳本:

      

相關文章
相關標籤/搜索