馬哥出品 ansible中文文檔:http://www.ansible.com.cn/index.html
創新互聯建站從2013年開始,先為欒城等服務建站,欒城等地企業,進行企業商務咨詢服務。為欒城企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
ansible介紹:
ansible是個什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT運維管理工具。這個工具的目標有這么幾項:讓我們自動化部署APP;自動化管理配置項;自動化的持續交付;自動化的(AWS)云服務管理。基于Python開發,可實現對多臺服務器進行批量配置、程序的部署及指令的運行。大大減少了在運維工程中的工作量。
ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
(1)、連接插件connection plugins:負責和被監控端實現通信;
(2)、host inventory:指定操作的主機,是一個配置文件里面定義監控的主機;
(3)、各種模塊核心模塊、command模塊、自定義模塊;
(4)、借助于插件完成記錄日志郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
ansible特點:
1.簡單,ansible自然的自動化語言與允許運維人員,開發者,和IT管理人員在很短的時間內完成自動化項目。
2.無代理,默認使用SSH而不需要客戶端。避免了額外的端口開啟,提高安全性,避免不必要的管理,減少CPU的使用
3.干的活多,ansible能干自動完成軟件部署,配置管理,流程化管理,和cloud provisioning。
ansible安裝:
由于ansible是用python開發的,安裝過程中依賴眾多python模塊,這里建議yum安裝ansible,想要更新版本的可下載源碼編譯安裝,
yum install ansible -y
yum安裝ansible的默認配置文件路徑,ansible.cfg是ansible的主配置文件,
ansible]# ls /etc/ansible/
ansible.cfg hosts roles
hosts是默認的hostfile路徑,可配置DNS域名,ip。
通過ssh key方式連接遠端客戶機,省去密碼環節
ssh-keygen -t rsa -P ''
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.137.130
注意這個地方是有個坑的,由于ansible執行的時候需要把臨時模塊拷貝到客戶端,而默認的拷貝方式是通過sftp來的方式拷貝的,如果你的客戶端沒有裝sftp,那么執行ansible會出錯的。
如果沒裝sftp可以用scp。 下面的這一行本來是注釋起來的,把注釋去掉就OK了
ansible]# grep "scp_if_ssh" /etc/ansible/ansible.cfg
scp_if_ssh = True
還有個坑,即使裝了sftp也不一定能用,你的ssh要啟用它才OK。
ansible]# grep "Subsystem" /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server
ansible的基本工作流程:
1.ansible通過OPENSSH或者python的pramamiko連接客戶端
2.把ansible module推送到客戶端。
ansible]# grep "remote_tmp" /etc/ansible/ansible.cfg
remote_tmp = $HOME/.ansible/tmp
ansible]# ansible one -a "ls ~/.ansible"
salt-master | success | rc=0 >>
tmp
3.通過ssh執行客戶端上的ansible module
4.執行完畢
5.刪除剛剛推送過去的ansible module
ansible基本命令行模塊:
ansible-doc -s 模塊名 ##查看模塊用法幫助
ansible-doc -l ##查看有哪些可用模塊
1.臨時做小事情或一次性行為可用命令行,大型或經常重復使用的活用play-book
2.命令行三劍客:command(默認),shell(支持管道,變量,),raw(客戶機不能裝python時使用)
3.官方建議用command,shell和raw需要用到的時候再用
command:命令模塊,默認模塊,用于遠程執行命令
-a 'COMMAND'
ansible]# grep -n "module_name" ansible.cfg
97:#module_name = command
ansible all -a 'date'
user:
-a 'name= state={present|absent} system= uid='
# ansible one -m user -a 'name=MySQL uid=306 system=yes group=mysql'
# ansible one -m user -a 'name=mysql shell=/sbin/nologin createhome=no'
group:
-a 'name= gid= state= system='
# ansible one -m group -a 'name=mysql gid=306 system=yes'
cron:修改定時任務
-a 'name="" minute= hour= day= month= weekday= job= user= state='
state狀態
present:增加
absent:刪除,配置name就可移除
# ansible one -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
copy:復制文件到遠程主機
-a 'dest= src= mode= owner= group='
src=:定義本地源文件路徑
dest=:定義遠程目標文件路徑
content=:取代src=,表示直接用此處指定的信息生成目標文件內容;
# ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=/root mode=640'
# ansible all -m copy -a 'content="Hello Ansible\nHi MageEdu" dest=/tmp/test.ansible'
file:設定文件屬性
-a 'path= mode= owner= group= state={directory|link|present|absent} src='
path=:指定文件路徑,可以使用name或dest來替換
創建文件的符號鏈接
src=:指明源文件
path=:指明符號鏈接文件路徑
# ansible all -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'
# ansible all -m file -a "path=/tmp/resolv.conf state=absent"
# ansible salt-master -m file -a 'dest=/tmp/ansible.log owner=lixc group=lixc mode=644
state=touch' #touch:遠程主機創建文件
force:需要在兩種情況下強制創建軟鏈接,
一種是源文件不存在,但之后會建立的情況下;
另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然后創建新的軟鏈,有兩個選項:yes|no
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
src:被鏈接的源文件路徑,只應用于state=link的情況
dest:被鏈接到的路徑,只應用于state=link的情況
state:
directory:創建遞歸文件,如果目錄不存在,就創建目錄,
file:即使文件不存在,也不會被創建
link:創建軟鏈接
hard:創建硬鏈接
touch:如果文件不存在,則創建一個新的文件,如果文件或目錄已存在,則更新其最后修改時間
absent:刪除目錄、文件或者取消鏈接文件
ping:測試指定主機能否連接
yum:安裝程序包
-a 'name= state={present|latest|absent}'
name:指明要安裝的程序包,可以帶上版本號
state=:present,latest表示安裝,absent表示卸載
# ansible one -m yum -a 'name=mysql-server state=latest|installed'
還有一個后臺執行的功能。
-B 30是設置后臺執行時間為30秒,
-P2是沒兩秒鐘報告一次狀態,這個當你的任務要執行很長時間的時候可以用。
# ansible one -m yum -a 'name=apache2 state=installed' -B 30 -P2 >>/dev/null
service:指定運行狀態
-a 'name= state={started|stopped|restarted} enabled='
name=:服務名稱
state=:狀態,取值有started,stopped,restarted
enabled=:是否開機自動啟動,取值為true或者false
shell: ##可支持管道,變量,command模塊不支持,
例:echo "centos" |passwd --stdin centos
# ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"
script: ##將本地腳本復制到遠程主機并運行之;要使用相對路徑指定腳本
-a '/path/to/script'
setup: ##收集遠程主機的facts
每個被管理節點在接收并運行管理命令之前,會將自己主機相關信息,如操作系統版本,ip地址等報告給遠程的ansible主機
Inventory的默認路徑是在/etc/ansible/hosts,分為靜態和動態兩種
靜態:需要手工的把你要管理的主機寫進去。
動態:事先有一個資源管理系統,里面有所有主機信息,用腳本程序把資源管理系統里的信息給拉過來,以json格式呈現
配置靜態Inventory:
ansible]# cat -n /etc/ansible/hosts
1 [alltest:children]
2 salt
3 leihuo
4
5 [salt]
6 salt-master ansible_ssh_user=lixc ansible_ssh_pass=123456
7 10.240.162.112 ansible_connection=paramiko
8
9 [leihuo]
10 lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100
11 10.240.162.11[1:9]:22
第1行,alltest這個組包含倆子組分別是下面的salt,和leihuo
第6行可以設置主機的默認連接用戶,及密碼
第7行可以設置ssh的連接方式,默認是openssh,我這里用paramiko,不用官網推薦用openssh,因為openssh查詢key的時候,很耗時,效率不高。
第10行,可以給主機隨便取個別名,這里的“lixc”就是一個別名,如果ssh默認端口不是22,這里可以
指定特定的端口,
指定ssh端口也可以像第11行,這么指定。
不過以上兩種指定ssh端口方法,只針對我們有少部分的主機是特殊端口,如果我們所有主機都是指定的端口,配置文件里有個選項,改成我們需要的端口就OK了,修改后對全局有效
ansible]# grep "remote_port" /etc/ansible/ansible.cfg
remote_port = 22
第7行和11行,是倆相同的主機,說明同一主機可以在不同的組中。在現實當中就像我一臺服務器即可以裝mysql也可以裝apache是一個道理。
變量:
ansible的變量主要給后面的playbook使用,分為主機變量和組變量
ansible]# cat -n /etc/ansible/hosts
1 [alltest:children]
2 salt
3 leihuo
4
5 [salt]
6 salt-master salt-port=4505 mysql-port=3306
7 10.240.162.112 salt-path=/usr/bin/salt-call
8
9 [leihuo]
10 lixc ansible_ssh_host=192.168.131.203 ansible_ssh_port=21100
11 10.240.162.11[1:9]:22
12 [alltest:vars]
13 ls-path=/bin/ls
14 liss=lisisi
6,7行設置主機變量
12-14行,設置的為alltest這個組的變量。組變量就是,我這個組的成員都可以用
當然我們也可以不在/etc/ansible/hosts里面定義變量,也可以把變量寫進單獨的文件里,不過變量定義的形式就不是誰=誰,這么個形式了。而是遵循yaml語法的key: value的形式。
把變量寫進文件:
ansible]# for dir in {host_vars,group_vars};do ls /etc/ansible/${dir};done
10.240.162.112 salt-master
alltest
文件定義格式:
ansible]# cat /etc/ansible/host_vars/salt-master
---
salt-port: 4505
mysql-port: 3306
ansible目標主機匹配patterns:
匹配所有主機
*或者all
匹配多個組
salt:leihuo
在salt這個組里,但不能在leihuo這個組里的主機
salt:!leihuo
取兩個組的交集
salt:&leihuo
排除某一主機
ansible-playbook site.yaml --limit salt-msater
當然也可以用正則,在/etc/ansible/hosts里面去定義。如
~salt(master|minion)\.li*\.com
標題名稱:ansible--基礎
網站URL:http://m.newbst.com/article16/gpghgg.html
成都網站建設公司_創新互聯,為您提供定制網站、網站策劃、定制開發、標簽優化、微信小程序、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