ansible

1.ansible:一個批量的自動化部署工具

clip_image001

工做原理:ansible經過hosts文件和免祕鑰(配置文件用戶名密碼端口號)來實現批量管理主機php

ansible默認併發量-f:5python

Ansible:Ansible的核心程序linux

Host Lnventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載git

Playbooks:YAML格式文件,多個任務定義在一個文件中,使用時能夠統一調用,「劇本」用來定義那些主機須要調用那些模塊來完成的功能.web

Core Modules:Ansible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。vim

Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。安全

Connection Plugins:鏈接插件,Ansible和Host通訊使用服務器

模塊:1.yaml #用來編寫yaml腳本的語言併發

2.paramiko #模擬ssh協議鏈接linux客戶端ssh

3.jinja2         #模板語言

2.Ansible優勢:

●Stupied Simple ,上手簡單,學習曲線平滑

●SSH by default ,安全,無需安裝客戶端

●配置簡單、功能強大、擴展性強

●支持API及自定義模塊,可經過Python輕鬆擴展

●經過Playbooks來定製強大的配置、狀態管理

●提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺 #web界面收費,所以企業中都不用

●冪等性:一種操做重複屢次結果相同

3.ansible安裝

yum install epel-release

yum install ansible

4.ansible配置客戶端(無密碼登陸)

服務端:192.168.88.5

客戶端:192.168.88.10

192.168.88.12

第一種方法:

1.server: ssh-keygen

2.scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

第二種方法:

第一步:[root@localhost ~]# vim /etc/ansible/hosts

在最後一行編寫以下內容:

clip_image002

定義組名:[testhosts]

客戶端用戶名:ansible_ssh_user=root

客戶端密碼: ansible_ssh_pass=123456

