91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

自動化運維工具ansible詳解

發布時間:2020-07-11 21:16:10 來源:網絡 閱讀:760 作者:ccs_Chan 欄目:建站服務器


 ll  本文導航 

  · ansible的基礎介紹

  · ansible的安裝與配置

  · ansible的簡單應用

  · YAML介紹及語法

  · ansible-playbooks(劇本)



 ll  要求 

掌握ansible基本應用與playbooks。



  ansible的基礎介紹 

1、ansible介紹

ansible是一款基于python開發的自動化運維工具,它結合了puppet、cfengine、func、chef、fabric等工具的優點,實現了批量系統配置、批量部署應用程序及批量執行命令。ansible本身沒有批量部署、執行的能力,真正提供批量部署能力的是ansible所調用的特定模塊,ansible本身也可以看成是一個組件,或者說它是一個框架。


2、ansible的邏輯架構

Ansible:ansible自身組件。

Host Invertory:主機庫,定義被操作主機的列表。是一個配置文件,默認位置:/etc/ansible/hosts

Core Modules:ansible的核心模塊、命令模塊。

Custom Modules:自定義模塊。

Connection Plugins:連接插接,默認基于ssh密鑰連接。

Playbooks:劇本,按照順序執行編排的任務。

自動化運維工具ansible詳解


3、ansible的特性

1)學習曲線不陡峭。

2)no agents:無需在被管控主機上安裝客戶端程序。

3)no server:無服務器端,直接使用ansible相關命令即可。

4)modules any languages:基于模塊工作,可使用任意語言開發模塊。

5)YAML not code:可基于YAML語言自定義劇本(playbooks)按設置順序執行任務。

6)ssh by default:默認基于ssh連接。

7)strong multi-tier solution:可實現多層級指揮。


4、ansible的優點

1)輕量級,無需在客戶端安裝程序,更新時,只需要在安裝有ansible的操作主機上更新即可。

2)批量主機執行任務可寫成腳本,且不需要分發到遠程主機上執行,直接在操作主機上執行即可。

3)python語言開發,易于維護,ruby語法過于復雜。

3)支持sudo。


5、ansible任務執行流程

自動化運維工具ansible詳解


  ansible的安裝與配置 


1、編譯安裝


解決依賴關系并編譯安裝ansible-1.5.4

# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
# tar xf ansible-1.5.4.tar.gz
# cd ansible-1.5.4
# python setup.py build
# python setup.py install
# mkdir /etc/ansible
# cp -r examples/* /etc/ansible


2、rpm包安裝

yum源安裝,要配置epel。

# yum -y install ansible



3、配置文件

ansible的主配置文件:/etc/ansible/ansible.cfg


ansible的主機配置清單文件:/etc/ansible/hosts

自動化運維工具ansible詳解 

組定義:直接在[ ]的下面添加主機名或IP地址

單獨定義主機直接將主機名或IP地址在[ ]上方    



4、配置ssh免密鑰認證

#生成公鑰文件
# ssh-keygen -t rsa -P ''
#將公鑰文件copy至各被控主機上
# scp ~/.ssh/id_rsa.pub root@node1
# scp ~/.ssh/id_rsa.pub root@node2

注意:配置完后,第一次運行需要輸入密碼,后續就不要了。


  ansible的簡單應用 


1、ansible的命令參數:

ansible的語法格式:

# ansible <host-pattern> [-m module_name] [-a args] [options]
-v,–verbose
    #詳細模式,如果命令執行成功,輸出詳細的結果 (-vv –vvv -vvvv)
 
-i PATH,–inventory=PATH                      
    #指定 host 文件的路徑,默認是在 /etc/ansible/hosts
 
-f NUM,–forks=NUM                            
    #NUM 是指定一個整數,默認是 5 ,指定 fork 開啟同步進程的個數。
 
-m NAME,–module-name=NAME                    
    #指定使用的 module 名稱,默認是 command
 
-m DIRECTORY,–module-path=DIRECTORY          
    #指定 module 的目錄來加載 module ,默認是/usr/share/ansible,
 
-a,MODULE_ARGS                                
    #指定 module 模塊的參數
 
-k,–ask-pass                                  
    #提示輸入 ssh 的密碼,而不是使用基于 ssh 的密鑰認證
 
–sudo                                        
    #指定使用 sudo 獲得 root 權限
 
-K,–ask-sudo-pass                            
    #提示輸入 sudo 密碼,與 –sudo 一起使用
 
-u USERNAME,–user=USERNAME                   
    #指定移動端的執行用戶
 
-C,–check                                    
    #測試此命令執行會改變什么內容,不會真正的去執行

2、ansible簡單應用示例

自動化運維工具ansible詳解

all:表示hosts列表中所有主機都執行,包括組

-m command:指定使用modules的名稱為command,實際上默認就是command模塊,所以這里不加command也可以。

