公司大概有200多雲主機須要進行管理,可是若是經過手工管理費時還累最終結果也容易出錯,因此考慮經過自動化的方式來管理雲主機,目前開源的自動化工具,你們用的比較多的有Ansible和Saltstack這兩種,其實還有其餘的只是相對於來講已經沒有這兩個那麼經常使用,我這邊最先接觸到的是ansible因此公司採用了ansible來管理主機,下面咱們介紹下ansible的安裝配置。python
1、環境的準備git
1.Python2.6+:Ansible 是基於Python開發,因此咱們控制主機須要安裝Python2.6以上版本;github
2.Jinja2:定義模板的時候使用Jinja2,而Jinja2是Python的現代模板語言;服務器
3.PyYAML:寫Playbook時候定義的文件類型是ymal,而PyYAML是Python 的一個 YAML 編碼/反編碼函數庫,;ssh
4.paramiko:Ansible 默認是基於SSH協議通訊,而paramiko純 Python 編寫的 SSHv2 協議函數庫;函數
5.httplib2:一個功能全面的 HTTP 客戶端函數庫;工具
2、Ansible 安裝測試
Ansible 默認基於SSH協議通訊,安裝Ansible之後控制主機不須要啓動或者後臺運行任何的Ansible進行,只須要在控制主機安裝Ansible,這樣能夠經過Ansible來管理任何一個被控節點,同時被控節點不須要安裝任何客戶端軟件;ui
1.源碼安裝編碼
# git clone git://github.com/ansible/ansible.git --recursive # cd ./ansible # source ./hacking/env-setup
2.yum/apt 安裝
yum install ansible apt-get install ansible
3.pip安裝
pip install ansible
4.檢查下ansible 是否安裝成功
ansible --version
返回ansbile 版本信息
ansible 2.4.2.0 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.6/site-packages/ansible executable location = /usr/bin/ansible python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
5.Ansible 命令集
ansible # 定義ansible 單任務 ansible-config # 查看、編輯、管理Ansible配置 ansible-doc # 文檔查看工具 ansible-galaxy # 共享、下載roles的工具 ansible-inventory # 查看Inventory主機信息 ansible-playbook # 執行playbook ansible-pull # 倉庫中拉去playbook ansible-vault # 文件加密、解密工具 ansible-console # ansible 控制檯
3、配置運行環境
1.配置Ansible的環境
運行Ansible命令時,命令將按照預先設定的順序前後查找配置文件
I.首先Ansible 會檢查環境變量是否設置ANSIBLE_CONFIG,以及檢查變量指向文件的路徑; II.檢查當前目錄下是否包含ansible.cfg配置文件; III.再次檢查當前用戶的主目錄是否包含ansible.cfg配置文件; IV.最後檢查/etc/ansible 目錄下是否包含ansible.cfg配置文件,通常經過軟件管理包(yum/apt)安裝時會自動在etc目錄下生成配置文件;
注意:
經過pip安裝時候,不會生成完成的ansible.cfg配置文件,此時咱們須要從github倉庫中examples目錄下拷貝ansible.cfg配置文件;
2.Ansible 主要配置文件
1 /etc/ansible/ansible.cfg #Ansible 配置文件 2 /etc/ansible/hosts #主機清單 3 /etc/ansible/roles/ #角色路徑
4、Ansible Inventory
實際過程當中咱們須要管理不一樣業務,不一樣環境中的各類服務器資源,這些服務器的信息主要存儲在Inventory 組件裏面,ansible.cfg中默認定義配置文件的路徑/etc/ansible/hosts;
1.定義主機和主機組
下面咱們來/etc/ansible/hosts 文件中定義主機和主機組
# Ex 1: 定義主機 192.168.100.10 # Ex 2:定義 'WebServers' 主機組 [WebServers] 10.172.139.53 10.30.49.72 10.30.49.[1:10] # 一組相似IP地址簡寫模式
說明:
方括號[]中表示的組名字,主要用於不一樣類別的系統進行分類,便於對同一類的服務器資源進行管理;
2.主機和主機組變量
# 定義主機變量 10.30.49.72 ansible_port='61821' #定義ssh遠程端口 # 定義主機組變量 # 下面的變量屬於整個WebServers組 [WebServers:vars] ansible_ssh_pass='ansible' ansible_ssh_port='61821'
3.Inventory 經常使用參數說明
ansible_ssh_host # 鏈接的遠程主機名. ansible_ssh_port # SSH遠程鏈接端口,非標準端口設置. ansible_ssh_user # SSH遠程鏈接用戶名 ansible_ssh_pass # SSH遠程鏈接帳號對應密碼 (這種方式並容易泄露密碼信息,建議使用 --ask-pass或者SSH認證) ansible_sudo_pass # sudo用戶密碼(這種方式並容易泄露密碼信息,烈建議使用 --ask-sudo-pass)
5、編寫第一個Ansible 程序
Ansible 安裝完成之後,咱們基本的瞭解了Ansible的配置方式,下來咱們編寫下第一個Ansible 程序
示例1:測試WebServers 服務器組連通訊
ansible WebServers -m ping -o 主機/主機組 模塊
返回結果: 39.105.0.244 | SUCCESS => {"changed": false, "ping": "pong"} 47.104.149.180 | SUCCESS => {"changed": false, "ping": "pong"}
示例2:WebServers /opt 目錄下建立ansible.txt文件
ansible 47.104.149.180 -m file -a "owner=root group=root mode=644 path=/opt/ansible.txt state=touch" -o 主機/主機組 模塊 參數 返回結果: 47.104.149.180 | SUCCESS => {"changed": true, "dest": "/opt/ansible.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0}
經過以上的例子,咱們大概了了解了經過Ansible的命令來管理服務器,具體的模塊信息和參數後面介紹,這裏咱們只是來體會下Ansible的便捷性,這樣咱們完成了Ansible的安裝和配置。