自動化運維工具——ansible安裝入門(一)
阿新 • • 發佈:2019-02-15
vat 網絡設備 stack 基於 功能模塊 mas ad-hoc python server
一、簡介
現如今有很多運維自動化的工具,如:Ansible、Puppet、saltStack、Fabric、chef、Cfengine
1. Ansible介紹
Ansible 是由 Cobbler與Func的作者 Micheael DeHaan 編寫。2012-03-09發布0.0.1版本,2015-10-17被紅帽收購
Ansible 是一個配置管理系統(configuration management system)。你只需要可以使用ssh訪問你的服務器或設備就可以;它不同於其他工具,因為它使用的是推送的方式,而不像其他工具一樣使用拉去安裝agent。
2. Ansible功能
Ansible 可以幫助我們完成一些批量任務,或者完成一些需要經常重復的工作;例如:
- 當公司擴大,測試環境與生產環境的服務器都要增加至百臺。服務器的環境部署這樣重復性的工作就可以使用到ansible;
- 在百臺服務器中同時部署一個nginx服務,並且啟動。
- 將一個配置文件同時拷貝到數十臺服務器時。
3. Ansible 的特性
- 模塊化:調用特定的模塊完成特定的任務
- 有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模板
- 支持自定義模塊
- 基於Python語言實現
- 部署簡單,基於python和SSH(系統已默認安裝),agentless不需要客戶端
- 安全,基於OpenSSH,需要SSH密鑰驗證
- 支持playbook編排任務
- 冪等性:一個任務執行1遍和執行多遍的效果一樣,不會因為重復執行帶來意外情況
- 無需代理不依賴PKI(無需ssl)
- 可以使用任何編程語言寫模塊
- YAML格式,編排任務,支持豐富的數據結構
- 較強大的多層解決方案
4. Ansible 架構
5. Ansible 工作原理
6. Ansible 主要組成部分
- ansible playbooks:任務劇本(任務集),編排第一Ansible任務集的配置文件,由Ansible順序依次執行,通常是json格式的yml文件
- inventory:Ansible管理主機的清單/etc/ansible/hosts
- modules:Ansible 執行命令的功能模塊,多數為內置的核心模塊,也可自定義
- plugins:模塊功能的補充,如連接類型插件,循環插件,變量插件,過濾插件等,該功能不常用
- API:供第三方程序調用的應用程序編程接口
- Ansible:組合inventory、API、modules、plugins的綠框,可以理解為是ansible命令工具,其為核心執行工具
7. Ansible 命令執行來源
- USER,普通用戶,即system administrator
- CMDB 資產管理系統 API調用
- public/private cloud API調用
- USER-->ansible playbook --> Ansible
8. 利用ansible實現管理的方式:
- Ad-Hoc 即ansible命令,主要用於臨時命令使用場景
- Ansible-playbook 主要用於長期規劃好的,大型目的場景,需要有提前的規劃
9. Ansible-playbook(劇本)執行過程:
- 將已有編排好的任務集寫入Ansible-Playbook
- 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行
10. Ansible 主要操作對象:
- HOSTS主機
- NETWORKING網絡設備
註意事項
- 執行ansible的主機一般稱為主控端,中控,master或堡壘機
- 主控端Python版本需要2.6或以上
- 被控端Python版本小於2.4需要安裝python-simplejson
- 被控端如開啟SELinux需要安裝libselinux-python
- windows不能做為主控端
二、安裝Ansible
Yum安裝方式
Ansible安裝包在EPEL源中,自行配置yum源
//Ansible 安裝
yum install -y ansible
編譯安裝
> yum -y install python-jinja2 PyYAML python-paramiko
> python-babel python-crypto
> tar xf ansible-x.x.x.tar.gz
> cd ansible-x.x.x
> python setup.py build
> python setup.py install
> mkdir /etc/ansible
> cp -r examples/* /etc/ansible
git 安裝
> git clone git://github.com/ansible/ansible.git --recursive
> cd ./ansible
> source ./hacking/env-setup
pip安裝:pip是安裝Python包的管理器,類似yum
> 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 2.7.7
·config file = /etc/ansible/ansible.cfg
·configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
·ansible python module location = /usr/lib/python2.7/site-packages/ansible
·executable location = /usr/bin/ansible
·python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
1. Ansible 配置文件
- /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
- /etc/ansible/hosts 主機清單
- /etc/ansible/roles/存放角色的目錄
① 配置文件 /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 #默認並發數
#sudo_user = root # 默認sudo 用戶
#ask_sudo_pass = True #每次執行ansible命令是否詢問ssh密碼
#ask_pass = True
#remote_port = 22 #默認的節點ssh端口
#host_key_checking = False # 檢查對應服務器的host_key,建議取消註釋
② 主機清單inventory
Ansible必須通過Inventory 來管理主機。Ansible 可同時操作屬於一個組的多臺主機,組和主機之間的關系通過 inventory 文件配置。
//語法格式:
//單臺主機
www.test.com //FQDN方式
172.16.1.100 //IP地址
172.16.1.100:12222 //SSH服務端口不是22時使用
//多臺主機
[mysqlServer] //定義一個組名
mysql.test.com //FQDN方式 【定義組內單臺主機的地址】
172.16.1.101 //IP地址
[webServer]
172.16.1.100 //一臺主機可以在不同的組內,它同時屬於[mysqlServer]組
//組嵌套組
[group01:Server] //group01為自定義的組名,Server是關鍵字,固定語法必須填寫;
mysqlServer //group01 組內包含的其他組名
webServer //group01 組內包含的其他組名
//有規律的主機地址
www.wj[01:06].test.com
//相當於:
www.wj01.test.com
www.wj02.test.com
........
www.wj06.test.com
可以定義有規律的ip地址,也可以定義 有規律的字母地址,例如 [a:f]
還有一個隱藏的組是 [all] 組,不指定機器或組,就默認主機列表中所有機器
主機列表中的參數說明
ansible_ssh_host
//將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變量設置.
ansible_ssh_port
//ssh端口號.如果不是默認的端口號,通過此變量設置.這種可以使用 ip:端口 192.168.1.100:2222
ansible_ssh_user
//默認的 ssh 用戶名
ansible_ssh_pass
//ssh 密碼(這種方式並不安全,我們強烈建議使用 --ask-pass 或 SSH 密鑰)
ansible_sudo_pass
//sudo 密碼(這種方式並不安全,我們強烈建議使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
//sudo 命令路徑(適用於1.8及以上版本)
ansible_connection
//與主機的連接類型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默認使用 paramiko.1.2 以後默認使用 'smart','smart' 方式會根據是否支持 ControlPersist, 來判斷'ssh' 方式是否可行.
ansible_ssh_private_key_file
//ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的情況.
ansible_shell_type
//目標系統的shell類型.默認情況下,命令的執行使用 'sh' 語法,可設置為 'csh' 或 'fish'.
ansible_python_interpreter
//目標主機的 python 路徑.適用於的情況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.
//我們不使用 "/usr/bin/env" 機制,因為這要求遠程用戶的路徑設置正確,且要求 "python" 可執行程序名不可為 python以外的名字(實際有可能名為python26).
//與 ansible_python_interpreter 的工作方式相同,可設定如 ruby 或 perl 的路徑....
2. Ansible 主要程序
- /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界面與用戶交互的執行工具
3. 被管理的主機做密鑰驗證
ansible通過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於密鑰認證的方希聯系各被管理節點
密鑰驗證不具體寫了
4. Ansible系列命令
ansible
ansible-doc:顯示模塊磅數
// ansible-doc [option] [module...]
//-a 顯示所有模塊的文檔;-l == --list 列出可用模塊;-s == --snippet 顯示指定模塊的playbook片段
ansible-playbook
ansible-vault
ansible-console
ansible-galaxy
ansible-pull
註意:ansible使用,主機清單必須要先配置
自動化運維工具——ansible安裝入門(一)