ansible--基礎(chǔ)

馬哥出品 ansible中文文檔:http://www.ansible.com.cn/index.html

創(chuàng)新互聯(lián)建站從2013年開始,先為欒城等服務(wù)建站,欒城等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為欒城企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

ansible介紹:

ansible是個什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT運維管理工具。這個工具的目標(biāo)有這么幾項:讓我們自動化部署APP;自動化管理配置項;自動化的持續(xù)交付;自動化的(AWS)云服務(wù)管理?;赑ython開發(fā),可實現(xiàn)對多臺服務(wù)器進行批量配置、程序的部署及指令的運行。大大減少了在運維工程中的工作量。

ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:

(1)、連接插件connection plugins:負(fù)責(zé)和被監(jiān)控端實現(xiàn)通信;

(2)、host inventory:指定操作的主機,是一個配置文件里面定義監(jiān)控的主機;

(3)、各種模塊核心模塊、command模塊、自定義模塊;

(4)、借助于插件完成記錄日志郵件等功能;

(5)、playbook:劇本執(zhí)行多個任務(wù)時,非必需可以讓節(jié)點一次性運行多個任務(wù)。

ansible特點:

 1.簡單,ansible自然的自動化語言與允許運維人員,開發(fā)者,和IT管理人員在很短的時間內(nèi)完成自動化項目。

 2.無代理,默認(rèn)使用SSH而不需要客戶端。避免了額外的端口開啟,提高安全性,避免不必要的管理,減少CPU的使用

 3.干的活多,ansible能干自動完成軟件部署,配置管理,流程化管理,和cloud provisioning。

ansible安裝:

由于ansible是用python開發(fā)的,安裝過程中依賴眾多python模塊,這里建議yum安裝ansible,想要更新版本的可下載源碼編譯安裝,

yum install ansible -y

yum安裝ansible的默認(rèn)配置文件路徑,ansible.cfg是ansible的主配置文件,

ansible]# ls /etc/ansible/

ansible.cfg   hosts  roles

hosts是默認(rèn)的hostfile路徑,可配置DNS域名,ip。

通過ssh key方式連接遠(yuǎn)端客戶機,省去密碼環(huán)節(jié)

ssh-keygen -t rsa -P ''

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.137.130

注意這個地方是有個坑的,由于ansible執(zhí)行的時候需要把臨時模塊拷貝到客戶端,而默認(rèn)的拷貝方式是通過sftp來的方式拷貝的,如果你的客戶端沒有裝sftp,那么執(zhí)行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執(zhí)行客戶端上的ansible module

    4.執(zhí)行完畢

    5.刪除剛剛推送過去的ansible module

ansible基本命令行模塊:

ansible-doc -s 模塊名     ##查看模塊用法幫助

ansible-doc -l            ##查看有哪些可用模塊

1.臨時做小事情或一次性行為可用命令行,大型或經(jīng)常重復(fù)使用的活用play-book

2.命令行三劍客:command(默認(rèn)),shell(支持管道,變量,),raw(客戶機不能裝python時使用)

3.官方建議用command,shell和raw需要用到的時候再用

command:命令模塊,默認(rèn)模塊,用于遠(yuǎn)程執(zhí)行命令

-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:修改定時任務(wù)

-a 'name="" minute= hour= day= month= weekday= job= user= state='

state狀態(tài)

present:增加

absent:刪除,配置name就可移除

# ansible one -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'

copy:復(fù)制文件到遠(yuǎn)程主機

-a 'dest= src= mode= owner= group='

src=:定義本地源文件路徑

dest=:定義遠(yuǎn)程目標(biāo)文件路徑

content=:取代src=,表示直接用此處指定的信息生成目標(biāo)文件內(nèi)容;

# 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:設(shè)定文件屬性

-a 'path= mode= owner= group= state={directory|link|present|absent} src='

path=:指定文件路徑,可以使用name或dest來替換

創(chuàng)建文件的符號鏈接

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:遠(yuǎn)程主機創(chuàng)建文件

force:需要在兩種情況下強制創(chuàng)建軟鏈接,

一種是源文件不存在,但之后會建立的情況下;

另一種是目標(biāo)軟鏈接已存在,需要先取消之前的軟鏈,然后創(chuàng)建新的軟鏈,有兩個選項:yes|no