-a 'uptime':指定模塊的參數為uptime。

以上即指:在hosts中的所有主機清單中運行uptime命令。

注意:每個節點上任務執行完后都會在控制主機上返回信息;任務成功執行顯示為綠色或者×××,任務執行失敗顯示為淺×××。


ansible-doc命令的使用:

#列出所有模塊清單
# ansible-doc -l
#列出指定模塊的參數
# ansible-doc -s 'modules'

自動化運維工具ansible詳解

自動化運維工具ansible詳解


3、常用模塊使用實例

1) setup

#查看遠程主機上的基本信息
# ansible all -m setup

自動化運維工具ansible詳解


2) ping

#測試遠程主機是否在線,如果在線,則會返回“pong”字符串,乒乓球呢
# ansible all -m ping

自動化運維工具ansible詳解


3) file

## 設置文件的屬性

相關選項如下:

force:需要在兩種情況下強制創建軟鏈接,一種是源文件不存在,但之后會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然后創建新的軟鏈,有兩個選項:yes|no

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

mode:定義文件/目錄的權限

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

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

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

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

dest:被鏈接到的路徑,只應用于state=link的情況

state

       directory:如果目錄不存在,就創建目錄

       file:即使文件不存在,也不會被創建

       link:創建軟鏈接

       hard:創建硬鏈接

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

       absent:刪除目錄、文件或者取消鏈接文件

#給遠程主機上的指定文件創建符號鏈接
# ansible corosync -m file -a 'src=/etc/hosts dest=/tmp/hosts state=link'

自動化運維工具ansible詳解

#查看corosync組的符號鏈接信息
# ansible corosync -m command -a 'ls -l /tmp/hosts'

自動化運維工具ansible詳解

#接下來刪除corosync組上所有主機上的/tmp/hosts符號鏈接
# ansible corosync -m file -a 'path=/tmp/hosts state=absent'

自動化運維工具ansible詳解

#再次查看
# ansible corosync -m command -a 'ls -al /tmp/hosts'

自動化運維工具ansible詳解


4) copy

#復制文件到遠程主機

相關選項如下:

backup:復制一個文件時,先將源文件備份,其中備份文件包含源文件的時間,包含兩個值:yes|no

content:當使用‘src’時,將文件的內容直接設置為指定的值;適用于簡單的值;

dest:必選項。要將源文件復制到的遠程主機的絕對路徑,如果源文件是一個目錄,那么該路徑也必須是個目錄

directory_mode:遞歸設定目錄的權限,默認為系統默認權限

force:如果目標主機包含該文件,但內容不同,如果設置為yes,則強制覆蓋,如果為no,則只有當目標主機的目標位置不存在該文件時,才復制。默認為yes

others:所有的file模塊里的選項都可以在這里使用

src:被復制到遠程主機的本地文件,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸復制。在這種情況下,如果路徑使用“/”來結尾,則只復制目錄里的內容,如果沒有使用“/”來結尾,則包含目錄在內的整個內容全部復制,類似于rsync。



5) shell

#切換到某個shell執行指定的指令,參數與command相同。

與command不同的是,此模塊可以支持命令管道,同時還有另一個模塊也具備此功能:raw


示例:

# 先在本地創建一個SHELL腳本

# vim /tmp/rocketzhang_test.sh
#!/bin/sh
date +%F_%H:%M:%S
#chmod +x /tmp/rocketzhang_test.sh



# 將創建的腳本文件分發到遠程主機

# ansible corosync -m copy -a 'src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755'

# 在遠程主機上執行該腳本

# ansible corosync -m shell -a '/tmp/rocketzhang_test.sh'



6) 更多模塊

其他常用模塊,比如:servicecronyumsynchronize就不一一例舉,可以結合自身的系統環境進行測試。

service:系統服務管理

cron:計劃任務管理

yumyum軟件包安裝管理

synchronize:使用rsync同步文件

user:系統用戶管理

group:系統用戶組管理


  YAML介紹及語法 

1、YAML介紹

YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種語言,另外Ingy dt Net與Oren Ben-Kiki也是這語言的共同設計者。

YAML Ain't Markup Language,即YAML不是XML。不過,在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。

更多的內容及規范參見http://www.yaml.org。


2、YAML特性

YAML的可讀性好

YAML和腳本語言的交互性好

YAML使用實現語言的數據類型

YAML有一個一致的信息模型

YAML易于實現

YAML可以基于流來處理

YAML表達能力強,擴展性好


3、YAML語法

playbook是由一個或多個“play”組成的列表。play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓它們聯同起來按事先編排的機制同唱一臺大戲。下面是一個簡單示例。

