Linux九陰真經之九陰白骨爪殘卷4(自動化運維之ansible用法一)

ansible是什麼?node

 

ansible是什麼?python

它是一個配置管理工具,也是一個自動化運維工具。nginx

 

ansible能作什麼?web

ansible 能夠幫助咱們完成一些批量任務,或者完成一些須要常常重複的工做。正則表達式

好比:同時在200臺服務器上安裝dhcp服務,並啓動。redis

好比:將某個文件一次性拷貝到200臺服務器上shell

好比:每當有新服務器加入工做環境時,你都啊喲爲新服務器部署redis服務,也就是說你須要常常重複的完成相同的工做。編程

 

特性centos

一、模塊化:調用特定的模塊,完成特定任務緩存


二、有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊


三、支持自定義模塊


四、基於Python語言實現


五、部署簡單,基於python和SSH(默認已安裝),agentless


六、安全,基於OpenSSH


七、’支持playbook編排任務


八、冪等性:一個任務執行1遍和執行n遍效果同樣,不因重複執行帶來意外狀況


九、無需代理不依賴PKI(無需ssl)


十、可以使用任何編程語言寫模塊


十一、YAML格式,編排任務,支持豐富的數據結構

 

ansible 配置文件

 

ansible 配置文件                                       /etc/ansible/ansible.cfg (通常保持默認)

主機列表配置文件                                     /etc/ansible/hosts

庫文件存放目錄                                         /usr/share/my_modules

檢查對應服務器的host_key,建議啓用,取消註釋

日誌文件                                                    /var/log/ansible.log

臨時py命令文件存放在遠程主機目錄        $HOME/.ansible/tmp

本機的臨時命令執行目錄                           $HOME/.ansible/tmp

默認併發數                                                 forks = 5

默認sudo 用戶                                            sudo_user = root

每次執行ansible命令是否詢問ssh密碼       ask_sudo_pass = True

ask_sudo_pass = True

remote_port = 22

 

基礎配置

實驗環境:一臺centos7.4的主控機和2臺centos6.9的受控機。

這三臺IP地址依次分別以下

192.168.95.2

192.168.95.3

192.168.95.129

 

鏈接一臺受控主機,以K的方式驗證,如不使用 -k 功能,則不能鏈接

 

 

同時鏈接兩臺受控機,在IP地址後面再添加一條便可,用逗號隔開

 

 

咱們發現,不管是鏈接一臺或者多臺,都要輸入受控機的密碼,這樣作是否是很麻煩呢? 到這裏就有人想到用openssl 作一個 基於key 的免密認證 ,下次登陸的時候就不用再輸入密碼了,真的是很聰明呢!

 

