Ansible


Ansible 自動化運維工具

 

Ansible是什么?

Ansible是一個“配置管理工具”也是一個“自動化運維工具”

 

Ansible 作用:

Ansible是新出現的自動化運維工具,基於Python開發,實現批量系統配置,批量程序部署,批量運行命令

 

 

Ansible 簡介:

 

Ansible 是一個能實現批量部署的自動化運維工具,基於python開發,能實現批量系統配置,批量部署程序,批量運行命令。Ansible是基於模塊來運行,它本身沒有任何批量部署的能力,ansible主要是提供一種批量部署的框架。

 

Ansible的框架:

 

  1. 連接的插件connection plugins: 負責和被監控端的通信
  2. Host inventory 指定服務器上配置文件定義監控的客戶端
  3. 核心模塊: commandshellyumcopypingrm、自定義模塊(第三方模塊)
  4. Playbook: 劇本任務,在非必要的情況下可以在一個節點執行多個任務

 

 

Ansible 特性:

 

  1. No agent 不需要在被管控主機上安裝任何軟件
  2. No server 不用單獨啟用服務,能使用直接運行,使用時直接運行命令
  3. 對硬件資源占用小
  4. 不需要在被管控的主機上安裝任何軟件
  5. 基於模塊工作
  6. 基於ssh工作
  7. 使用yaml語言
  8. 可實現多級指揮

 

 

Asible的優勢:

1) 輕量級易操作

2) 分布式,無agent客戶端

3) 配置語法是YAML語言

4) 輕量級,無需在客戶端安裝agent,更新時在操作機更新一次即可

5) 批量任務執行可以寫成腳本,不用發送給客戶機就可執行

6) 使用python編寫,維護簡單

7) 支持sudo

 

Ansible的架構:

連接其他主機默認使用的ssh協議,也支持localzeromq的方式連接

 

 

 

 

核心:ansible  

核心模塊(core modules):ansible自帶的模塊

擴展模塊(custom modules):核心模塊不能滿足需求,添加擴展模塊。

插件(plugins):完成模塊的補充

劇本(playbook):在ansible配置文件中,可以將多個任務定義在一個劇本中,在ansibel執行劇本。

連接插件(connectior plugins):ansible默認使用ssh連接的,但是ansible也支持其他的連接方式,其他的連接方式是需要插件的支持,才可以實現通信。

主機群(host inventory): 定義ansible管理的主機的

 

 

 

 

 

 

 

 

Ansible生成的主要文件

 

1
2
3
4
5
6

/etc/ansible
/etc/ansible/ansible.cfg   #配置文件
/etc/ansible/hosts   #主機庫(host inventory)管理被監控的主機
/usr/bin/ansible   #主程序
/usr/bin/ansible-doc   #文檔
/usr/bin/ansible-playbook   #劇本

 

Ansible的工作原理:

  1. 服務端連接客戶端,實現通信
  2. 通過服務器的節點使用模塊實現客戶端的需求
  3. 通過劇本實現多個任務的實現

 

Ansible 的7個命令:

AnsibleAnsible-docAnsible-galaxyAnsible-lintAnsible-playbookAnsible-pullAnsible-vault

 

Ansible

Ansible是核心的指令,主要用於執行單條命令,默認跟的是主機和選項部分,默認不指定模塊時,使用的是command模塊(默認使用的模塊可以在ansible.cfg修改):

Eg[root@44 ~]# ansible all -a "pwd"

192.168.20.70 | SUCCESS | rc=0 >>

