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的使用