1. 程式人生 > >自動化運維之Ansible劍客參上

自動化運維之Ansible劍客參上

p地址 led cfengine res 本地源 -s engine doc abs

自動化運維之Ansible

Asible概述與核心組件

  • Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
  • Ansible可以看作是基於模塊進行工作的框架結構,批量部署能力就是由Ansible所運行的模塊實現的。簡而言之Ansible是基於“模塊”完成各種“任務”的。Ansible基本構架由六個部分組成:

    (1)、連接插件connection plugins:負責和被監控端實現通信;
    (2)、host inventory主機清單:指定操作的主機,是一個配置文件裏面定義監控的主機;

    (3)、Core modules核心模塊:是Ansible自帶的模塊,使用致謝模塊將資源分發到被管理主機,使其執行特定任務或匹配特定的狀態;
    (4)、Custom modules自定義模塊:用於完全模塊功能的補成,可借助相關插件完成記錄日誌、發送郵件等功能。
    (5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
    (6)、Asible core核心引擎。

安裝部署Ansible服務

  • Ansible自動化運維環境由控制主機與被管理主機組成,由於Ansible是基於SSH協議進行通信的,所以控制主機安裝Ansible軟件後不需要重啟或進行任何程序,被管理主機也不需要安裝和運行任何代理程序。

1、Ansible實驗案例環境

角色 IP地址 組名
控制主機 192.168.190.130
被管理主機 192.168.190.128 test01
被管理主機 1982.168.190.131 test02

2、安裝配置Ansible

yum install -y epel-release #安裝epel源

yum install ansible -y

ansible --version #查看ansible版本

yum install tree -y

tree /etc/ansible/ #樹狀結構展示文件夾

/etc/ansible/
├── ansible.cfg    #ansible的配置文件
├── hosts         #ansible的主倉庫,用於存儲需要管理的遠程主機的相關信息
└── roles     #角色

cd /etc/ansible

vim hosts #配置主機清單

[test01]
192.168.190.128
[test02]
192.168.190.131

ssh-keygen -t rsa #基於SSH秘鑰的連接

ssh-copy-id [email protected] #配置秘鑰對驗證

ssh-copy-id [email protected]

ssh-agent bash #免交互代理

ssh-add

Ansible命令基礎

  • Ansible的命令行管理工具都是由一系列模塊、參數所支持的,可以在命令後面加上-h或--help獲得幫助。如使用ansible-doc工具可以通過ansible-doc -h 或ansible-doc --help查看其幫助信息。
  • ansible-doc是用來查看模塊幫助信息的工具,主要的選項-l用來列出可使用的模塊,-s用來列出某個模塊的描述信息和使用示例。

1、command模塊

  • Asible管理工具使用-m選項來指定使用模塊,默認使用command模塊,即-m選項省略是會運行此模塊,用於在被管理主機上運行。
    例:在被管理的主機上執行data命令,顯示被管理主機的時間,有三種執行命令的方式去管理寫入主機清單中的主機:
    (1)、指定ip執行date
    ansible 192.168.192.128 -m command -a ‘date‘ 

    (2)、指定分類執行date
    ansible test01 -m command -a ‘date‘       
    ansible test02 -m command -a ‘date‘       

    (3)、所有hosts主機執行date命令
    ansible all -m command -a ‘date‘        

    (4)、如果不加-m模塊,則默認運行command模塊
    ansible all -a ‘ls /‘      

2、cron模塊

  • Ansible中的cron模塊用於定義任務計劃。其中有兩種狀態(state):present表示添加(省略狀態時默認使用),absent表示移除。
    ansible-doc -s cron      #查看cron模塊信息

    ansible test01 -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘       #添加任務計劃

    ansible test01 -a ‘crontab -l‘      #查看任務

    ansible test01 -m cron -a ‘name="test cron job" state=absent‘    #移除計劃任務,假如該計劃任務沒有取名字,name=None即可可

3、user模塊

  • Ansible中的user模塊用於創建新用戶和更改、刪除已存在的用戶。其中name選項用來指明創建用戶的名稱。
    ansible test01 -m user -a ‘name="test001"‘   #創建用戶test001

    ansible test01 -m command -a ‘tail /etc/passwd‘     #查看添加的用戶

    ansible test01 -m user -a ‘name="test01" state=absent‘    #刪除用戶test001

4、group模塊

  • Ansible中的group模塊用於對用戶組進行管理。
    nsible test01 -m group -a ‘name=mysql gid=306 system=yes‘   #創建mysql組

    ansible test01 -a ‘tail /etc/group‘     #查看組

    ansible test01 -m user -a ‘name=test001 uid=306 system=yes group=mysql‘            #創建test001用戶添加到mysql組中

    ansible test01 -a ‘tail /etc/passwd‘        #查看用戶

    ansible test01 -a ‘id test001‘              #查看用戶的屬組

5、copy模塊

  • Ansible中的copy模塊用於實現文件復制和批量下發文件。其中src來定義本地源文件路徑,使用dest定義被管理主機文件路徑,使用content則同夥指定信息內容來生成目標文件。
    (1)、例:將本地文件/etc/fstab復制到被管理主機的/opt/fstab.back,將所有者設置為root,權限設置為640;

    ansible test001 -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘

    ansible test001 -a ‘ls -l /opt‘     #查看詳細信息

    ansible test001 -a ‘cat /opt/fstab.back‘        #查看內容

    (2)、將“hello heihei!”寫入到/opt/fstab.back文件中;

    ansible test001 -m copy -a ‘content="hello heihei!"
    dest=/opt/fstab.back‘  #將hello heihei!寫入/opt/fstab.back

    ansible test001 -a ‘cat /opt/fstab.back‘    #查看內容

6、file模塊

  • 在Ansible中使用file模塊來設置文件屬性。其中使用path指定文件路徑,使用src定義源文件路徑,使用name或dest來替換創建文件的符號鏈接。
    ansible test01 -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘        #設置文件/opt/fstab.back的屬主為mysql,屬組為mysql,權限為644

    ansible test01 -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘      #設置/opt/fstab.link為/opt/fstab.back的鏈接文件

    ansible test01 -m file -a "path=/opt/fstab.back state=absent"         #刪除/opt/fstab.back文件

7、ping模塊

  • 在Ansible中使用ping模塊來指定主機的連通性。
ansible all -m ping

8、service模塊

  • 在Ansible中使用service模塊來控制管理服務的運行狀態。其中,使用enable表示是否開機自動啟動,取值為true或false;使用name定義服務名稱;使用state指定服務狀態,取值分別為started、stopped、restarted。
    ansible test02 -a ‘systemctl status httpd‘        
    #查看test02服務器httpd運行狀態
    ansible test02 -m service -a ‘enabled=true name=httpd state=started‘        #啟動httpd服務,並設置為開機自動啟動

9、shell模塊

  • Ansible中的shell模塊可以在被管理主機上運行命令,並支持像管道符等功能的復雜命令;
    ansible mysql -m shell -a ‘echo abc123|passwd --stdin mysql‘       #創建用戶使用無交互模式給用戶設置密碼

10、script模塊

  • Ansible中的script模塊可以將本地腳本復制到被管理主機上進行運行。需要註意的是,使用相對路徑來指定腳本。
    例:編寫一個本地腳本test.sh,復制到被管理主機上運行

    vim test.sh         #編寫腳本
    #!/bin/bash
    echo "hello ansible from script"> /opt/script.txt

    chmod +x test.sh    #賦予執行權限

    ansible test01 -m script -a ‘test.sh‘   #將腳本復制到test01上

    cat /opt/script.txt         #到test01上查看

11、yum模塊

  • Ansible中的yum模塊負責在被管理主機上安裝或卸載軟件包,但是需要提前在每個節點配置自己的yum倉庫。其中使用name指定要安裝的軟件包,還需要帶上軟件包的版本號,否則安裝最新的軟件包;使用state指定安裝軟件包的狀態,present、latest用來表示安裝,absent表示卸載。
    ansible test01 -m yum -a ‘name=zsh‘                  #安裝zsh軟件包

    ansible test01 -m yum -a ‘name=zsh state=absent‘     #卸載zsh軟件包

12、setup模塊

  • 在Ansible中使用setup模塊收集、查看被管理主機的facts(facts是Ansible采集被管理主機設備信息的一個功能)。每個被管理主機在接收並運行管理命令之前,都會將自己的相關信息(操作系統版本、IP地址等)發送給控制主機。
ansible tets01 -m setup           //獲取test01組主機的facts信息

自動化運維之Ansible劍客參上