/root

  1. 參數:
  2. -a 'Arguments', --args='Arguments' 命令行參數
  3. -m NAME, --module-name=NAME 執行模塊的名字,默認使用 command 模塊,所以如果是只執行單一命令可以不用 -m參數
  4. -i PATH, --inventory=PATH 指定庫存主機文件的路徑,默認為/etc/ansible/hosts.
  5. -u Username, --user=Username 執行用戶,使用這個遠程用戶名而不是當前用戶
  6. -U --sud-user=SUDO_User sudo到哪個用戶,默認為 root
  7. -k --ask-pass 登錄密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證
  8. -K --ask-sudo-pass 提示密碼使用sudo
  9. -s --sudo sudo運行
  10. -S --su 用 su 命令
  11. -l --list 顯示所支持的所有模塊
  12. -s --snippet 指定模塊顯示劇本片段
  13. -f --forks=NUM 並行任務數。NUM被指定為一個整數,默認是5。 #ansible testhosts -a "/sbin/reboot" -f 10 重啟testhosts組的所有機器,每次重啟10台
  14. --private-key=PRIVATE_KEY_FILE 私鑰路徑,使用這個文件來驗證連接
  15. -v --verbose 詳細信息
  16. all 針對hosts 定義的所有主機執行
  17. -M MODULE_PATH, --module-path=MODULE_PATH 要執行的模塊的路徑,默認為/usr/share/ansible/
  18. --list-hosts 只打印有哪些主機會執行這個 playbook 文件,不是實際執行該 playbook 文件
  19. -o --one-line 壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。
  20. -t Directory, --tree=Directory 將內容保存在該輸出目錄,結果保存在一個文件中在每台主機上。
  21. -B 后台運行超時時間
  22. -P 調查后台程序時間
  23. -T Seconds, --timeout=Seconds 時間,單位秒s
  24. -P NUM, --poll=NUM 調查背景工作每隔數秒。需要- b
  25. -c Connection, --connection=Connection 連接類型使用。可能的選項是paramiko(SSH),SSH和地方。當地主要是用於crontab或啟動。。。。。

 

Ansible-doc

Ansible-doc -h 用於查看模塊的信息常見的參數-l  -s

Ansible-doc -l  列出已安裝的模塊

Ansible-doc -s 模塊 : 查查看具體模塊的使用方法

 

Ansible-galaxy

Ansible-galaxy 從站點下載第三方的擴展模塊

[root@44 ~]# ansible-galaxy -h

Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...

 

Ansible-lint

Ansible-lintplaybook的語法進行檢查的工具

Ansible-lint 劇本名

注:本人安裝的ansible 沒有此命令選項所以用ansible-playbook --syntax-check 對劇本進行語法的檢查

[root@44 ~]# ansible-playbook --syntax-check  + 劇本名  

對劇本語法進行檢查但不執行

 
Ansible-playbook

Ansible-playbook 讀取playbook文件執行相應的動作。

執行ansible-playbook的劇本

eg:執行a.yml劇本

[root@44 ~]# ansible-playbook a.yml

 

Ansible-pull

Ansible-pull 適用於數量多的機器配置,遠程執行命令的工具。對運維架構能力比較強

Ansible-vault

Ansible-vault 配置文件有敏感信息,設置加密/解密這個配置文件

 

 

  常用模塊使用

 

Ansible語法:ansible 機組名 -m 模塊 -a 執行的內容

 

1)   Setup模塊

 

用來查看遠程主機的一些基本信息

 

Ansible 用戶 -m setup

 

2)        Ping模塊

 

## 用來測試遠程主機的運行狀態

 

Ansible  用戶  -m ping

 

3)        Copy模塊

 

復制文件到遠程主機

 

示例:將本地文件“/etc/ansible/ansible.cfg”復制到遠程服務器

 

Ansibles  -m copy -a "src=/etc/ansible/ansible.cfgdest=/tmp/ansible.cfg owner=root group=root mode=0644"

 

4)        Command模塊

 

## 在遠程主機上執行命令

 

相關選項如下:

 

ansible storm_cluster-m command -a "uptime"

 

5)        Shell模塊

 

## 切換到某個shell執行指定的指令,參數與command相同。

 

這個模塊與script不同的是,首先要將寫好的sh腳本分發到機組,再執行

 

command不同的是,此模塊可以支持命令管道,同時還有另一個模塊也具備此功能:raw。

 

示例:

 

先在本地創建一個SHELL腳本

 

vim/tmp/rocketzhang_test.sh

 

將創建的腳本文件分發到遠程

 

ansiblestorm_cluster -m copy -a "src=/tmp/rocketzhang_test.shdest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

 

遠程執行

 

# ansiblestorm_cluster -m shell -a "/tmp/rocketzhang_test.sh"

 

6)        Script模塊

 

script模塊可以實現到對象節點上執行本機腳本。有點類似copy+shell+刪除copy的腳本的這樣一個綜合的功能。

 

ansible host32-m script -a /tmp/hello.sh

 

7)        更多模塊

 

