關於ansible的學習和使用--1

    

    運維工作中總需要批量的對服務器進行管理,配置和一些命令的批量執行的操作。ansible恰恰是一款可以很好的幫助我們完成這些工作的軟件,下面就來看看ansible是如果幫助我們很好的管理我們的服務器以及批量的在遠程進行命令的吧。


安裝:

    環境:fedora,glibc版本>=2.15,所以centos不適合,glibc會影響到ansible-playbook的執行

        安裝源:epel

    安裝過程:yum install -y ansible

    安裝目錄:配置文件所在目錄:/etc/ansible:ansible.cfg,hosts

              二進制文件所在目錄:/usr/bin:ansible,ansible-playbook,ansible-doc...


配置:

    ansible的主配置文件是/etc/ansible.cfg,裏面的參數具體還沒研究過,不過不太影響正常的使用。所以之後會做研究。

    hosts文件是ansible的一個很重要的文件。可以看做ansible的資產管理和統計的一個文件。該文件裏面的對所有的機器按照固定的格式進行了分類。例如:

    

[webservers]

alpha.example.org

beta.example.org

192.168.1.100

192.168.1.110


[dbservers]

db01.intranet.mydomain.net

db02.intranet.mydomain.net

10.25.1.56

10.25.1.57

    當主機是以主機名的形式給出的時候server要能夠正確的解釋此主機名。分組的主機還支持匹配的形式:

[webservers]

[a-z].example.org

example.[org|com]

192.168.1.*

192.168.2.[22-55]


使用:

    下面就來使用下,讓ansible工作起來吧.

        ansible主機:fedora  

        測試機:192.168.1.100

    首先要讓兩臺機器之間可以無密碼登陸:在fedora上通過ssh-keygen生成密鑰和公鑰。將這個公鑰拷貝到測試機上,然後cat id_rsa.pub >> /root/.ssh/authorized_keys,添加信任。

    然後在fedora的/etc/hosts上添加一個分組,將測試機添加進去:

    [TEST]

    192.168.1.1001

    在確保兩臺機器的ssh端口都打開防火牆和selinux都關閉的情況下,就可以測試啦。

    測試命令:

        ansible TEST -m command -a uptime

       wKiom1ONcQOQD1eCAACEw5sKsU4753.jpg


    這就是一個簡單的ansible的命令的使用。



模塊:

    ansible的工作很大程度上是依賴模塊的工作。一個好的合適的模塊可以幫我們省去很多的事情。在命令中用-m來指定模塊名稱,eg:

    ansible TEST -m copy src=/home/1.sh dest=/home/ (-m指定copy模塊,後面則是這個模塊的用法:src指本地被拷貝的文件路徑,dest指拷貝到遠程機器上的路徑)

    每個模塊的用法都有所不同,所帶的參數也有所不同。後續我也會多瞭解一些常用模塊的用法,以及根據實際需求來自己編寫模塊。

    


playbook:

    ansible的playbook(劇本)應該算是ansible的精華了,它可以將多個任務放在一起,然後執行這個playbook之後會使得機器達到我們預期的狀態。在這裏,我們需要轉變思維。不是我們通過運行playbook來批量執行命令;而是我們通過運行playbook使得服務器達到一種狀態。playbook成功執行的標誌是服務器達到了一種狀態,例如我們執行如下的playbook:

---

# This playbook contains common plays that will be run on all nodes.


- name: Install ntp 

  yum: name=ntp state=present

  tags: ntp


- name: Configure ntp file

  template: src=ntp.conf.j2 dest=/etc/ntp.conf

  tags: ntp

  notify: restart ntp


- name: Start the ntp service

  service: name=ntpd state=started enabled=true

  tags: ntp


- name: test to see if selinux is running

  command: getenforce

  register: sestatus

  changed_when: false

    

    執行之後服務器的狀態就是安裝了ntp的時間同步服務而且完成了時間同步,關閉了selinux服務。這個playbook就是爲了使服務器達到這樣的狀態,所以它重複多次執行也不會造成其他的影響。

    playbook的格式是YAML的語法形式,它是一種.yml結尾的文件。關於YAML的語法還需要去進一步深入,ansible的官網上也給出了YAML的語法知識(http://docs.ansible.com/YAMLSyntax.html)。它對tab符號和空格特別敏感。要避免使用tab符,之前編寫的時候習慣的用tab,結果運行就一直報語法錯誤。



一個項目的組成結構:

    要完成對一個或者一批服務器的配置,僅僅的使用一堆的命令或者堆砌playbook顯然不是一個好方法。這裏就要引入角色的概念了。角色roles,它表示服務器在集羣中會扮演某一個角色,一個服務器可能會扮演很多角色,比如它可以是web服務器,也可以是數據庫服務器。通過playbook來幫助服務器完成某一個角色。

    下面通過一個例子來介紹如何完成一個部署任務。有兩臺服務器,web1,web2,他們分別被部署成webserver和dbserver,當然,他們也有相同的軟件需要部署和配置。先來看看如何用ansible來規劃這個部署任務:

wKiom1OP2aOT2l00AAPC8IooZjw822.jpg    其中藍色方框代表目錄,實線箭頭指向目錄下一層。黃色的圓形代表文件;綠色的圓形代表和var,roles爲同一級目錄的文件。虛線表示文件或目錄的名稱在文件中的定義。

    從這樣一個組織結構可以看出site.yml是主要的playbook,裏面指定了哪些服務器扮演哪些角色。hosts則是資產管理中心,它對服務器進行分組管理。roles目錄下包含了三種角色的目錄;每個角色的目錄中都包含了成爲這個角色需要完成的任務的playbook和模板配置文件(db,web和common的目錄結構是一樣的所以這裏只給出common的)。vars目錄下存放的是不同分組的變量文件,這裏的變量是全局的。

    這樣,執行ansible-playbook -i hosts site.yml就可以開始部署了。




關於ansible也是初次接觸,還有很多用法都不熟悉。還有以下目標需要完成:

    1.利用ansible完成部署項目

    2.ansible官網使用文檔的閱讀,瞭解ansible更高級的用法

    3.ansible自帶模塊的熟悉以及學會根據需求編寫模塊



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