天天看點

自動化運維工具Ansible的簡單使用一 基礎使用二 安裝及配置三 ansible常用子產品的使用

一 基礎使用

1. 簡介

ansible是新出現的自動化運維工具,基于Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實作了批量系統配置、批量程式部署、批量運作指令等功能。

ansible是基于子產品工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運作的子產品,ansible隻是提供一種架構。主要包括:

 (1). 連接配接插件connection plugins:負責和被監控端實作通信;

 (2). host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;

 (3). 各種子產品核心子產品、command子產品、自定義子產品;

 (4). 借助于插件完成記錄日志郵件等功能;

 (5). playbook:劇本執行多個任務時,非必需可以讓節點一次性運作多個任務。

2. 總體架構

自動化運維工具Ansible的簡單使用一 基礎使用二 安裝及配置三 ansible常用子產品的使用

3. 應用場景

<1>. Dev開發環境

 使用者:程式員

 功能:程式員開發軟體測試BUG的環境

 管理者:千萬不能是運維,一定是要程式員自已

<2>. 測試環境

 使用者:qa測試工程師

 功能:測試經過Dev環境測試通過的軟體的功能

 管理者:運維

 備注:測試環境往往有多套(測試環境滿足測試功能即可,不宜過多)

  (1)測試者希望測試環境有多套

   公司的産品多産品線并發,即多個版本,意味着多個版本同步測試

  (2)通常情況下,測試環境有多少套和産品線數量保持一樣

<3>. 釋出環境(代碼釋出機,有些公司堡壘機(安全屏障))

 使用者:運維

 功能:釋出代碼至生産環境

 管理者:運維(有經驗的)

 釋出機:往往需要有2台(主備)

<4>. 生産環境

 使用者:運維,隻能是運維(極少數情況下會開放權限給核心開發人員,極少數公司将該 環境權限完全開放給開發人員并讓開發人員維護)

 功能:對使用者提供公司産品的服務

 管理者:隻能是運維

 生産環境伺服器數量:一般比較多,且應用非常重要。往往需要自動工具協助部署配置應用。機器數量具體和公司業務規模相關。

<5>. 灰階環境(生産環境的一部分)

 功能:在全量釋出代碼前将代碼的功能面向少量精準使用者釋出的環境

  案例:

  大家手頭100台伺服器,先釋出其中的10台伺服器,這10台伺服器就是灰階伺服器。

 為什麼灰階環境:往往該版本功能變更較大,為保險起見特意先讓一部分使用者優化體驗該功能,待這部分使用者使用沒有重大問題的時候,再全量釋出至所有伺服器。

4. 優點

Agentless(去中心化)

Stupied Simple (上手簡單,學習曲線平滑)

SSH by default (安全,無需安裝用戶端)

YAML no code,定制劇本 (文法簡單,維護友善)

5. 任務執行流程

自動化運維工具Ansible的簡單使用一 基礎使用二 安裝及配置三 ansible常用子產品的使用

二 安裝及配置

1. 安裝

[root@node1 ~]# yum install ansible -y
[root@node1 ~]# ansible --version
ansible 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
      

2. ssh免秘鑰登入設定

