聊一聊Ansible自動化運維架構
一、ANSIBLE介紹
1、什么是ansible
ansible是一個自動化運維工具,基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
2、ansible的歷史
Ansible 工具由供應服務器應用程序 Cobbler 的作者 Michael DeHaan 開發,他是 Fedora 統一網絡控制器(Func)遠程管理框架的共同作者。
紅帽于 2015 年 10 月收購了 Ansible。
Ansible 是 Red Hat 旗下的 Fedora Linux 發行版的一部分,也可以通過 Extra Linux for Enterprise Linux(EPEL)以及其他操作系統用于 Red Hat Enterprise Linux,CentOS,Scientific Linux 和 Oracle Linux。
3、Ansible有很多重要的優勢:
- 跨平臺支持:Ansible為物理、虛擬、云和容器環境中的Linux、Windows、UNIX和網絡設備提供無代理支持。
- 人類可讀的自動化:Ansible Playbooks以YAML文本文件的形式編寫,易于閱讀,并有助于確保每個人都理解他們將做什么。
- 應用程序的完美描述:Ansible Playbooks可以做出每一個更改,應用程序環境的每一個方面都可以描述和記錄。
- 易于管理的版本控制:Ansible Playbooks和項目是純文本。 它們可以像源代碼一樣處理,并放在現有的版本控制系統中。
- 支持動態清單:Ansible管理的機器列表可以從外部來源動態更新,以便隨時獲取所有被管理服務器的正確的當前列表,無論基礎設施或位置如何。
- 可與其他系統輕松集成的編排:HP SA、Puppet、Jenkins、Red Hat 衛星和其他存在于您環境中的系統可以被利用和集成到您的Ansible工作流程中。
4、ansible工作原理
二、安裝ansible
1、關閉防火墻
setenforce 0
systemctl stop firewalld
2、修改主機名
hostname ansible /client
3、修改映射文件
vim /etc/hosts
4、下載epel-release軟件包
yum -y install epel-release
5、安裝ansible
yum -y install ansible
6、創建SSH面交互登錄
(1)發送密鑰需要passwd和yes。
ssh-keygen -t rsa
服務端:
客戶端:
復制密鑰到其他機器:
ssh-copy-id 192.168.253.128
復制密鑰時忽略passwd和yes(一鍵復制)。
sshpass -p passwd ssh -p 用戶名主機IP -o StrictHostKeyChecking=no
三、使用ansible
1、寫inventory(相當于/etc/ansible/hosts)
里面就是主機的localhost或者ip:
vim inventory
web1.example.com
web2.example.com
db1.example.com
db2.example.com
192.0.2.42
2、寫ansible.cfg
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = user
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
指令 | 描述 |
inventory | 指定目錄文件的路徑。 |
remote_user | 在被管理主機上登錄的用戶名。如果未指定,使用當前用戶名。 |
ask_pass | 是否提示SSHpasswd??梢匀绻褂肧SH公鑰認證,則為false。 |
become | 是否自動切換被管用戶連接后的主機(通常到root)。這也可以是戲劇指定的:戲劇指定的。 |
become_method | 如何切換用戶(通常是sudo,這是默認的,但是su是一個選項)。 |
become_user | 在托管主機上切換到的用戶(通常是Root,這是默認值)。 |
become_ask_pass | 是否提示為你的become_method輸入passwd。 默認值為false。 |
[defaults] | 設置Ansible操作的默認值 |
[privilege_escalation] | 配置Ansible對managed的權限升級方式主機 |
優先級最高的,還是自己創建的ansible.cfg |
3、ansible的adhoc
ansible all -m ping
在ansible外面直接執行模塊。
注:
Ansible的返回結果非常友好,一般會用三種顏色來表示執行結果:紅色,綠色和橘黃色。
①其中紅色表示執行過程中有異常。
②橘黃色表示命令執行后目標有狀態變化。
③綠色表示執行成功且沒存對目標機器做修改。
參數的含義:
- -v(–verbose):輸出詳細的執行過程信息,可以得到執行過程所有信息。
- -i PATH(–inventory=PATH):指定inventory信息,默認為/etc/ansible/hosts。
- -f NUM(–forks=NUM):并發線程數,默認為5個線程。
- –private-key=PRIVATE_KEY_FILE指定秘鑰文件,(不經常使用)。
- -m NAME,–moudle-name=NAME:指定執行時使用的模塊。
- -M DIRECTORY (–module-path=DIRECTORY):指定模塊存放路徑,默認為/usr/share/ansible,也可以通過ANSIBLE_LIBRARY設定默認目錄。(不經常使用)。
- -a ARGUMENTS ( --args=ARGUMENTS):指定模塊參數。
- -u USERNAME (–user=USERNAME);指定遠程主機 USERNAME運行命令。
- -l subset (–limit=SUBSET):限定運行主機。
- –list-hosts:列出符合條件的主機列表,不執行任何命令。
4、Ansible 基礎模塊
模塊類別 | 模塊 |
文件模塊 | ? copy: Copy a local file to the managed host- |
軟件包模塊 | ? yum: Manage packages using the YUM package manager |
系統模塊 | ? firewalld: Manage arbitrary ports and services using firewalld |
Net Tools模塊 | ? get_url: Download files over HTTP, HTTPS, or FTP |
5、ansible-doc
ansible-doc用來查詢ansible模塊文檔的說明(幫助文檔),類似于man命令。
(1)列出支持的模塊。
ansible-doc -l
ansible-doc -s command
ansible-doc -s raw
ansible-doc -s ping
6、ansible-playbook
Ansible-playbook是日常應用中使用頻率最高的命令,類似于Linux系統中的sh或source命令,用來執行系列任務,其工作機制是,通過讀取編寫好的 playbook文件實現集中處理任務,ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要執行的任務代碼。
playbook核心元素
- Hosts:執行的遠程主機列表。
- Tasks:任務集。
- Varniables: 內置變量或自定義變量在playbook中調用。
- Templates:模板,可替換模板文件中的變量并實現一些簡單邏輯的文件。
- Handlers 和 notity 結合使用,由特定條件觸發的操作,滿足條件才執行,否則不執行。
- Tags:標簽 指定某條任務執行,用于選擇運行playbook中的部分代碼,ansible具有冪等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其確實沒有發生變化的時間依然會非常地長,此時,如果確信其沒有變化,就可以通過tags跳過此些代碼片段。
語法: ansible-playbook playbook.yml
檢查語法是否錯誤。
ansible-playbook --syntax-check webserver.yml
7、ansible-console虛擬終端
ansible-console是 ansible為用戶提供的一款交互式工具,類似于 Windows中的cmd以及Linux中的shell,用戶可以在 ansible-console虛擬出來的終端上做像shell一樣使用ansible內置的各種命令,這為習慣于使用 shell交互方式的用戶提供了良好的體驗,在終端輸入ansible-console命令后顯示如下。
所有的操作類似于shell,而且支持Tab鍵補全,按快捷鍵Ctrl+D或Ctrl+C即可退出當前虛擬終端。
8、 ansible-galaxy
ansible-galaxy指令用于方便的從https://galaxy.ansible.com/站點下載第三方擴展模塊。
創建rolrs目錄架構:
ansible galaxy init 目錄
9、 ansible-vault
ansible-vault主要應用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以幫你加密/解密這個配置文件,屬高級用法。主要對于playbooks里比如涉及到配置passwd或其他變量時,可以通過該指令加密,這樣我們通過cat看到的會是一個passwd串類的文件,編輯的時候需要輸入事先設定的passwd才能打開。這種playbook文件在執行時,需要加上 --ask-vault-pass參數,同樣需要輸入passwd后才能正常執行。
10、 ansible-pull
該指令使用需要談到ansible的另一種模式---pull 模式,這和我們平常經常用的push模式剛好相反,其適用于以下場景:你有數量巨大的機器需要配置,即使使用非常高的線程還是要花費很多時間;你要在一個沒有網絡連接的機器上運行Anisble,比如在啟動之后安裝。
四、一些常見的命令
輸出facts變量的內容:
ansible 主機 -m setup
創建加密變量文件:
ansible-vault create secret.yml
查看加密變量文件:
ansible-vault view secret1.yml
編輯加密變量文件:
ansible-vault edit secret.yml
可以使文件加密:
ansible-vault encrypt secret1.yml secret2.yml
解密變量文件:
ansible-vault decrypt secret1.yml --output=secret1-decrypted.yml
更改加密文件的passwd:
ansible-vault rekey secret.yml
執行加密變量文件:
ansible-playbook --vault-id site.yml