Ansible
簡介
ansible是個什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT工具。這個工具的目標有這么幾項:自動化部署APP;自動化管理配置項;自動化的持續交互;自動化的(AWS)云服務管理。所有的這幾個目標從本質上來說都是在一個臺或者幾臺服務器上,執行一系列的命令而已。通俗的說就是批量的在遠程服務器上執行命令 。當然,最主要的是它是基于 paramiko 開發的。這個paramiko是什么呢?它是一個純Python實現的ssh協議庫。因此fabric和ansible還有一個共同點就是不需要在遠程主機上安裝client/agents,因為它們是基于ssh來和遠程主機通訊的。簡單歸納一下:
Ansible
—基于 Python paramiko 開發,分布式,無需客戶端,輕量級,配置語法使用 YMAL 及 Jinja2模板語言,更強的遠程命令執行操作
類似的自動化運維工具有很多常用的還有:
Puppet
—基于 Ruby 開發,采用 C/S 架構,擴展性強,基于 SSL,遠程命令執行相對較弱
SaltStack
—基于 Python 開發,采用 C/S 架構,相對 puppet 更輕量級,配置語法使用 YMAL,使得配置腳本更簡單
Ansible工作機制
Ansible 在管理節點將 Ansible 模塊通過 SSH 協議(或者 Kerberos、LDAP)推送到被管理端執行,執行完之后自動刪除,可以使用 SVN 等來管理自定義模塊及編排
由上面的圖可以看到 Ansible 的核心組件組成由 5 個部分組成:
Ansible core: 核心;
core Modules: 包括 Ansible 自帶的核心模塊及自定義模塊;
connect Plugins: 完成模塊功能的補充,包括連接插件、郵件插件等;
Playbooks: 網上很多翻譯為劇本,個人覺得理解為編排更為合理;定義 Ansible 多任務配置文件,由 Ansible 自動執行;
host Inventory: 定義 Ansible 管理主機的清單、主機池、主機列表;
一、ansible安裝配置:
1、yum安裝ansible
yum install ansible (ansible依賴于Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。)
2、ansible的master/clinet認證方法:
a、基于SSH密鑰認賬(默認認證)
ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id_rsa.pub root@node1
b、在inventory文件中制定用戶名和密碼認賬
方法:vim /etc/ansible/hosts添加
client_host ansibly_ssh_user=root ansible_ssh_pass=password
3、ansible配置hosts主機:
4、ansible命令應用基礎:
語法:ansible <host-pattern> [-f forks] [-m module_name] [-a args]
-f啟動多個個主機執行任務 -m要使用的模塊 -a模塊特有的參數
二、ansible常用模塊:
1、command:命令模塊,默認模塊,用于在遠程執行命令,不支持變量。ansible 192.168.139.128 -a 'date'
2、cron:計劃任務模塊:ansible 192.168.139.128 -m cron -a 'minute="*/10" job="/bin/echo "hell"" name="test job" '
3、user:用戶管理模塊:ansible webserver -m user -a 'name="node1" '
4、copy:遠程復制模塊
a、復制文件至遠程主機:ansible webserver -m copy -a 'src=/etc/motd dest=/tmp/moth owner=root mode=640'
b、往遠程主機文件寫入內容:使用content代替src。
ansible webserver -m copy -a 'content="ansible test\n test" dest=/tmp/moth '
5、file:設置文件屬性模塊
a、設置指定文件屬性:ansible webserver -m file -a 'owner=mysql group=mysql mode=644 path=/etc/motd'
b、創建文件符號鏈接:ansible webserver -m file -a ' path=/tmp/motd.link src=/etc/motd state=link'
6、ping:測試指定主機網絡是否通訊:ansible webserver -m ping
7、service:指定服務狀態模塊管理(必須保證遠程主機事先安裝好指定服務)
enableed:是否開機自動啟動 true/false
name:服務名稱
start:狀態,取值為startd,stopd,restartd
ansible webserver -m service -a 'enabled=true name=httpd state=started'
8、shell模塊: 在遠程主機上運行命令,支持管道、變量等在使用復制命令時使用。
ansible webserver -m shell -a 'echo password |passwd –stdin node1'
9、script:將本地腳步復制到遠程主機上并運行(注意本地主機腳步路徑使用相對路勁)
ansible webserver -m script -a "test.sh"
10、yum:程序安裝
name:指定要安裝的程序包,可以帶上版本號 state:preset,laster表示安裝最新,absent卸載
11、setup:收集遠程主機的facts ansible hostname -m setup
每個被管理節點在接受并運行管理命令之前,會將自己主機相關信息,操作系統版本、ip地址等會報告給ansible主機
用于將狀態報告給ansible主機直接調用其變量。
12、查看模塊幫助命令:
ansible-doc -l ansible-doc -s Modules 查看支持模塊
感謝馬哥,每天進步一點點!
原創文章,作者:n18-jude,如若轉載,請注明出處:http://www.www58058.com/14860