[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id [email protected]
[root@node1 ~]# ssh-copy-id [email protected]
      

3. ansible配置

[root@node1 ~]# vim /etc/ansible/ansible.cfg
[defaults]
#inventory      = /etc/ansible/hosts                 # 主機清單配置檔案
#library        = /usr/share/my_modules/             # 自定義庫檔案存放目錄 
#remote_tmp     = $HOME/.ansible/tmp                 # 生成的臨時py指令檔案存放在遠端主機的目錄
#local_tmp      = $HOME/.ansible/tmp                 # 本機的臨時指令執行目錄
#forks          = 5                                  # 預設并發數
#poll_interval  = 15                                 # 預設的線程池
#sudo_user      = root                               # 預設sudo 使用者
#ask_sudo_pass = True
#ask_pass      = True
#transport      = smart
#remote_port    = 22
#module_lang    = C
#module_set_locale = False
#roles_path = /etc/ansible/roles  #roles預設存放目錄
#host_key_checking = False                           # 檢查對應伺服器的host_key
#timeout = 10                                        #檢查逾時
[privilege_escalation]          #定義權限[paramiko_connection]
[ssh_connection]
[accelerate]            #定義加速
[selinux]
[colors] #指令輸出顔色顯示
      

三 ansible常用子產品的使用

1. command子產品:使用ansible自帶子產品執行指令,如果要用 > < | & ' ' 使用shell子產品

[root@node1 ~]# ansible web -m command -a 'ls /tmp'                               #成功執行
[root@node1 ~]# ansible web -m command -a 'cat /tmp/mrlapulga.md | grep echo'     #執行失敗,即使不傳回失敗結果也不會正常生效
- creates                                                          #command指令不能使用管道符,<>&等
        a filename or (since 2.0) glob pattern, when it already exists, this
        step will *not* be run.
        [Default: None]
      

2. shell 子產品: 調用bash執行指令 類似 cat /tmp/mrlapulga.md | awk -F'|' '{print $1,$2}' &> /tmp/mrlapulga.txt 這些複雜指令,即使使用shell也會失敗,解決辦法:寫到腳本時,copy到遠端,執行,再把需要的結果拉回執行指令的機器(執行Ansible指令的機器往往稱為:Master機或者中控機或者堡壘機)

[root@node1 ~]# ansible web -m shell -a 'echo 123456 | passwd –-stdin mrlapulga'
      

3. copy:複制本地檔案至遠端伺服器,并且能夠改屬性等

[root@node1 ~]# ansible web -m copy -a 'src=/root/125.sh dest=/root/p.sh owner=mrlapulga group=mrlapulga backup=no mode=600'
      

4. cron:定時執行任務的子產品

 * * * * *

 分 時 日 月 周

增加一條crontab

[root@node1 ~]# ansible web -m cron -a 'minute="*/5" job="/usr/sbin/ntpdate 172.18.0.1 &> /dev/null" name="Synctimemrlapulga"'
      

删除名為Synctimemrlapulga的crontab任務

[root@node1 ~]# ansible web -m cron -a 'state=absent name="Synctimemrlapulga"'
      

5. fetch子產品: 從遠端伺服器拉取檔案至本機

隻能fetch檔案,不能fetch目錄,如果拉目錄,先tar/zip 再拉到本機即可

[root@node1 ~]# ansible web -m fetch -a 'src=/root/p.sh dest=/root/ppp.sh'
      

6. file子產品: 設定檔案屬性

[root@node1 ~]# ansible web -m file -a 'path=/root/p.sh mode=755'                               # 設定檔案權限
[root@node1 ~]# ansible web -m file -a 'src=/root/p.sh dest=/tmp/pp.sh mode=644 state=touch'    # 複制檔案并且設定檔案屬性
      

7. pip 子產品: Python的包管理工具

[root@node1 ~]# ansible web -m pip -a 'name=pip2'
      

8. ping 子產品: 檢測主機存活

[root@node1 ~]# ansible web -m ping
      

9. yum子產品: 安裝軟體

[root@node1 ~]# ansible web -m yum -a 'name=httpd state=latest'                                 # 安裝httpd包
[root@node1 ~]# ansible web -m shell -a 'ss -tnl | grep 80 '
[root@node1 ~]# ansible web -m command -a 'ss -tnl '
[root@node1 ~]# ansible web -m command -a 'systemctl start httpd.service'
[root@node1 ~]# ansible web -m command -a 'systemctl stop httpd.service'
      

10. service子產品

[root@node1 ~]# ansible web -m service -a 'name=httpd state=started'
[root@node1 ~]# ansible web -m service -a 'name=httpd state=stopped'
      

11.user子產品

[root@node1 ~]# ansible web -m user -a 'name=mrlapulga home=/tmp/mrlapulga/ shell=/bin/bash uid=2000 comment="test user" group=root'