第二步:[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image003

將這行的註釋去掉

第三步:測試跟客戶端是否聯通

[root@localhost ~]# ansible 192.168.88.10 -m ping

clip_image004

clip_image005

ansible all -m ping 查看全部客戶端是否連通

ansible testhosts -m ping 查看testhosts組下的因此客戶端是否連通

5.ansible經常使用命令hoc命令行下:

●查看支持的模塊: ansible-doc -l

●查看模塊用法:ansible-doc -s MODEL_NAME

●ansible命令應用基礎

1.ansible <host-pattern> [options]6

-f forks:啓動併發線程數

-m model_name:要使用的模塊

-a args:特有的參數

設置forks數量:a.export ANSIBLE_FORKS=100在終端運行;

b.在配置文件ansible.cfg裏設置forks=100便可;

c.運行命令時增長參數-f 100便可。

補充:線程是最小的調度單位,進程是最小的管理單元,一個進程裏面至少1個線程,一個線程或者多個線程能夠在一個進程裏面

●查看client端是否正常ping通:ansible all -m ping

●查看客戶端信息:ansible webserver -m setup

●copy文件到client端:ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test'

實例:將服務端的liang文件複製到客戶端下

[root@localhost ~]# ansible testhosts -m copy -a 'src=/root/liang dest=/root

clip_image006

●建立test用戶:ansible webserver -m user -a "name=test state=present"

實例

  • clip_image007

● 刪除test用戶:ansible webserver -m user -a "name=test state=absent"

●yum安裝:ansible webserver -m yum -a ‘name=epel-relese state=latest‘

實例:

[root@localhost ~]# ansible testhosts -m yum -a 'name=unzip state=latest'

clip_image008

●中止httpd服務:ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘

●運行腳本:ansible webserver -m script -a ‘/tmp/test.sh‘

●運行命令:ansible webserver -m command -a 'date'

實例:

clip_image009

若是命令模塊使用的過程當中出現告警的解決辦法:

[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image010

clip_image011

將該行的註釋去掉便可。

6.playbook

●tasks

●variables

●templates

●handlers

●roles

yaml介紹(劇本)

  yaml是一個可讀性高的用來表達資料序列的格式,yaml參考了其餘多種語言,包括:xml,c語言,python,perl以及電子郵件格式RFC2822等,ClarkEvans在2001年在首次發表了這種語言。

●yaml的可讀性好

●yaml和腳本語言的交互性好

●yaml使用實現語言的數據類型

●yaml有一個一致的信息模型

●yaml易於實現

●yaml能夠基於流程來處理

●yaml表達能力強,擴展性好

建立的yaml的文件格式:.yml/.yaml

執行:ansible-playbook -C copy.yaml -C模擬執行

ansible-playbook copy.yaml

6.1 基礎劇本

劇本說明:

- hosts: all 指定主機組,能夠理解爲這個最大,頂個寫

tasks: 指定下面一系列的動做,這個是第二,須要有兩個空格

- name: 指定名稱,排行第三,須要有三到四個空格

yum: 模塊名 排行第四,須要有四到五個空格

handlers:指定處理器(觸發器),排行第二,須要與tasks對齊

實例1:

clip_image012

6.2 劇本中使用變量

自定義變量的實現方式

1. 直接寫在yaml文件中

2. 在Inventory file中定義

3. 變量的聲明:

vars:

- 變量名: 變量值

4. 變量的引用:{{ var }}

5. vars和tasks同級,並要寫在tasks前面

實例

clip_image013

clip_image014

6.3 劇本中使用觸發器notify

clip_image015

notify觸發的條件是當notify上邊第一個命令執行成功(copy執行成功),會執行下面相對應的任務(systemctl restart httpd),handlers爲觸發的任務內容,- name必須和notify下的名字相同。handlers必須在最後。

6.4 劇本中使用迭代

clip_image016

迭代中的變量必須用item,固定格式

clip_image017

clip_image018

出現這個告警,進行以下操做便可

[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image019

6.5 劇本中模板templates

clip_image020

將模塊換成template,固定格式

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

clip_image021

[root@localhost ~]# vim /etc/ansible/hosts

clip_image022

7.roles介紹:提升代碼的重用性

什麼狀況下用到roles

假如咱們如今有3個被管理主機,第一個要配置成httpd,第二個要配置成php服務器,第三個要配置成MySQL服務器。咱們如何來定義playbook?

第一個play用到第一個主機上,用來構建httpd,第二個play用到第二個主機上,用來構建php,第三個play用到第三個主機上,用來構建MySQL。這些個play定義在playbook中比較麻煩,未來也不利於模塊化調用,不利於屢次調。好比說後來又加進來一個主機,這個第4個主機既是httpd服務器,又是php服務器,咱們只能寫第4個play,上面寫上安裝httpd和php。這樣playbook中的代碼就重複了。

clip_image023

1)tasks目錄 tasks目錄用於存放ansible執行的任務,tasks目錄下必須存在main.yml文件,main.yml爲主函數,用於導入須要執行的任務。

2)handlers 目錄 handlers常常和notify搭配使用,當文件、進程及返回狀態發生變化時,notify經過handlers作響應的變動。handlers目錄下也須要包含main.yml,包含在在main.yml中的handlers將被執行

3)templates及file目錄 templates目錄及file目錄均用於ansible目錄文件處理,兩個目錄下均用於存放傳輸的文件,但templates目錄下存放的是」.j2」格式的文件模板,文件中能夠寫變量。

4)vars目錄 vars目錄下用於定義當前roles執行時使用的變量,應當存在main.yml文件。

第一步:建立roles文件

[root@localhost ~]# mkdir -pv playbooks/roles/{webservers,dbservers}/{files,handlers,tasks,vars,templates}

[root@localhost ~]# tree playbooks/

clip_image024

第二步:編輯啓動roles文件

[root@localhost playbooks]# vim site.yml #固定格式

clip_image025

roles:寫你定義的角色

site.yml這個啓動文件下能夠添加不一樣的組(hosts)

第四步:啓動

[root@localhost playbooks]# ansible-playbook site.yml

第三步:

編輯tasks下的文件

[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml #固定格式

clip_image026

file文件配置:

[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml

clip_image027

[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /root/playbooks/roles/webservers/files/ #將要複製的文件複製到files中

[root@localhost playbooks]# ansible-playbook site.yml

handlers

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image028

[root@localhost playbooks]# vim roles/webservers/handlers/main.yml

clip_image029

[root@localhost playbooks]# ansible-playbook site.yml

templates

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image030

將要操做的文件複製到templats中。

[root@localhost playbooks]# cp roles/webservers/files/httpd.conf roles/webservers/templates/

[root@localhost playbooks]# vim roles/webservers/templates/httpd.conf

clip_image031

[root@localhost playbooks]# vim /etc/ansible/hosts

clip_image032

[root@localhost playbooks]# ansible-playbook site.yml

vars

[root@localhost playbooks]# vim roles/webservers/vars/main.yml

clip_image033

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image034

相關文章
相關標籤/搜索