ansible是2013年推出的一款IT自動化和DevOps軟體,2015年被RedHat收購,是基于Python研發,糅合很多老運維工具的優點,實作批量作業系統配置,批量程式部署,批量運作指令等功能
ansible可以實作:
(1). 可以實作批量系統操作配置
(2). 可以實作批量軟體服務部署
(3). 可以實作批量檔案資料分發
(4). 可以實作批量系統資訊收集
--自動化部署APP
--自動化管理配置項
--自動化持續傳遞
--自動化(AWS)雲服務管理
--隻需要SSH和Python即可使用
--無刻畫段
--ansible功能強大,子產品豐富
--上手容易,門欄低
--基于Python開發,做二次開發更容易
--使用公司較多,社群活躍
(1).對管理主機
-要求Python2.6或Python2.7
ansible使用以下子產品,都需要安裝
-Paramiko
-PyYAML
-jinja2
-httplib2
-sik
(2).對于被托管主機
-ansible預設通過SSH協定管理機器
-被管理主機要開啟ssh服務,允許ansible主機登入
-在托管主機要開啟ssh服務
-在托管節點也要安裝Python2.5或以上的版本
-如果托管節點開啟了SElinux,需要安裝libselinux-python
ansible執行指令時,通過其底層傳輸連接配接子產品,将一個或數個檔案,或者定義一個play或command指令傳輸到遠端伺服器/tmp目錄的臨時檔案,并在遠端執行這些play/command指令,然後删除這些臨時檔案,同時回傳整個指令執行結果。
ansible底層基于安全可靠的SSH通訊協定
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安裝ansible
yum install -y ansible

ansible配置檔案查找路徑
-首先檢查ANSIBLE_CONFIG變量定義的配置檔案
-其次檢查目前目錄下的./ansible.cfg檔案
-再次檢查目前使用者目錄下的~/ansible.cfg檔案
-最後檢查/etc/ansible/ansible.cfg檔案
----------------------------------------------------------------------------------------------------
/etc/ansible/ansible.cfg是ansible的預設配置檔案路徑
#inventory = /etc/ansible/hosts #主機清單配置檔案
#library = /usr/share/my_modules/ #庫檔案存放目錄
#remote_tmp = ~/.ansible/tmp #臨時py檔案存放在遠端主機目錄
#local_tmp = ~/.ansible/tmp #本地的臨時執行目錄
#forks = 5 #預設并發數
#sudo_user = root #預設sudo使用者
#ask_sudo_pass = True #每次執行是否詢問sudo的ssh密碼
#ask_pass = True #每次執行是否詢問ssh密碼
#remote_port = 22 #遠端主機端口号
ansible配置檔案:
inventory 定義托管主機位址配置檔案路徑名
inventory 指定的配置檔案,寫入遠端主機的位址
host_key_checking = False ##跳過檢查主機指紋這個最好設定為False
##SSH遠端主機互動是否需要确認 True (等待輸入yes)、False(不需要輸入yes)
vi /etc/ansible/hosts
[webserver]
192.168.10.128
192.168.10.130
額外幾種配置方式
(1)範圍配置
node[3:4]
(2)包含配置
[cluster:children]
database
webserver
(3)組配置參數
[webserver:vars]
ansible_ssh_pass='123456'
ansible 主機集合 -m 子產品名稱 -a 參數名稱
--主機集合 主機名或分組名,多個使用逗号分隔
-m 子產品名稱,如果沒有指明,則預設使用command子產品
-a 或者 --args 子產品參數
其他參數
-i inventory檔案路徑,或可執行腳本
-k 使用互動方式登入密碼
-e 定義變量
-v 顯示詳細資訊
(1)非免密登入
ansible 192.168.10.130 -m ping -k ###使用互動方式密碼登入
(2)配置主機清單配置檔案
直接 /etc/ansible/hosts配置
[webserver]
192.168.10.128 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
192.168.10.130 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
或者組配置參數
ansible_ssh_port=22 ##預設ssh端口号,如果做了修改,必須單獨配置
ansible_ssh_user=root ###預設的ssh的使用者名
或者單獨寫一個主機清單檔案
vi /tmp/hosts
192.168.10.128
ansible_ssh_port=22
ansible_ssh_user=root
ansible webserver -m ping -i /tmp/hosts ##-i指定主機清單的位置
(3)設定密鑰對,免密登入
直接ssh-keygen一路回車
然後ssh-copy-id [email protected]、ssh-copy-id [email protected]實作免密
另一種方式不使用預設的密鑰
cd /root/.ssh
ssh-keygen -t rsa -b 2048 -N '' -f key
這樣子生成的密鑰對名稱是 key key.pub
給所有主機部署密鑰(必須在/root/.ssh目錄下,不然找不到key.pub)
ssh-copy-id -i key.pub [email protected]
ssh-copy-id -i key.pub [email protected]
由于此時不是使用的預設的密鑰名稱
需要在主機清單添加配置
ansible_ssh_private_key_file="/root/.ssh/key"