自動化運維工具Ansible的簡單使用


一 基礎使用

1. 簡介
ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
 (1). 連接插件connection plugins:負責和被監控端實現通信;
 (2). host inventory:指定操作的主機,是一個配置文件里面定義監控的主機;
 (3). 各種模塊核心模塊、command模塊、自定義模塊;
 (4). 借助於插件完成記錄日志郵件等功能;
 (5). playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
2. 總體架構

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. 任務執行流程

二 安裝及配置

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 root@172.18.67.12
[root@node1 ~]# ssh-copy-id root@172.18.67.13


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'

 


免責聲明!

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



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