Ansible

Ansible 自動化運維工具python

 

Ansible是什麼?web

Ansible是一個「配置管理工具」也是一個「自動化運維工具」shell

 

Ansible 做用: vim

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客戶端ssh

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地址、主機名(提早域名解析)、定義的分組。  定義多個主機要用,分隔開

相關文章
相關標籤/搜索