[root@centos7 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.95.3

[root@centos7 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.95.129

 

若感受SSH鏈接太慢,則更改/etc/ssh/sshd_conf 文件 

 

 ansible系列命令

 

ansible-doc: 顯示模塊幫助,至關於man

 

-a 顯示全部模塊的文檔


-l, --list 列出可用模塊


-s, --snippet 顯示指定模塊的playbook片斷

 

示例:
ansible-doc –l 列出全部模塊


ansible-doc ping 查看指定模塊幫助用法


ansible-doc –s ping 查看指定模塊幫助用法

 

ansible經過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於密鑰認證的方式聯繫各被管理節點

ansible <host-pattern> [-m module_name] [-a args]
--version 顯示版本
-m module 指定模塊,默認爲command
-v 詳細過程 –vv -vvv更詳細
--list-hosts 顯示主機列表,可簡寫—list
-k, --ask-pass 提示鏈接密碼,默認Key驗證
-K, --ask-become-pass 提示輸入sudo
-C, --check 檢查,並不執行
-T, --timeout=TIMEOUT 執行命令的超時時間,默認10s
-u, --user=REMOTE_USER 執行遠程執行的用戶
-b, --become 代替舊版的sudo 切換

 

ansible的Host-pattern

匹配主機的列表
All :表示全部Inventory中的全部主機
ansible all –m ping


* :通配符

ansible 「*」 -m ping
ansible 192.168.1.* -m ping
ansible 「*srvs」 -m ping


或關係
ansible 「websrvs:appsrvs」 -m ping
ansible 「192.168.1.10:192.168.1.20」 -m ping

 

邏輯與
ansible 「websrvs:&dbsrvs」 –m ping 
在websrvs組而且在dbsrvs組中的主機


邏輯非
ansible ‘websrvs:!dbsrvs’ –m ping
在websrvs組,但不在dbsrvs組中的主機


綜合邏輯
ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping
正則表達式


ansible 「websrvs:&dbsrvs」 –m ping
ansible 「~(web|db).*\.magedu\.com」 –m ping

 

 ansible 執行過程

 

ansible命令執行過程


1. 加載本身的配置文件 默認/etc/ansible/ansible.cfg
2. 加載本身對應的模塊文件,如command
3. 經過ansible將模塊或命令生成對應的臨時py文件,並將該 文件傳輸至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件
4. 給文件+x執行
5. 執行並返回結果
6. 刪除臨時py文件,sleep 0退出


執行狀態:

綠色:執行成功而且不須要作改變的操做
黃色:執行成功而且對目標主機作變動
紅色:執行失敗

 

示例
以wang用戶執行ping存活檢測
ansible all -m ping -u wang -k


以wang sudo至root執行ping存活檢測
ansible all -m ping -u wang –b -k


以wang sudo至mage用戶執行ping存活檢測
ansible all -m ping -u wang –b -k --become-user mage


以wang sudo至root用戶執行ls
ansible all -m command -u wang --become-user=root -a 'ls /root' -b –k -K

 

 ansible經常使用模塊

 

 command :在遠程主機執行命令,默認模塊,可忽略-m 選項

例:ansible  all  -a  'df  -h'   查看全部主機的分區利用率

       ansible all -a 'removes=/etc/fstab cat /etc/fstab'    查看全部主機的/etc/fstab ,若是存在,則執行,不存在則跳過不執行

         ansible all -a 'removes=/etc/fstab cat /etc/fstab'    與removes相反,若是存在則不執行,不存在則執行

       ansible all -a  'chdir=/boot  ls'                                切換到boot文件夾  用 ls 查看

 

  shell 模塊  : 用shell 執行命令

 例:ansible all -m  shell  -a  'echo $HOSTNAME'

          ansible  all  -m  shell  -a 

          ansible srv -m shell -a ‘echo magedu |passwd –stdin wang’

    調用bash執行命令 相似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’ &>                     /tmp/example.txt 這些複雜命令,即便使用shell也可能會失敗,解決辦法:寫到腳本時,   copy到遠程,執行,再把須要的結果拉回執行命令的機器

  

 script:運行腳本

 

-a "/PATH/TO/SCRITP_FILE"

ansible  all/websrvs(主機清單分組)  -m script  -a   f1.sh

 

 例:寫一個腳本 ,讓 主機清單裏的 全部主機都運行

 

 

copy模塊

從服務器複製文件到客戶端

 

ansible srv -m copy -a "src=/root/f1.sh  dest=/tmp/f2.sh  owner=wang mode=600 backup=yes"

如目標存在,默認覆蓋,此處指定先備份
ansible srv -m copy -a 「content=‘test content\n’ dest=/tmp/f1.txt」 利用內容,直接生成目標文件

例:將本機文件複製到遠程主機 , 若是想刪除要用   shell 模塊  (-m   shell)

 

 複製文件 修改權限 和 全部者

 

 fetch模塊

 

從客戶端取文件至服務器端,copy相反,目錄能夠先tar

ansible  all -m   etch  -a  'src=/root/a.sh  dest=/date/scripts'

 

 示例: 打包/var/log 下全部日誌 文件並遠程抓取

ansible all  -m  shell  -a 'tar Jcf  log.tar.xz  /var/log/*.log'

ansible all  -m  fetch  -a  'src=/root/log.tar.xz  dest=/date'

 

file 模塊

設置文件屬性

ansible  all  -m  file  -a 'name=/date/f3  state=touch'     建立文件

ansible  all  -m  file  -a  'name=/date/f3 state=absent'    刪除文件

ansible  all  -m  file  -a  'name=/date/dir1 state=directory'   建立目錄

ansible  all  -m  file  -a  'name=/date/dir1 state=absent'       刪除目錄

ansielb  all  -m  file  -a 'src=/etc/fstab  dest  /data/fstab.link  state=link'    建立軟連接

ansible  all  -m file  -a  'dest /data/fstab.link  state=absent'     刪除軟連接

ansible  all  -m  file  -a "path =/root/a.sh  owner=wang  mode = 755"

ansible  web  -m  file -a 'src=/app/testfile  dest=/app/testfile-link state=link'

 

hostname:模塊

管理主機名,生效同時更改文件永久生效

更改一個主機的主機名

ansible  node1  -m  hostname  -a "name=websrv"

 注意:

(1)host 模塊不會修改/etc/hosts 文件中的主機名解析, 注意修改

(2)批量修改主機名是最好加變量,放置素有主機名一致

 

 

cron 模塊

計劃任務

支持時間: minute . hour , day, mouth, weekday

ansible all  -m   cron  -a "minute=*/5  job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' 

name=synctime" 建立任務

ansible  all  -m  cron  -a 'state=absent anme=synctime'  刪除任務

 

示例:

 

建立計劃任務:每週一、三、5 每分鐘打印 ,任務名稱:warningcron

ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall  warning " name=warningcron'

 

註釋cronname=waringcron 的計劃任務

ansible  all  -m  cron  -a  'disabled=true  job="/usr/bin/wall warning" name=warningcron'

 

給cronname=waringcron的計劃任務去掉註釋:

ansible all  -m cron  -a 'disabled=true  job="/usr/bin/wall warning" name=warning '

 

建立計劃任務:每5分鐘同步一次服務器時間, 任務名稱:sync

ansible  all  -m  cron  -a  "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null'

name=sync"

 

刪除計劃任務

ansible  all  -m  cron  -a 'state=obsent name=sync'

 

yum模塊

管理包

示例:

yum安裝vsftpd包:(默認 state=install)

ansible all -m  yum  -a 'name=vsftpd'

 

安裝多個包用逗號隔開

ansible all -m  yum  -a 'name=vsftpd,httpd'

 

顯示全部已安裝的包

ansible  all  -m  yum  -a 'name=vsftpd  list=install'

 

卸載vsftpd包

ansible  all  -m  yum  -a 'name=vsftpd  state=removed'

 

安裝從互聯網下載的包

ansible  srv(主機清單分組)  -m copy  -a  'src=/root/package.rpm dest=/data/package'

ansible  srv  -m  yum  -a 'name=/data/package.rpm'

 

更新緩存

ansible  all  -m  yum  -a  'update_cache=yes'

更新緩存同時安裝dsta包

ansible  all  -m  yum  -a 'name=dstat  update_cache=yes'

 

ansible  all  -m  yum -a 'name=httpd  state=latest'  安裝

ansible  all  -m  yum  -a  'name=httpd  state=absent'  刪除

 

service模塊

管理服務

ansible  all  -m  service  -a  'name=httpd state=stopped'  中止服務

ansbile  all  -m  service  -a  'name=httpd state=started'    開啓服務(reloaded:重載  restarted:重啓)

 

user 模塊

管理用戶

添加用戶、指定uid、家目錄、主組及註釋

ansible  all -m  service   -a 'name=user1  comment="test  user" uid=2048 home=/app/user1 group=root'

 

ansible  all -m  user  -a  'name=sysuser1 system=yes home=/app/sysuser1'

ansible  all -m user   -a  'name=user1  state=absent  remove=yes'  刪除用戶及家目錄等數據

 

添加一個nginx用戶:

ansible srv -m user -a ‘name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment=」nginx service」

 

刪除nginx用戶同時刪除家目錄:

ansible srv -m user -a ‘name=nginx state=absent remove=yes’

 

group模塊

          管理組

建立一個系統組

ansible  all  -m group  -a  "name=testgroup  system=yes"

 

刪除一個組

ansible  all  -m  group -a "name=group11  state=absent"

 

建立nginx組

ansible  all  -m  group  -a  'name-nginx  system=yes  gid=80'

 

刪除nginx組

ansible  all  -m  group  -a  'name=nginx  state=absent'

 

ansible系列命令

 

ansible系列命令包括

 

ansible

ansible-doc

ansible-playbook

ansible-vault

ansible-console

ansible-galaxy

ansible-pull

 

ansible-doc

功能 顯示模塊幫助,至關於man

格式:ansible-doc [options]  [module...]

-a        顯示全部模塊文檔

-l         列出可用模塊

-s        顯示制動模塊的 簡潔用法

 

示例:

ansible-doc  ping        查看ping模塊幫助

ansible-co  -s ping      查看ping模塊的簡單說明

 

ansible-vault

功能:管理加密解密yml文件

格式:ansible-vault [create|decrypt|edit|encrypt|rekey|view]

 

ansible-vault encrypt hello.yml   加密yml文件

ansible-vault decrypt hello.yml   解密yum文件

ansible-vault  view  hello.yml      查看yml加密文件

ansible-vault edit hello.yml         編輯加密文件

ansible-vault rekey  hello.yml     從新修改加密口令

ansible-vault  create  new.yml    建立新文件

 

ansible-console

功能:ansible控制檯,可交互執行命令,支持tab

root@test(2)[f:10] $

執行用戶@當前操做的主機組(當前組的主機數量)[f:併發數] $

設置併發數:forks  n     例:    forks  10

切換組:cd主機組         例:    cd  web

列出當前組朱姐列表:list

列出全部的內置命令:?或 help

 

 示例

 列出主機列表中全部主機

root@all (2)[f:5]$ list

切換至appsrvs組

root@all (2)[f:5]$ cd appsrvs

列出appsrvs組下全部主機

root@appsrvs (2)[f:5]$ list

 例:

 

 安裝httpd服務

root@appsrvs (2)[f:5]$ yum name=httpd   state=present

開啓httpd服務:

root@appsrvs (2)[f:5]$  service name=httpd state=stated

 

 ansible-galaxy

 

 功能:鏈接 https://galaxy.ansible.com下載相應的roles

 

列出全部已安裝的galaxy:

ansible-galaxy list

 

安裝galaxy:

ansible-galaxy install geerlingguy.redis

 

刪除galaxy:

ansible-galaxy remove geerlingguy.redis

 

 ansbile-pull

 

功能:推送命令至遠程,效率無限提高,對運維技術要求較高

當前應用還較少

 

在本節內容中,咱們主要介紹了ansible的使用及一些經常使用模塊,在下節內容中,咱們將爲您解讀

ansible中playbook以及roles的使用

相關文章
相關標籤/搜索