group:定義文件/目錄的屬組

mode:定義文件/目錄的權(quán)限

owner:定義文件/目錄的屬主

path:必選項,定義文件/目錄的路徑

recurse:遞歸設(shè)置文件的屬性,只對目錄有效

src:被鏈接的源文件路徑,只應(yīng)用于state=link的情況

dest:被鏈接到的路徑,只應(yīng)用于state=link的情況

state:

    directory:創(chuàng)建遞歸文件,如果目錄不存在,就創(chuàng)建目錄,

    file:即使文件不存在,也不會被創(chuàng)建

    link:創(chuàng)建軟鏈接

    hard:創(chuàng)建硬鏈接

    touch:如果文件不存在,則創(chuàng)建一個新的文件,如果文件或目錄已存在,則更新其最后修改時間

    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'

還有一個后臺執(zhí)行的功能。

-B 30是設(shè)置后臺執(zhí)行時間為30秒,

-P2是沒兩秒鐘報告一次狀態(tài),這個當(dāng)你的任務(wù)要執(zhí)行很長時間的時候可以用。

# ansible one -m yum -a 'name=apache2 state=installed'  -B 30 -P2 >>/dev/null

service:指定運行狀態(tài)

-a 'name= state={started|stopped|restarted} enabled='

name=:服務(wù)名稱

state=:狀態(tài),取值有started,stopped,restarted

enabled=:是否開機自動啟動,取值為true或者false

shell: ##可支持管道,變量,command模塊不支持,

例:echo "centos" |passwd --stdin centos

# ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"

script:  ##將本地腳本復(fù)制到遠(yuǎn)程主機并運行之;要使用相對路徑指定腳本

-a '/path/to/script'

setup:  ##收集遠(yuǎn)程主機的facts

每個被管理節(jié)點在接收并運行管理命令之前,會將自己主機相關(guān)信息,如操作系統(tǒng)版本,ip地址等報告給遠(yuǎn)程的ansible主機

Inventory的默認(rèn)路徑是在/etc/ansible/hosts,分為靜態(tài)和動態(tài)兩種

靜態(tài):需要手工的把你要管理的主機寫進去。

動態(tài):事先有一個資源管理系統(tǒng),里面有所有主機信息,用腳本程序把資源管理系統(tǒng)里的信息給拉過來,以json格式呈現(xiàn)

配置靜態(tài)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行可以設(shè)置主機的默認(rèn)連接用戶,及密碼

第7行可以設(shè)置ssh的連接方式,默認(rèn)是openssh,我這里用paramiko,不用官網(wǎng)推薦用openssh,因為openssh查詢key的時候,很耗時,效率不高。

第10行,可以給主機隨便取個別名,這里的“l(fā)ixc”就是一個別名,如果ssh默認(rèn)端口不是22,這里可以

指定特定的端口,

指定ssh端口也可以像第11行,這么指定。

不過以上兩種指定ssh端口方法,只針對我們有少部分的主機是特殊端口,如果我們所有主機都是指定的端口,配置文件里有個選項,改成我們需要的端口就OK了,修改后對全局有效

  

ansible]# grep "remote_port" /etc/ansible/ansible.cfg 

remote_port    = 22

   

第7行和11行,是倆相同的主機,說明同一主機可以在不同的組中。在現(xiàn)實當(dāng)中就像我一臺服務(wù)器即可以裝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行設(shè)置主機變量

12-14行,設(shè)置的為alltest這個組的變量。組變量就是,我這個組的成員都可以用

當(dāng)然我們也可以不在/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目標(biāo)主機匹配patterns:

匹配所有主機

*或者all

匹配多個組

salt:leihuo

在salt這個組里,但不能在leihuo這個組里的主機

salt:!leihuo

取兩個組的交集

salt:&leihuo

排除某一主機

ansible-playbook site.yaml --limit salt-msater

當(dāng)然也可以用正則,在/etc/ansible/hosts里面去定義。如

~salt(master|minion)\.li*\.com

標(biāo)題名稱:ansible--基礎(chǔ)
網(wǎng)站URL:http://muchs.cn/article16/gpghgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站網(wǎng)站策劃、定制開發(fā)標(biāo)簽優(yōu)化、微信小程序、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)