linux學習34-運維自動化之ANSIBLE
運維自動化之ANSIBLE
1. 應用概述
1.1 一些術語
-
雲端計算的三個分層
基礎設施在最下端,平臺在中間,軟體在頂端,分別是分別是Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS),Software-as-a-Service(SaaS),別的一些“軟”的層可以在這些層上面新增- 基礎設施(infrastructure)
網路系統(Networking)、儲存裝置(storage)、伺服器(servers)、虛擬化技術(virtualization) - 平臺(platform)
作業系統(OS)、中介軟體(middleware)、執行庫(runtime) - 軟體(software)
資料(date)、應用(application)
- 基礎設施(infrastructure)
-
本地部署 On-Premises
購買伺服器,搭機房,構建系統,開發應用程式,所有東西都要自己準備,也就是雲端計算的三層都自己做- 優點:為定製提供了最靈活的選擇,基本上不需要廠商的介入,日常維護費低,全面控制環境,實施監管比較容易
- 缺點:進入成本、運營、升級成本很高
-
iaas (Infrastructure as a Service)
基礎設施即服務:需要購買和維護的硬體裝置現在都可以租用了,企業可以將所有硬體採購和人員的維護服務都交由其他專業公司管理,直接採取租用的方式進行使用- 優點:硬體成本大幅縮減,維護人員和費用降低,實現硬體的彈性擴充套件
- 缺點:交由第三方公司管理,增加了溝通環節和溝通成本,應急響應和資料安全難以保障
-
Paas (Platform as a Service)
平臺即服務:它是指基於硬體系統,企業可以在PaaS平臺上研發SaaS應用,讓原本散落在不同地方的資源變得更加容易整合及利用,使得不同開發團隊的協作能力有效提升,大大縮短軟體應用的研發成本和週期。- 優點:更便捷的開發環境和整合系統支援,開發效率可以得到顯著提升
- 缺點:平臺閉源,服務商提供指定的語言和服務,開發者自由度較低
-
SaaS (Software as a Service)
軟體即服務平臺:所有東西都準備好了,你需要使用其服務- 優點:SaaS的最大優點在於應用的便捷性、即時性和移動化三大特徵,它對於傳統裝置或者客戶端的依賴較小。
- 缺點:各服務商的開發質量參差不齊,實際專案交付問題頻繁甚至爛尾,選擇靠譜的供應商非常重要
1.2 運維工程師的核心職能
- 平臺架構組建
- 負責參與並稽核架構設計的合理性和可運維性,搭建運維平臺技術架構
- 通過開源解決方案,以確保在產品釋出之後能高效穩定的執行
- 保障並不斷提升服務的可用性,確保使用者資料安全,提升使用者體驗
- 日常運營保障
- 負責用運維技術或者運維平臺確保產品可以高效的釋出上線,
- 負責保障產品7*24H穩定執行,在此期間對出現的各種問題可以快速定位並解決;
- 在日常工作中不斷優化系統架構和部署的合理性,以提升系統服務的穩定性
- 效能、效率優化
- 用自動化的工具/平臺提升軟體在研發生命週期中的工程效率
- 不斷優化系統架構、提升部署效率、優化資源利用率支援產品的不斷迭代
- 需要不斷的執行架構優化調整,以確保整個產品能夠在功能不斷豐富和複雜的條件下,同時保持高可用性
1.3 產品上線釋出的策略
-
藍綠髮布(Blue/Green Deployment)
藍綠部署是最常見的一種0 downtime部署的方式,是一種以可預測的方式釋出應用的技術,目的是減少釋出過程中服務停止的時間。- 原理
通常生產環境需要兩組配置(藍綠配置),一組是active的生產環境的配置(綠配置),一組是inactive的配置(藍配置)。使用者訪問的時候,只會讓使用者訪問active的伺服器叢集。在綠色環境(active)運行當前生產環境中的應用,也就是舊版本應用version1。當你想要升級到version2 ,在藍色環境(inactive)中進行操作,即部署新版本應用,並進行測試。如果測試沒問題,就可以把負載均衡器/反向代理/路由指向藍色環境了。隨後需要監測新版本應用,也就是version2 是否有故障和異常。如果執行良好,就可以刪除version1 使用的資源。如果執行出現了問題,可以通過負載均衡器指向快速回滾到綠色環境 - 優點
- 部署過程,應用始終線上,不需要停機
- 沒有修改老版本任何內容,部署期間老版本不收影響
- 原理
-
灰度釋出(金絲雀釋出)
通過在線上執行的服務中,新加入少量的新版本的服務,然後從這少量的新版本中快速獲得反饋,根據反饋決定最後的交付形態。- 金絲雀釋出要解決的問題主要是縮短反饋週期,以及彌補巨大產品環境下無法進行有效容量測試所可能導致的問題的一種手段。是一個能大大降低新版本釋出風險的方法。
- 灰度釋出
灰度釋出是通過切換線上並存版本之間的路由權重,逐步從一個版本切換為另一個版本的過程,金絲雀釋出更傾向於獲取快速的反饋,而灰度釋出更傾向於從一個版本到另一個版本平穩的切換。
可以通過逐漸增加負載,記錄並衡量應用程式響應時間,CPU使用率,I/O,記憶體使用率以及日誌中是否有異常報告這種方式來檢查應用程式是否滿足容量需求,降低容量測試不理想帶來的風險。
- 金絲雀釋出要解決的問題主要是縮短反饋週期,以及彌補巨大產品環境下無法進行有效容量測試所可能導致的問題的一種手段。是一個能大大降低新版本釋出風險的方法。
1.4 Linux運維工程師職能劃分
-
Dev開發環境
- 使用者:程式設計師
- 功能:程式設計師開發軟體,測試BUG的環境
- 管理者:程式設計師(一般不需要運維人員維護,因為開發習慣不同)
-
測試環境
- 使用者:QA測試工程師
- 功能:測試經過Dev環境測試通過的軟體的功能
- 管理者:運維
- 說明:測試環境往往有多套,測試環境滿足測試功能即可,不宜過多
- 測試人員希望測試環境有多套,公司的產品多產品線併發,即多個版本,意味著多個版本同步測試
- 通常測試環境有多少套和產品線數量保持一樣
-
釋出環境:程式碼釋出機,有些公司為堡壘機(安全屏障)
- 使用者:運維
- 功能:釋出程式碼至生產環境
- 管理者:運維(有經驗)
- 釋出機:往往需要有2臺(主備)
-
生產環境
- 使用者:運維,少數情況開放許可權給核心開發人員,極少數公司將許可權完全開放給開發人員並其維護
- 功能:對使用者提供公司產品的服務
- 管理者:只能是運維,生產環境伺服器數量一般比較多,且應用非常重要。往往需要自動工具協助部署配置應用
-
灰度環境(生產環境的一部分)
- 使用者:運維
- 功能:在全量釋出程式碼前將程式碼的功能面向少量精準使用者釋出的環境,可基於主機或使用者執行灰度釋出
- 管理者:運維
-
自動化運維應用場景
- 檔案傳輸
- 應用部署
- 配置管理
- 任務流編排
2. 自動化工具Ansible
2.1 Ansible概述
創始人,Michael DeHaan( Cobbler 與 Func 的作者)
2015-10-17,Red Hat宣佈收購
-
特性
- 模組化:呼叫特定的模組,完成特定任務,支援自定義模組
有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模組 - 基於Python語言實現
- 部署簡單,基於python和SSH(預設已安裝),agentless
- 安全,基於OpenSSH
- 支援playbook編排任務
- 冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
- 無需代理不依賴PKI(無需ssl)
- 可使用任何程式語言寫模組
- YAML格式,編排任務,支援豐富的資料結構
- 較強大的多層解決方案
- 模組化:呼叫特定的模組,完成特定任務,支援自定義模組
-
Ansible主要組成部分
- ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置檔案,由Ansible順序依次執行,通常是JSON格式的YML檔案
- INVENTORY:Ansible管理主機的清單/etc/anaible/hosts
- MODULES:Ansible執行命令的功能模組,多數為內建核心模組,也可自定義
- PLUGINS:模組功能的補充,如連線型別外掛、迴圈外掛、變數外掛、過濾外掛等,該功能不常用
- API:供第三方程式呼叫的應用程式程式設計介面
- ANSIBLE:組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解為是ansible命令工具,其為核心執行工具
-
利用ansible實現管理的方式:
- Ad-Hoc
即執行單條的ansible命令,主要用於臨時命令使用場景 - Ansible-playbook
主要用於長期規劃好的,大型專案的場景,需要有前提的規劃
執行過程:- 將已有編排好的任務集寫入Ansible-Playbook
- 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行
- Ad-Hoc
-
Ansible主要操作物件:
- HOSTS主機
- NETWORKING網路裝置
-
注意事項
- 執行ansible的主機一般稱為主控端,中控,master或堡壘機
- 主控端Python版本需要2.6或以上
- 被控端Python版本小於2.4需要安裝python-simplejson
- 被控端如開啟SELinux需要安裝libselinux-python
- windows不能做為主控端
2.2 安裝
- rpm包安裝: EPEL源
yum install ansible - 編譯安裝:
- 準備編譯環境,安裝一下工具
[[email protected] ~]$yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
- 下載並解壓下載的ansible 包
[[email protected] ~]$tar xf ansible-1.5.4.tar.gz
- 進入解壓後生成的目錄,依次執行一下內容
[[email protected] ~]$cd ansible-1.5.4 [[email protected] ansible]$python setup.py build [[email protected] ansible]$python setup.py install [[email protected] ansible]$mkdir /etc/ansible [[email protected] ansible]$cp -r examples/* /etc/ansible
- 準備編譯環境,安裝一下工具
- 確認安裝: ansible --version
2.3 ansible相關檔案
- 配置檔案:/etc/ansible/hosts
ansible的主要功用在於批量主機操作,想要完成主機管理,第一步要編輯主機清單(inventory),為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名- 分組命名遵循INI檔案風格,也就是中括號中的字元為組名,如[web]
[web] 192.168.169.128 192.168.169.129
- 可以將同一個主機同時歸併到多個不同的組中,如192.168.169.129同時存在於[web]與[app]中
[web] 192.168.169.128 192.168.169.129 [app] 192.168.169.130 192.168.169.129
- 支援主機名寫法,並且支援萬用字元
www[01:50].example.com <==支援萬用字元匹配www01 www02 ...www50
- 當如若目標主機使用了非預設的SSH埠,還可以在主機名稱之後使用冒號加埠號來標明
www1.magedu.com:2222
- 分組命名遵循INI檔案風格,也就是中括號中的字元為組名,如[web]
- 配置檔案
- 主配置檔案,配置ansible工作特性
/etc/ansible/ansible.cfg - 主機清單,配置被管理端主機
/etc/ansible/hosts - 存放角色的目錄
/etc/ansible/roles/
- 主配置檔案,配置ansible工作特性
- 程式
- 主程式,臨時命令執行工具
/usr/bin/ansible - 檢視配置文件,模組功能檢視工具
/usr/bin/ansible-doc - 下載/上傳優秀程式碼或Roles模組的官網平臺
/usr/bin/ansible-galaxy - 定製自動化任務,編排劇本工具
/usr/bin/ansible-playbook - 遠端執行命令的工具
/usr/bin/ansible-pull - 檔案加密工具
/usr/bin/ansible-vault - 基於Console介面與使用者互動的執行工具
/usr/bin/ansible-console
- 主程式,臨時命令執行工具
2.3.1 ansible 主配置檔案說明
Ansible 主配置檔案/etc/ansible/ansible.cfg (一般保持預設)
ansible通過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於key驗證的方式聯絡各被管理節點
[defaults]
#inventory = /etc/ansible/hosts #
`主機清單配置檔案`
#library = /usr/share/my_modules/ #
`庫檔案存放目錄,存放模組`
#module_utils = /usr/share/my_module_utils/
`用到的utils工具存放目錄`
#remote_tmp = $HOME/.ansible/tmp #
`臨時py命令檔案存放在遠端主機目錄,先把ansible執行的指令,先生成py程式,然後放在本地的目錄裡,然後再用ssh協議,將生成的py程式複製到被管理的機器remote_tmp目錄下,複製過去後,拿出來執行,執行完畢後會將該程式刪除`
#local_tmp = $HOME/.ansible/tmp #
`本機的臨時命令執行目錄`
#forks = 5 #
`預設併發數`
#poll_interval = 15
`每隔15秒去檢視對方的狀態`
#sudo_user = root #
`預設sudo 使用者 `
#ask_sudo_pass = True
#ask_pass = True
`每次執行ansible命令是否詢問ssh密碼`
#remote_port = 22
#host_key_checking = False #
`檢查對應伺服器的host_key,建議取消註釋,用於取消第一次連線問yes|no`
#log_path=/var/log/ansible.log
`日誌檔案,建議取消註釋,可以記錄日誌`
2.4 ansible系列命令
- Ansible系列命令
- ansible
- ansible-doc
- ansible-playbook
- ansible-vault
- ansible-console
- ansible-galaxy
- ansible-pull
- ansible命令執行過程
- 載入自己的配置檔案 預設/etc/ansible/ansible.cfg
- 載入自己對應的模組檔案,如command
- 通過ansible將模組或命令生成對應的臨時py檔案,並將該檔案傳輸至遠端伺服器的對應執行使用者$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY檔案
- 給檔案+x執行
- 執行並返回結果
- 刪除臨時py檔案,sleep 0退出
- 常見執行狀態:
- 綠色:執行成功並且不需要做改變的操作
- 黃色:執行成功並且對目標主機做變更
- 紅色:執行失敗
2.4.1 顯示模組幫助ansible-doc
- 格式
ansible-doc [options] [module…] - 選項
-a:顯示所有模組的文件
-l, --list:列出可用模組
-s, --snippet:顯示指定模組的playbook片段 - 示例:
- 示例1:列出所有模組,目前1852個
[[email protected] ~]$ansible-doc -l |wc -l 1852
- 示例2:檢視指定模組幫助用法,較詳細說明
[[email protected] ~]$ansible-doc ping
- 示例3:檢視指定模組幫助用法,簡要說明
[[email protected] ~]$ansible-doc -s ping
- 示例1:列出所有模組,目前1852個
2.4.2 主程式,臨時執行任務命令ansible
-
格式
ansible <host-pattern> [-m module_name] [-a args] -
選項
<host-pattern>定義要管理的在主機清單裡的一部分主機,可以是分組名如[app],all表示清單裡的所有主機,也可以是一臺主機選項 功能 -a args 模組引數,沒有引數可忽略 --version
顯示版本 -m module 指定模組,預設為command -v 詳細過程 –vv 、-vvv更詳細 --list-hosts
顯示主機列表,可簡寫 --list -k, --ask-pass 提示輸入ssh連線密碼,預設Key驗證 -K, --ask-become-pass 提示輸入sudo時的口令 -C, --check 檢查,並不執行 -T, --timeout=TIMEOUT 執行命令的超時時間,預設10s -U, --user=REMOTE_USER 遠端執行的使用者 -b, --become 代替舊版的sudo 切換 -
Host-pattern匹配主機的列表的表示方法
- All :表示所有Inventory中的所有主機
[[email protected] ~]$ansible all -m ping
- * :萬用字元
匹配所有主機同all [[email protected] ~]$ansible '*' -m ping 匹配192.168.1網段的所有主機 [[email protected] ~]$ansible 192.168.1.* -m ping 匹配所有以srvs結尾的項 [[email protected] ~]$ansible '*srvs' -m ping
- 或關係,兩部分都會執行,中間以冒號隔開
[[email protected] ~]$ansible 'web:app' -m ping [[email protected] ~]$ansible '192.168.1.10:192.168.1.20' -m ping
- 邏輯與,交集關係
在web組並且在app組中的主機 [[email protected] ~]$ansible 'web:&app' -m ping
- 邏輯非,排除關係
[[email protected] ~]$vim /etc/ansible/hosts [web] 192.168.169.128 192.168.169.129 [app] 192.168.169.130 192.168.169.129 [[email protected] ~]$ansible 'web:!app' -m ping 192.168.169.128 | SUCCESS => { <==只顯示128主機
- 綜合邏輯
屬於web或db但不屬於app排除ftp組內的主機 [[email protected] ~]$ansible 'web:db:&app:!ftp' -m ping
- 正則表示式
匹配以web或者db服務支援的所有magedu.com域名 [[email protected] ~]$ansible '~(web|db).*\.magedu\.com' -m ping ~表示後面跟正則表示式
- All :表示所有Inventory中的所有主機
-
示例:
- 示例1:以ping模組為例,判斷被管理主機是否可以正常連線。這裡的ping走的是ssh協議
[[email protected] ~]$ansible 192.168.169.128 -m ping -k SSH password: <==提供對方的口令 192.168.169.128 | SUCCESS => { "changed": false, "ping": "pong" <==可以正常連線,返回pong } 生成key,然後通過指令碼推送到管理的主機上,使用基於key驗證 [[email protected] ~]$ssh-keygen 推送成功後,再次執行相關命令,不需要加-k,基於key為預設方式 [[email protected] ~]$ansible all -m ping
- 示例2:以wang使用者執行ping存活檢測
[[email protected] ~]$ansible all -m ping -u wang -k
- 示例3:以v9 使用者sudo至root執行ping存活檢測
[[email protected] ~]$ansible 192.168.169.128 -m ping -u v9 -k
- 示例1:以ping模組為例,判斷被管理主機是否可以正常連線。這裡的ping走的是ssh協議
2.4.3 ansible-galaxy
-
列出所有已安裝的galaxy
ansible-galaxy list
-
安裝galaxy
ansible-galaxy install geerlingguy.redis
例如:從網站獲取apache的角色模板[[email protected] ~]$ansible-galaxy install geerlingguy.apache
-
刪除galaxy
ansible-galaxy remove geerlingguy.redis[[email protected] ~]$ansible-galaxy remove geerlingguy.apache
2.4.4 ansible-pull
推送命令至遠端,效率無限提升,對運維要求較高,沒有實踐資料
2.4.5 Ansible-playbook
- 功能:用於執行配置好的劇本,後文有詳細說明
- 示例
[[email protected] /data]$ansible-playbook hello.yml [[email protected] /data]$cat hello.yml - hosts: websrvs remote_user: root tasks: - name: hello world command: /usr/bin/wall hello world
2.4.6 Ansible-vault
- 功能
管理加密解密yml檔案 - 格式:
ansible-vault [create|decrypt|edit|encrypt|rekey|view] - 示例:
為角色hello.yml加密,引數encrypt
加密後的角色也可以檢視,新增view引數[[email protected] ~]$ansible-vault encrypt hello.yml New Vault password: Confirm New Vault password: <==輸入兩次密碼 Encryption successful 檢視加密後的角色 [[email protected] ~]$cat hello.yml $ANSIBLE_VAULT;1.1;AES256 <==使用的加密演算法 32323939376538383839613533383463653962653739633834653730366235393 436386232303436
加密後的角色也可以直接編輯,引數為edit[[email protected] ~]$ansible-vault view hello.yml Vault password: # world yml file
加密後不滿意原密碼,可以修改口令,引數rekey[[email protected] ~]$ansible-vault edit hello.yml
加密後的角色是不能執行的,需要先執行解密命令,引數decrypt[[email protected] ~]$ansible-vault rekey hello.yml Vault password: 原密碼 New Vault password: 新密碼 Confirm New Vault password: 重複新密碼 Rekey successfu
直接建立加密的新檔案,引數create[[email protected] ~]$ansible-vault decrypt hello.yml Vault password: <==輸入一次密碼 Decryption successful
[[email protected] ~]$ansible-vault create newhello.yml
2.4.7 Ansible-console
Ansible-console:2.0+新增,可互動執行命令
[[email protected] ~]$ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
| | | | | |
root @ all (3) [f:5]$ ? <==敲[?]或者[help]獲得幫助,會列出很多命令
|執行使用者|@|當前操作的主機數| (當前組的主機數量)|[f:併發數]|$
- 常用命令
- 設定併發數: forks n
例如: forks 10
- 切換組: cd 主機組
例如: cd web
- 列出當前組主機列表: list
- 列出所有的內建命令: ?或help
- 設定併發數: forks n
- 示例
安裝httpd服務,直接輸入模組和服務名,不需要加-m和-a[[email protected] ~]$ansible-console Welcome to the ansible console. Type help or ? to list commands. [email protected] (3)[f:5]$ yum name=httpd
3. ansible常用模組介紹
3.1 Command模組
- 作用:在遠端主機執行命令,預設模組,可忽略-m選項
在所有被管理主機上執行ls
[[email protected] ~]$ansible all -m command -a 'ls /data'
在所有被管理主機上增加使用者test
[[email protected] ~]$ansible all -m command -a 'usradd test'
- 常用引數
chdir:在執行該命令之前,切換到該目錄
creates:指定的檔案存在時,不執行對應命令[[email protected] /var/log]$ansible 192.168.169.129 -a 'chdir=/root ls'
remove:與creates相反,指定的檔案不存在,則不執行對應命令[[email protected] /data]$ansible app -a 'creates=/etc/passwd ls' 192.168.169.130 | SUCCESS | rc=0 >> skipped, since /etc/passwd exists <==跳過不執行
[[email protected] /data]$ansible app -a 'removes=/etc/passwd ls' 192.168.169.129 | SUCCESS | rc=0 >> anaconda-ks.cfg Desktop
- 此命令在遠端主機中執行命令時,不會經過遠端主機的shell處理,不支援$VARNAME < > | ; & 等
[[email protected] ~]$ansible all -m command -a 'echo magedu |passwd --stdin v9' 192.168.169.130 | SUCCESS | rc=0 >> magedu |passwd --stdin wang <==只是將字串打印出來,沒有執行
3.2 Shell模組與Script模組
- Shell模組
- 作用
和command相似,會用遠端shell執行命令,支援$VARNAME < > | ; & 等 - 引數:
executable:呼叫遠端主機的其他shell型別,如executable=/bin/csh
[[email protected] ~]$ansible all -m shell -a 'echo free7801336|passwd --stdin v9' 192.168.169.129 | SUCCESS | rc=0 >> Changing password for user v9. passwd: all authentication tokens updated successfully.
- 作用
- 將shell修改為預設模組
[[email protected] ~]$vim /etc/ansible/ansible.cfg #default module name for /usr/bin/ansible #module_name = command <==修改為常用模組即可
呼叫bash執行命令 類似cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt
這些複雜命令,即使使用shell也可能會失敗,解決辦法:寫到指令碼中,copy到遠端,執行,再把需要的結果拉回執行命令的機器
- Script模組
- 作用
執行本地的指令碼 - 呼叫格式
-m script -a "/PATH/TO/SCRIPT_FILE"
[[email protected] /data]$ansible app -m script -a '/data/f1.sh'
- 引數
creates:如果其後跟的檔案存在,則不執行指令碼[[email protected] /data]$ansible app -m script -a 'creates=/etc/fstab /data/f1.sh' 192.168.169.130 | SKIPPED <==跳過,不執行 192.168.169.129 | SKIPPED
3.3 Copy模組
- 作用
從伺服器複製檔案到客戶端 - 引數
- backup:如果目標主機已經有原始檔,會事先備份,防止覆蓋
- src:原始檔路徑
- dest:目標絕對路徑,如果源是資料夾,目標也必須是資料夾,不存在將建立
- mode:設定讀寫許可權
- ower:複製時候帶所有者
- content:將目標檔案的內容,指定為content所帶的字串
- 示例
例如:將原始檔f1複製到被管理組srv的所有主機上,目標路徑為/tmp/並改名為f2,指定所有者為v9,設定許可權為666
如果再次執行此命令[[email protected] /data]$ansible app -m copy -a 'src=/data/f1.sh dest=/data/f2.sh owner=v9 mode=666 ' 192.168.169.129 | SUCCESS => { "changed": true, 192.168.169.130 | SUCCESS => { "changed": true,
換一個檔案拷貝到目標主機,路徑和檔名依然是dest=/data/f2.sh,加backup=yes備份檔案[[email protected] /data]$ansible app -m copy -a 'src=/data/f1 dest=/data/f2 owner=v9 mode=666 backup=yes' 192.168.169.129 | SUCCESS => { <==顯示執行成功,但是目標沒有發生變化,不會因為目標存在而報錯,這就是ansible的冪等性 "changed": false,
編輯內容,在被控制主機上生成檔案[[email protected] /data]$ansible app ansible app -m copy -a 'src=/data/text dest=/data/f2 owner=v9 mode=666 backup=yes' 到目標主機上檢視,這裡需要注意的是模組shell執行命令時,是不支援別名的,例如ll執行會失敗,可以ls -l來執行。 [[email protected] ~]$ansible app -a 'ls -l /data' 192.168.169.130 | SUCCESS | rc=0 >> -rw-rw-rw- 1 v9 root 0 Sep 27 07:43 f2 -rw-rw-rw- 1 v9 root 0 Sep 27 07:43 [email protected]:09:47~ <== backup的備份效果
[[email protected] ~]$ansible app -m copy -a 'content="SELINUX=disable\nSELINUXTYPE" dest=/data/f1.txt' [[email protected] ~]$ansible app -a 'cat /data/f1.txt' 192.168.169.129 | SUCCESS | rc=0 >> SELINUX=disable SELINUXTYPE
3.4 Fetch模組
- 作用
從客戶端取檔案(只能是檔案)至伺服器端的目錄裡,與copy相反,如果一定要拉取目錄,可以先將目錄tar,再拉取 - 引數
src:原始檔路徑,這裡必須為檔案 - 示例
將遠端主機的/data/f1.txt檔案,拉取到本機上[[email protected] ~]$ansible app -m fetch -a 'src=/data/f1.txt dest=/data/' 將目標主機拉取過來的檔案,自動建立以ip地址命名的目錄分別存放 [[email protected] /data]$tree . ├── 192.168.169.129 │ └── data │ └── f1.txt ├── 192.168.169.130 │ └── data │ └── f1.txt
3.4 File模組
- 作用
設定遠端主機的檔案屬性 - 引數
- path
指定要管理的檔案,也可以寫成‘dest’,‘name’ - state
狀態,可以將值設定為directory表示建立目錄,設定為touch表示建立檔案,設定為link表示建立軟連線,設定為hard表示建立硬連線,設定為absent表示刪除目錄檔案或連結 - mode:指定許可權
- owner:指定所有者
- group:指定所屬組
- recurese:遞迴修改,用於檔案
- path
- 示例、
遠端主機root下檔案a.sh的所有者改為wang,許可權改為755
建立軟連線,首先建立一個空檔案data/file1,再建立軟連線檔案/data/file1-link[[email protected] ~]$ansible srv -m file -a "path=/root/a.sh owner=wang mode=755“
建立目錄,state=directory[[email protected] /data]$ansible app -m file -a 'dest=/data/file1 state=touch mode=600' [[email protected] /data]$ansible app -a 'ls /data' 192.168.169.129 | SUCCESS | rc=0 >> file1 建立軟連線,需要用src指定要建立軟連線的檔案路徑 [[email protected] /data]$ansible app -m file -a 'src=/data/file1 dest=/data/file1-line state=link' [[email protected] /data]$ansible app -a 'ls -l /data' 192.168.169.129 | SUCCESS | rc=0 >> -rw------- 1 root root 0 Sep 27 08:28 file1 lrwxrwxrwx 1 root root 11 Sep 27 08:30 file1-line -> /data/file1
刪除目錄或檔案,state=absent[[email protected] /data]$ansible app -m file -a 'dest=/data/dir state=directory'
也可以刪除一級目錄,會報錯,但是可以清楚資料[[email protected] /data]$ansible app -m file -a 'dest=/data/dir state=absent'
[[email protected] /data]$ansible app -m file -a 'dest=/data/ state=absent' 192.168.169.130 | FAILED! => { "changed": false, <==報錯 [[email protected] /data]$ansible app -a 'ls -l /data/' 192.168.169.129 | SUCCESS | rc=0 >> total 0 <==資料已經清空
3.5 Hostname模組
- 作用
管理主機名 - 示例
更改192.168.169.129的主機名,會更改目標主機的/etc/sysconfig/network檔案,永久生效[[email protected] /data]$ansible 192.168.169.129 -m hostname -a 'name=hai7-6'
3.6 Cron模組
- 作用
制定遠端主機計劃任務 - 支援時間引數
minute,hour,day,month,weekday - 引數
建立計劃任務,每10分鐘執行一次同步時間,將此計劃任務命名為synctime
禁用計劃任務disabled=true[[email protected] ~]$ansible app -m cron -a 'minute=*/10 job="ntpdate 172.0.0.1 &> /dev/null" name=synctime' [[email protected] /data]$ansible app -a 'crontab -l' 192.168.169.129 | SUCCESS | rc=0 >> #Ansible: synctime <==計劃任務的命名 */10 * * * * ntpdate 172.0.0.1 &> /dev/null <==沒有指定其他時間,預設為' * '
啟用計劃任務disabled=no[[email protected] /data]$ansible app -m cron -a 'disabled=true minute=*/10 job="ntpdate 172.0.0.1 &> /dev/nll" name=synctime'
刪除計劃任務state=absent[[email protected] ~]$ansible app -m cron -a 'disabled=no minute=*/10 job="ntpdate 172.0.0.1 &> /dev/nll" name=synctime'
[[email protected] ~]$ansible app -m cron -a 'state=absent minute=*/10 job="ntpdate 172.0.0.1 &> /dev/nll" name=synctime'
3.6 Yum模組
- 作用
管理包(確認被管理端為紅帽系列的) - 引數
安裝,state=latest預設選項,可省略,支援多程式一起安裝,用逗號隔開[[email protected] ~]$ansible app -m yum -a
相關推薦
linux學習34-運維自動化之ANSIBLE
運維自動化之ANSIBLE 1. 應用概述 1.1 一些術語 雲端計算的三個分層 基礎設施在最下端,平臺在中間,軟體在頂端,分別是分別是Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS
Linux學習31-運維自動化之自制啟動程式
系統安裝過程 安裝程式 1. CentOS系統安裝 名稱解釋 anaconda: CentOS圖形介面安裝嚮導程式 gui:圖形視窗 tui: 基於圖形庫curses的文字視窗 1.1 安裝程式啟動過程 啟動介面選擇 預設啟動GUI介面 若是顯式指
運維自動化之ansible
ansible hoc 自動化 運維自動化之ansible項目場景:公司計劃在年底做一次大型市場促銷活動,全面沖刺下交易額,為明年的上市做準備。公司要求各業務組對年底大促做準備,運維部要求所有業務容量進行三倍的擴容,並搭建出多套環境可以共開發和測試人員做測試。技術說明:ansible聚集以上部署和
運維自動化之ansible--(playbook模式)
自動化 ansible playbook 運維自動化之ansible--(playbook模式) 一、Ansible Playbook簡介 playbook是ansible用於配置,部署,和管理被控節點的劇本。 通過playbook的詳細描述,執行其中的一系列tasks,可以讓遠端主機達
運維自動化之ANSIBLE(基礎知識)
simple github remote inux 對象 場景 .tar.gz 使用場景 system Ansible發展史 Ansible ??創始人,Michael DeHaan( Cobbler 與 Func 的作者) ??2012-03-09,發布0.0.1版
Linux高階篇--運維自動化之系統安裝基礎知識
Linux高階篇–運維自動化之系統安裝基礎知識 一、 系統安裝過程 系統安裝程式 CentOS系統安裝 系統啟動流程: 1、post加電自檢 2、尋找啟動裝置:硬碟,尋找啟動程式grub 1階段:mbr 446位元組 1.5:mbr後續的27個扇區 2階段:
運維自動化之ansible saltstack使用對比分析
目前市場上主流的開源自動化配置管理工具有puppet、chef、ansible、saltstack。到底選擇哪一個好? 我為什麼選擇Saltstack,考慮方式很簡單,主要基於如下兩個方面: 第一、語言的選擇(puppet/chef vs ansible/saltstack) 開源技術,不看官網不足以熟練,不
運維自動化之ANSIBLE的簡單使用
環境 時間 顯示 pub 命令執行 系列 遠程主機 實驗 特性 實驗主機:Master:192.168.60.36Slave1:192.168.60.46Slave2:192.168.60.56測試環境做實驗、基於gnome環境安裝的centos7、且關閉了iptables
自動化運維工具之ansible
ansibleansible ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批量部署的能力。真正
自動化運維工之Ansible(1)
連接 blog mir spa yum源 多節點 功能 軟件 重復執行 1.1 ansible簡介 1.1.1 、Ansible軟件介紹: Ansible提供一種最簡單的方式用於發布、管理和編排計算機系統的工具,可在數分鐘內搞定。Ansible由Python語言開發, 默認
自動化運維系列之Ansible的簡介與安裝【持續更新···】
zabbix cti 服務 部署安裝 部署 ansible ffffff 執行 gen 自動化運維系列之Ansible的簡介與安裝 自動化運維工具簡介 由於互聯網的快速發展導致產品更新換代的速度逐漸加快,這就導致運維人員的日常工作會大大增加,如果還是按照傳統方式進行維護工
自動化運維系列之Ansible命令應用基礎(模塊的應用)【持續更新中···】
cto fff 安裝 ecb code 文件的 核心 取值 back 自動化運維系列之Ansible命令應用基礎(模塊的應用) 模塊簡介 Ansible可以使用命令行方式進行自動化管理,基本語法如下: ansible <host-pattern> [-m mo
自動化運維系列之Ansible的YAML、基礎元素介紹
ocs 模型 ntp python 執行 缺省 cfg lin ldr 自動化運維系列之Ansible的YAML、基礎元素介紹 YAML簡介 YAML是一種用來表達資料序列的格式。YAML是YAML Ain‘t Markup Lanaguage的縮寫,即YAML不是XML。
ansible運維自動化之五---roles高階進階
Roles應用場景 複雜場景(建議使用roles) 變更指定主機或主機組 如命名不規範維護和傳承成本大 某些功能需Inlogs.com/blog/675193/201901/675193-20190102225646401-1546983424.png) roles下面每一個目錄是一個
運維自動化之Saltstack使用詳解
自動化運維 saltstack 概要saltstack是基於Python開發的C/S架構的一款批量管理工具,底層采用動態的連接總線(ZeroMQ消息隊列pub/sub方式通信),使用ssl證書簽發的方式進行認證管理,使其可以用於編配, 遠程執行, 配置管理等等。部署輕松,在幾分鐘內可運行起來,擴展性好
運維自動化工具ansible(模塊使用)
copy fff lin 自動 執行命令 官網 修改 相同 mount 命令格式: ansible hosts -m shell -a ‘uptime‘ 解析: ansible #主命令 hosts #在/etc/ansible/hosts文件中定義的主
運維自動化工具ansible(安裝)
down 免密鑰 org roo bin package python2 div 5.1 一、安裝 註意:強烈建議升級python版本到2.6以上,不然運行會出錯或者有些功能會沒有,在編譯安裝其他包的時候也會因為兼容問題報錯。 (1)、python2.7安裝 http
運維自動化之系統安裝(基於PXE)
/dev/ def workman httpd服務 roo cond dhcp mount dhcp服務 1.安裝流程及架構 2.搭建環境前準備:關閉防火墻,關閉selinux,如果是centos6最好也把NetworkManager關閉 3.準備ks應答文件
運維自動化之系統安裝
依賴網絡和不依賴網絡的自動化安裝系統做一個完整版的iso,不依賴於網絡1 準備相關文件,yum源mkdir /app/fulliso cp -r /misc/cd /app/fulliso這裏要註意,因為沒有隱藏文件拷過來所以在考將/misc/cd裏的隱藏文件拷過來ls -a後就可以看到隱藏文件cp .tr
運維自動化之psutil模塊
linux python psutil psutil 是一個跨平臺的庫,能夠輕松實現獲取系統運行的進程和系統利用例(CPU,磁盤,內存,網絡等)信息,主要運用於系統監控,分析系統資源和進程管理。psutil比在shell中使用一連串的命令(ps,top,lsof,df,who,ionice,ios