ansible入門系列--ansible介紹(1)
阿新 • • 發佈:2021-10-24
一、自動化工具介紹
1、自動化運維應用場景
- 檔案傳輸
- 應用部署
- 配置管理
- 任務流編排
2、常用自動化運維工具
- Ansible:python,Agentless,中小型應用環境
- Saltstack:python,一般需部署agent,執行效率更高
- Puppet:ruby, 功能強大,配置複雜,重型,適合大型環境
- Fabric:python,agentless
- Chef:ruby,國內應用少
- Cfengine
- func
二、Ansible介紹
1、Ansible特性
- 1> 模組化:呼叫特定的模組,完成特定任務
- 2> Paramiko(python對ssh的實現),PyYAML,Jinja2(模板語言)三個關鍵模組
- 3> 支援自定義模組
- 4> 基於Python語言實現
- 5> 部署簡單,基於python和SSH(預設已安裝),agentless
- 6> 安全,基於OpenSSH
- 7> 支援playbook編排任務
- 8> 冪等性:一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
- 9> 無需代理不依賴PKI(無需ssl)
- 10> 可使用任何程式語言寫模組
- 11> YAML格式,編排任務,支援豐富的資料結構
- 12> 較強大的多層解決方案
2、Ansible架構
ansible的作用以及工作結構
1、ansible簡介:
ansible是新出現的自動化運維工具,基於Python開發,
集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,
實現了批量系統配置、批量程式部署、批量執行命令等功能。
ansible是基於模組工作的,本身沒有批量部署的能力。
真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。
主要包括:
(1)、連線外掛connection plugins:負責和被監控端實現通訊;
(2)、host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;
(3)、各種模組核心模組、command模組、自定義模組;
(4)、藉助於外掛完成記錄日誌郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性執行多個任務。
2、ansible的架構:連線其他主機預設使用ssh協議
3、Ansible工作原理
4、Ansible主要組成部分
ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置檔案,由Ansible順序依次執行,通常是JSON格式的YML檔案
INVENTORY:Ansible管理主機的清單 /etc/anaible/hosts
MODULES: Ansible執行命令的功能模組,多數為內建核心模組,也可自定義
PLUGINS: 模組功能的補充,如連線型別外掛、迴圈外掛、變數外掛、過濾外掛等,該功能不常用
API: 供第三方程式呼叫的應用程式程式設計介面
ANSIBLE: 組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解為是ansible命令工具,其為核心執行工具
Ansible命令執行來源:
- 1> USER,普通使用者,即SYSTEM ADMINISTRATOR
- 2> CMDB(配置管理資料庫) API 呼叫
- 3> PUBLIC/PRIVATE CLOUD API呼叫 (公有私有云的API介面呼叫)
- 4> USER-> Ansible Playbook -> Ansibile
利用ansible實現管理的方式:
- 1> Ad-Hoc 即ansible單條命令,主要用於臨時命令使用場景
- 2> Ansible-playbook 主要用於長期規劃好的,大型專案的場景,需要有前期的規劃過程
Ansible-playbook(劇本)執行過程
- 將已有編排好的任務集寫入Ansible-Playbook
- 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行
Ansible主要操作物件
- HOSTS主機
- NETWORKING網路裝置
注意事項:
- 執行ansible的主機一般稱為主控端,中控,master或堡壘機
- 主控端Python版本需要2.6或以上
- 被控端Python版本小於2.4需要安裝python-simplejson
- 被控端如開啟SELinux需要安裝libselinux-python
- windows不能做為主控端
- ansible不是服務,不會一直啟動,只是需要的時候啟動
三、ansible安裝
1、rpm包安裝
#安裝epel源 yum install epel-release -y #安裝 yum install ansible
2、編譯安裝
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto tar xf ansible-1.5.4.tar.gz cd ansible-1.5.4 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible
3、Git方式
git clone git://github.com/ansible/ansible.git --recursive cd ./ansible source ./hacking/env-setup
4、pip安裝
yum install python-pip python-devel yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel pip install --upgrade pip pip install ansible --upgrade
確認安裝:
ansible --version
四、Ansible配置
1、檔案結構
配置檔案 /etc/ansible/ansible.cfg 主配置檔案,配置ansible工作特性(一般無需修改) /etc/ansible/hosts 主機清單(將被管理的主機放到此檔案) /etc/ansible/roles/ 存放角色的目錄 程式 /usr/bin/ansible 主程式,臨時命令執行工具 /usr/bin/ansible-doc 檢視配置文件,模組功能檢視工具 /usr/bin/ansible-galaxy 下載/上傳優秀程式碼或Roles模組的官網平臺 /usr/bin/ansible-playbook 定製自動化任務,編排劇本工具 /usr/bin/ansible-pull 遠端執行命令的工具 /usr/bin/ansible-vault 檔案加密工具 /usr/bin/ansible-console 基於Console介面與使用者互動的執行工具
2、主機清單inventory
Inventory 主機清單 1> ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名 2> 預設的inventory file為/etc/ansible/hosts 3> inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成 /etc/ansible/hosts檔案格式 inventory檔案遵循INI檔案風格,中括號中的字元為組名。 可以將同一個主機同時歸併到多個不同的組中; 此外,當如若目標主機使用了非預設的SSH埠,還可以在主機名稱之後使用冒號加埠號來標明 ntp.magedu.com 不分組,直接加 [webservers] webservers組 www1.magedu.com:2222 可以指定埠 www2.magedu.com [dbservers] db1.magedu.com db2.magedu.com db3.magedu.com 如果主機名稱遵循相似的命名模式,還可以使用列表的方式標識各主機 示例: [websrvs] www[1:100].example.com ip: 1-100 [dbsrvs] db-[a:f].example.com dba-dbff
3、ansible 配置檔案
Ansible 配置檔案/etc/ansible/ansible.cfg (一般保持預設) 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 # 預設併發數,同時可以執行5次 #sudo_user = root # 預設sudo 使用者 #ask_sudo_pass = True # 每次執行ansible命令是否詢問ssh密碼 #ask_pass = True # 每次執行ansible命令是否詢問ssh口令 #remote_port = 22 # 遠端主機的埠號(預設22) 建議優化項: host_key_checking = False # 檢查對應伺服器的host_key,建議取消註釋 log_path=/var/log/ansible.log # 日誌檔案,建議取消註釋 module_name = command # 預設模組