其他常用模塊,比如:service、cron、yum、synchronize就不一一例舉,可以結合自身的系統環境進行測試。

 

service:系統服務管理

 

cron:計划任務管理

 

yum:yum軟件包安裝管理

 

synchronize:使用rsync同步文件

 

user:系統用戶管理

 

group:系統用戶組管理

 

File :  對文件目錄的創建、刪除

 

Path 參數:用來指定要操作的文件或目錄

 

State 參數: 設定操作的需求

 

State=directory   創建目錄

 

State=touch     創建文件

 

State=link       創建硬連接

 

State=absent     缺席、刪除

 

 

 

Ansible-playbook  劇本

 

Ansible-playbook的作用:

 

為什么使用ansible-playbook哪?當批量部署的過程中有些監控器需要做出改動的時候,我們不需要通過ansible命令去手動去改動,那樣太過於消耗時間,我們可以把它寫成腳本,有改動的時候,只需要修改定義下的變量就好。Ansible中的腳本功能就是ansible-playbook劇本。

 

 

 

 

 

Ansible-playbook 的使用方法:

 

Ansible-playbook的組織格式:YAML語言格式

 

YAML的簡介:

 

類似於半結構化數據,聲明式配置,可讀性較高用來表達資料序列的格式,容易與腳本語言交互

 

YAML的語法格式:

 

① 任何書記結構用縮進來標識,可以嵌套

 

② 每一行的一個鍵值keyvalue ,冒號隔開。若想在一行標識用{}和,分隔

 

③ 列表用-標識

 

Playbook 組成的結構:

 

Host: 被監控的主機

 

Tasks :任務,調用的模塊執行操作

 

Variables: 變量

 

Templates: 模板

 

Handlers :處理器

 

Roles :角色

 

基本結構:

 

  – host:webservices
            remote_user:
                – tasks:
                – task1
            module_name
        YAML文件擴展名通常為.yml,如test.yml。

 

 

 

 

 

Eg

 

 

 

[root@44 ~]# cat a.yml

 

- hosts: 192.16.20.70

 

  remote_user: root

 

  tasks:

 

  - name: add group

 

    group: name=new state=present

 

  - name: add user

 

    user: name=yxyfyy group=new

 

 

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/etc/services dest=/tmp/ owner=nobody group=new

 

 

 

 

 

 

 

 

 

 

 

 [root@44 ~]# ansible-playbook --syntax-check a.yml

 

 [WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70

 

 

 

 

 

playbook: a.yml

 

 

 

 

 

編寫playbook 劇本(執行拷貝的模板,把主機上的1111.txt文件拷貝到被監控的主機上。)

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root

 

 

 

playbook劇本進行檢測有沒有錯誤

 

[root@44 ~]# ansible-playbook --syntax-check a.yml

 

 

 

playbook: a.yml

 

 

 

執行playbook劇本

 

[root@44 ~]# ansible-playbook a.yml

 

PLAY [192.168.20.70] ******************************************************************

 

TASK [Gathering Facts] ****************************************************************

 

ok: [192.168.20.70]

 

 

 

TASK [copy] ***************************************************************************

 

changed: [192.168.20.70]

 

 

 

PLAY RECAP ****************************************************************************

 

192.168.20.70              : ok=2    changed=1    unreachable=0    failed=0   

 

檢查結果

 

[root@44 ~]# cat 1111.txt

 

ansible

 

[root@yk3 ~]# cat /tmp/1111.txt

 

ansible

 

 

 

Ansible-playbook的組成:

 

Ansible-playbook可以理解為把ansible的使用的模塊方法寫入ansible-playbook劇本中。

 

Ansible-playbook文件是以“.yaml”或“.yml”結尾的文件

 

 

 

EG:  

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70 (指定被操作主機)

 

yaml語法中使用冒號映射鍵值對,“冒號”后必須加空格)

 

  remote_user: root (指定遠程操作時使用那個用戶)

 

(注意格式:yaml語法用層級關系,同一層級的是對齊的。(開頭對齊))

 

  tasks: (操作的任務列表,可以有多個任務)

 

  - name: copy (自定義任務名稱)

 

copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root   

 

(任務的操作,copycopy模塊,src:源地址,(copy的內置條件) dest:目的地址, owner:所屬人  group:所屬組)

 

 

 

 

 