- hosts: webnodes

  vars:

    http_port: 80

    max_clients: 256

  remote_user: root

  tasks:

  - name: ensure apache is at the latest version

    yum: name=httpd state=latest

  - name: ensure apache is running

    service: name=httpd state=started

  handlers:

    - name: restart apache

      service: name=httpd state=restarted


YAML文件擴展名通常為.yaml,如example.yaml。

注意,代碼的排版有嚴格要求,縮進為2個字符!序列項的 - 后必須跟一個空格!:后也要跟一個空格!


  ansible-playbooks(劇本) 

playbook是由一個或多個“play”組成的列表。play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓它們聯同起來按事先編排的機制同唱一臺大戲。下面是一個簡單示例。


- hosts: webnodes

  vars:

    http_port: 80

    max_clients: 256

  remote_user: root

  tasks:

  - name: ensure apache is at the latest version

    yum: name=httpd state=latest

  - name: ensure apache is running

    service: name=httpd state=started

  handlers:

    - name: restart apache

      service: name=httpd state=restarted


1、playbook基礎組件


1) Hosts和Users

playbook中的每一個play的目的都是為了讓某個或某些主機以某個指定的用戶身份執行任務。hosts用于指定要執行指定任務的主機,其可以是一個或多個由冒號分隔主機組;remote_user則用于指定遠程主機上的執行任務的用戶。如上面示例中的

-hosts: webnodes

 remote_user: root


不過,remote_user也可用于各task中。也可以通過指定其通過sudo的方式在遠程主機上執行任務,其可用于play全局或某任務;此外,甚至可以在sudo時使用sudo_user指定sudo時切換的用戶。


- hosts: webnodes

remote_user: mageedu

tasks:

- name: test connection

ping:

remote_user: mageedu

sudo: yes


2) 任務列表和action

play的主體部分是task list。task list中的各任務按次序逐個在hosts中指定的所有主機上執行,即在所有主機上完成第一個任務后再開始第二個。在運行自下而下某playbook時,如果中途發生錯誤,所有已執行任務都將回滾,因此,在更正playbook后重新執行一次即可。

task的目的是使用指定的參數執行模塊,而在模塊參數中可以使用變量。模塊執行是冪等的,這意味著多次執行是安全的,因為其結果均一致。

每個task都應該有其name,用于playbook的執行結果輸出,建議其內容盡可能清晰地描述任務執行步驟。如果未提供name,則action的結果將用于輸出。

定義task的可以使用“action: module options”或“module: options”的格式,推薦使用后者以實現向后兼容。如果action一行的內容過多,也中使用在行首使用幾個空白字符進行換行。

tasks:

   - name: make sure apache is running

     service: name=httpd state=running

在眾多模塊中,只有command和shell模塊僅需要給定一個列表而無需使用“key=value”格式,例如:

tasks:

   - name: disable selinux

     command: /sbin/setenforce 0

如果命令或腳本的退出碼不為零,可以使用如下方式替代:

tasks:

  - name: run this command and ignore the result

    shell: /usr/bin/somecommand || /bin/true


或者使用ignore_errors來忽略錯誤信息:

tasks:

  - name: run this command and ignore the result

    shell: /usr/bin/somecommand

    ignore_errors: True


3) handlers

用于當關注的資源發生變化時采取一定的操作。

“notify”這個action可用于在每個play的最后被觸發,這樣可以避免多次有改變發生時每次都執行指定的操作,取而代之,僅在所有的變化發生完成后一次性地執行指定操作。在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作。

- name: template configuration file

  template: src=template.j2 dest=/etc/foo.conf

  notify:

  - restart memcached

  - restart apache


handler是task列表,這些task與前述的task并沒有本質上的不同。

handlers:

    - name: restart memcached

      service:  name=memcached state=restarted

    - name: restart apache

      service: name=apache state=restarted


案例:

heartbeat.yaml

- hosts: hbhosts

 remote_user: root

 tasks:

   - name: ensure heartbeat latest version

     yum: name=heartbeat state=present

   - name: authkeys configure file

     copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys

   - name: authkeys mode 600

     file: path=/etc/ha.d/authkeys mode=600

     notify:

       - restart heartbeat

   - name: ha.cf configure file

     copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf

     notify: 

      - restart heartbeat

 handlers:

  - name: restart heartbeat

   service: name=heartbeat state=restarted






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稻城县| 武功县| 贵德县| 廊坊市| 当涂县| 浮山县| 贺州市| 呼玛县| 南投市| 莆田市| 个旧市| 房山区| 平江县| 营山县| 乳源| 镇江市| 江门市| 无极县| 江西省| 东莞市| 綦江县| 云南省| 长宁县| 合山市| 吉安市| 婺源县| 汤原县| 博湖县| 甘肃省| 台江县| 聊城市| 中宁县| 淄博市| 北宁市| 纳雍县| 合肥市| 玉溪市| 大洼县| 成武县| 白水县| 井陉县|