Hosts:定義要操作的主機,可以是IP地址、主機名(提前域名解析)、定義的分組。  定義多個主機要用,分隔開

 

 

 

Ansible-playbook  劇本

 

Ansible-playbook的作用:

 

為什么使用ansible-playbook哪?當批量部署的過程中有些監控器需要做出改動的時候,我們不需要通過ansible命令去手動去改動,那樣太過於消耗時間,我們可以把它寫成腳本,有改動的時候,只需要修改定義下的變量就好。Ansible中的腳本功能就是ansible-playbook劇本。

 

 

 

 

 

Ansible-playbook 的使用方法:

 

Ansible-playbook的組織格式:YAML語言格式

 

YAML的簡介:

 

類似於半結構化數據,聲明式配置,可讀性較高用來表達資料序列的格式,容易與腳本語言交互

 

YAML的語法格式:

 

① 任何書記結構用縮進來標識,可以嵌套

 

② 每一行的一個鍵值keyvalue ,冒號隔開。若想在一行標識用{}和,分隔

 

③ 列表用-標識

 

Playbook 組成的結構:

 

Host: 被監控的主機

 

Tasks :任務,調用的模塊執行操作

 

Variables: 變量

 

Templates: 模板

 

Handlers :處理器

 

Roles :角色

 

基本結構:

 

  – host:webservices
            remote_user:
                – tasks:
                – task1
            module_name
        YAML文件擴展名通常為.yml,如test.yml。

 

 

 

 

 

Eg

 

 

 

[root@44 ~]# cat a.yml

 

- hosts: 192.16.20.70

 

  remote_user: root

 

  tasks:

 

  - name: add group

 

    group: name=new state=present

 

  - name: add user

 

    user: name=yxyfyy group=new

 

 

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/etc/services dest=/tmp/ owner=nobody group=new

 

 

 

 

 

 

 

 

 

 

 

 [root@44 ~]# ansible-playbook --syntax-check a.yml

 

 [WARNING]: Could not match supplied host pattern, ignoring: 192.16.20.70

 

 

 

 

 

playbook: a.yml

 

 

 

 

 

編寫playbook 劇本(執行拷貝的模板,把主機上的1111.txt文件拷貝到被監控的主機上。)

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70

 

  remote_user: root

 

  tasks:

 

  - name: copy

 

    copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root

 

 

 

playbook劇本進行檢測有沒有錯誤

 

[root@44 ~]# ansible-playbook --syntax-check a.yml

 

 

 

playbook: a.yml

 

 

 

執行playbook劇本

 

[root@44 ~]# ansible-playbook a.yml

 

PLAY [192.168.20.70] ******************************************************************

 

TASK [Gathering Facts] ****************************************************************

 

ok: [192.168.20.70]

 

 

 

TASK [copy] ***************************************************************************

 

changed: [192.168.20.70]

 

 

 

PLAY RECAP ****************************************************************************

 

192.168.20.70              : ok=2    changed=1    unreachable=0    failed=0   

 

檢查結果

 

[root@44 ~]# cat 1111.txt

 

ansible

 

[root@yk3 ~]# cat /tmp/1111.txt

 

ansible

 

 

 

Ansible-playbook的組成:

 

Ansible-playbook可以理解為把ansible的使用的模塊方法寫入ansible-playbook劇本中。

 

Ansible-playbook文件是以“.yaml”或“.yml”結尾的文件

 

 

 

EG:  

 

[root@44 ~]# cat a.yml

 

- hosts: 192.168.20.70 (指定被操作主機)

 

yaml語法中使用冒號映射鍵值對,“冒號”后必須加空格)

 

  remote_user: root (指定遠程操作時使用那個用戶)

 

(注意格式:yaml語法用層級關系,同一層級的是對齊的。(開頭對齊))

 

  tasks: (操作的任務列表,可以有多個任務)

 

  - name: copy (自定義任務名稱)

 

copy: src=/root/1111.txt dest=/tmp/ owner=nobody group=root   

 

(任務的操作,copycopy模塊,src:源地址,(copy的內置條件) dest:目的地址, owner:所屬人  group:所屬組)

 

 

 

 

 

Hosts:定義要操作的主機,可以是IP地址、主機名(提前域名解析)、定義的分組。  定義多個主機要用,分隔開

 

 

 


免責聲明!

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



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