Ansible自動化運維

来源:https://www.cnblogs.com/tui463/archive/2020/04/28/12754880.html
-Advertisement-
Play Games

Ansible-自動化運維工具 ansible簡介 ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量運行命令等功能。 ansible是基於模塊工作的,本身沒有批量部署能力, ...


Ansible-自動化運維工具

ansible簡介

ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量運行命令等功能。

ansible是基於模塊工作的,本身沒有批量部署能力,真正具有批量部署的是ansible所運行的模塊。

ansible的特性

部署簡單,只需在主控端部署ansible環境,被控端無需做任何操作;

預設使用SSH協議對設備進行管理;

有大量常規運維操作模塊,可實現日常絕大部分操作;

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

有Paramiko,PyYAML,Jinja2三個關鍵模塊;

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

通過Playbooks來定製強大的配置、狀態管理;

可使用任何編程語言寫模塊;

輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;

提供一個功能強大、操作性強的web管理界面和REST API介面--AWX平臺

ansible架構圖

Ansible:ansible核心程式

Host Inventory:記錄由ansible管理的主機信息,包括埠、密碼、ip等

Play books:“劇本”YAML格式文件,多個任務定義在一個文件中,定義主機需要調用哪些模塊來完成的功能

Core Modules:核心模塊,主要操作是通過調用核心模塊來完成管理任務

Custom Modules:自定義模塊,完成核心模塊無法完成的功能,支持多種語言

Plugins:插件,實現記錄日誌,發送郵件等功能

Connection Plugins:連接插件,ansible和host通信使用,預設ssh連接

ansible工作原理

ansible任務執行模式

ansible系統由控制主機對被控節點的操作可分為兩類,即adhoc和playbook

ad-hoc模式(點對點模式)

使用單個模塊,支持批量執行單條命令。ad-hoc命令是一種可以快速輸入的命令,而且不需要保存起來的命令

playbook模式(劇本模式)

是ansible主要管理方式,也是ansible功能強大的關鍵所在。playbook通過多個task集合完成一類功能,如web服務的安裝部署、資料庫伺服器的批量備份等

ansible執行流程

ansible命令執行過程

1、載入自己的配置文件,預設 /etc/ansible/ansible.cfg

2、查找對應的主機配置文件,找到要執行的主機或者組

3、載入自己對應的模塊文件

4、通過ansible將模塊或命令生成對應的臨時python文件,並將該文件傳輸至遠程伺服器

5、對應執行用戶的家目錄的文件

6、給文件+x執行許可權

7、執行並返回結果

8、刪除臨時python文件,sleep 0 退出

ansible常用命令

ansible命令集

/usr/bin/ansible    臨時命令執行工具

/usr/bin/ansible-doc    模塊功能查看工具

/usr/bin/ansible-galaxy    下載/上傳優秀代碼或Roles模塊的官網平臺

/usr/bin/ansible-playbook    定製自動化的任務集編排工具

/usr/bin/ansible-pull    遠程執行命令的工具

/usr/bin/ansible-vault    文件加密工具

/usr/bin/ansible-console    可與用戶交互的命令執行工具

ansible命令使用

命令格式

# ansible  <host-pattern>  [-f forks]  [-m module_name]  [-a args]

-a    模塊的參數

-k    登陸密碼

-c    連接類型使用

-m    執行模塊的名字

-o    壓縮輸出

-R    指定用戶

ansible配置

準備至少兩台機器,一臺主控機器,其餘的為被控機器

ansible安裝

在主控機器上安裝ansible

# yum install -y ansible

生成密鑰對

# ssh-keygen

設置密鑰認證

# ssh-copy-id root@ip

配置主機清單

# vi /etc/ansible/hosts

[web]          ##主機組名

192.168.37.16

192.168.37.17

ansible常用模塊

主機連通性測試

# ansible web -m ping 

192.168.37.16 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.37.17 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

確認主機是連通狀態

command模塊

該模塊可以直接在遠程主機上執行命令,並將結果返回本主機

模塊常用選項

chdir    在執行命令之前,先切換到該目錄

executable    切換shell來執行命令,需要使用命令的絕對路徑

free_form    要執行的Linux指令

creates    一個文件名,當這個文件存在,則該命令不執行

removes     一個文件名,當這個文件不存在,則該命令不執行

copy模塊

該模塊用於將文件複製到遠程主機,同時支持給定內容生成文件和修改許可權等

常用選項

src    被覆制到遠程主機的本地文件

content    用於替換“src”,可以直接指定文件的值

dest    將源文件複製到的遠程主機的絕對路徑

backup    當文件內容發生改變後,再覆蓋之前把源文件備份

directory_mode    遞歸設定目錄的許可權

file模塊

該模塊主要用於設置文件的屬性,如創建文件、創建鏈接文件、刪除文件等

常用選項

group    定義文件目錄的屬組,後面可以加上mode:定義文件目錄的許可權

owner    定義文件目錄的屬主,後面必須加上path:定義文件目錄的路徑

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

dest    被鏈接到的路徑

state    狀態,有以下選項

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

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

   link    創建軟鏈接

   hard    創建硬鏈接

   touch    如果文件不存在,則創建一個新文件,如果文件存在,則更新最後修改時間

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

fetch模塊

該模塊用於從遠程某主機獲取文件到本地

選項

dest    用來存放文件的目錄

src    在遠程拉取的文件

yum模塊

該模塊主要用於軟體的安裝

常用選項

name=    所安裝的包的名字

update_cache    強制更新yum的緩存

conf_file    指定遠程yum安裝時所依賴的配置文件

state=    狀態,有以下選項

   present    安裝

   latest    安裝最新的

   absent    卸載軟體

service模塊

該模塊用於服務程式的管理

常用選項

arguments    命令行提供額外的參數

enabled    設置開機啟動

name=    服務名稱

runlevel    開機啟動的級別

sleep    在重啟服務的過程中,是否等待

state    狀態,有以下選項

   started    啟動服務

   stopped    停止服務

   restarted    重啟服務

   reloaded    重載配置

user模塊

該模塊主要用來管理用戶賬號

常用選項

comment    用戶的描述信息

createhome    是否創建家目錄

force    在使用state=absent時,行為與userdel-force一致

group    指定基本組

groups    指定附加組

home    指定用戶家目錄

name    指定用戶名

non_unique    允許改變非唯一的用戶ID值

password    指定用戶密碼

state    設置賬號狀態

system    當創建一個用戶,設置這個用戶時系統用戶

uid    指定用戶的uid

group模塊

該模塊主要用於添加或刪除組

常用選項

gid=    設置組的gid號

name=    指定組的名稱

state=    指定組的狀態

system=    設置值為yes,表示創建為系統組

Ansible playbook

簡介

playbook是ansible用於配置、部署和管理被控節點的劇本。通過playbook的詳細描述,執行其中的一系列tasks,可以讓遠端主機達到預期的狀態

使用場景

使用playbook可以方便的重用這些代碼,可以移植到不同的機器上面,最大化的利用代碼

格式

playbook由YMAL語言編寫

1、文件的第一行應該以“---”(三個連字元)開始,表明YAML文件的開始

2、在同一行中,#之後的內容表示註釋

3、YAML中的列表元素以“-”開頭然後緊跟著一個空格,後面為元素內容

4、同一個列表中的元素應該保持相同的縮進,否則會被當做錯誤處理

5、playbook中hosts,variables,roles,tasks等對象的表示方法都是鍵值中間以“:”分隔表示,“:”後面還要增加一個空格

文件名稱應該以 .yml 結尾,由三個部分組成

host部分:使用hosts指示使用哪個主機或主機組來運行下麵的tasks,每個playbook都必須指定hosts,hosts也可以使用通配符格式

remote_user:指定遠端主機中的哪個用戶來登錄遠端系統,在遠端系統執行tasks的用戶,可以任意指定,也可以使用sudo,但是用戶必須要有執行相應task的許可權

tasks:指定遠端主機將要執行的一系列動作。tasks的核心為ansible的模塊,tasks包含name和要執行的模塊

核心元素

playbook的核心元素

Hosts:主機組

Tasks:任務列表

Variables:變數,設置方法有四種

Templates:包含了模板語法的文本文件

Handlers:由特定條件觸發的任務

playbook實戰-nginx安裝

先在主控機器上安裝並編譯好nginx

進入ansible配置文件目錄

# cd /etc/ansible

創建目錄

# mkdir nginx.install

# cd nginx.install

# mkdir -p roles/{common.install}/{handlers,files,meta,tasks,templates,vars}

## roles目錄下由兩個角色,common為一些準備操作,install為安裝nginx的操作。每個角色下又有幾個目錄,handlers下麵是當發生改變時要執行的操作,通常用在配置文件發生改變,重啟服務。files為安裝時用到的一些文件,meta為說明信息,說明角色依賴等信息,tasks裡面是核心的配置文件,templates通常存一些配置文件,啟動腳本等模板文件,vars下為定義的變數

 

將nginx目錄打包,放到/etc/ansible/nginx_install/roles/install/files/下麵並重命名

# mv /etc/local/sbin/nginx  /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz

啟動腳本和配置文件也移動到/etc/ansible/nginx_install/roles/install/templates/下麵

 

定義依賴包

# cd /ect/ansible/nginx.install/roles

# vi common/tasks/main.yml

- name: Install initializtion require software
  yum: name={{ item }} state=installed
  with_items:
  - zlib-devel
  - pcre-devel

 

定義變數

# vi install/vars/main.yml

nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx

 

拷貝文件

# vi install/tasks/copy.yml

- name: Copy Nginx Software
  copy: src=nginx dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
  shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

 

建立用戶,啟動服務,刪除壓縮包

# vi install/tasks/install.yml

- name: Create Nginx User
  user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Create Nginx Service
  shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service
  shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
  shell: rm -rf /tmp/nginx.tar.gz

 

調用文件

# vi install/tasks/main.yml

- include: copy.yml
- include: install.yml

 

定義入口文件

# vi /etc/ansible/nginx_install/install.yml

---
- hosts: testhost
  remote_user: root
  gather_facts: Ture
  roles:
  - common
  - install

 

執行

# ansible-playbook /etc/ansible/nginx_install/install.yml

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天發現線上試跑期的一個程式掛了,平時都跑的好好的,查了下日誌是因為昨天運營跑了一家美妝top級淘品牌店,會員量近千萬,一下子就把128G的記憶體給爆了,當時並行跑了二個任務,沒轍先速寫一段代碼限流,後面再做進一步優化。 一: 背景 1. 背景介紹 因為是自己寫的代碼,所以我知道問題出現在哪裡,如果大 ...
  • 1. 什麼是Expression Web Expression Studio是微軟在2007年推出的一套針對設計師的套件,其中包含專業的設計工具和新技術,可以彈性且自由地將設計方案轉為實際——無論設計的是標準的網站、擁有豐富用戶經驗的桌面應用,或是管理數字資產和內容。它包含以下部分: Express ...
  • errorloc和errorloc302都是同樣的效果,都是以臨時重定向到指定的url上;這裡還需要註意一點,這兩種方式都是跳轉前請求的方法是什麼,跳轉對應url也是同樣的方法;這樣一來對於其他非GET方法請求出現403錯誤碼的時候,對應的錯誤頁就無法正常處理(通常只允許GET方法去請求別的URL... ...
  • 九、case結構條件句應用實踐 (一)case語法結構 case結構條件句相當於多分支if條件語句,但是它比這些條件句看起來更規範工整,常被用於實現系統服務腳本等應用場景中。 case語句的語法結構: (二)實例,case應用: (三)實例,不同的分支字體顏色不同: 當用戶輸入對應的數字選擇水果的時 ...
  • 八、函數知識與實踐 (一)shell函數語法 1、函數的表示方式 | 第一種語法 | 第二種語法 | 第三種語法 | | | | | | function 函數名(){ } | function 函數名 {} | 函數名() { } | 2、實例:函數的寫法 3、實例:檢測web網站是否正常 wge ...
  • 七、if結構條件句知識與實踐 (一)if條件句單雙分支語法 (二)if條件句多分支語句 1、語句的結構 2、實例:判斷目錄是否存在 3、實例:判斷伺服器記憶體大小 開發shell腳本判斷記憶體是否充足,如果小於100,提示不足,如果大於100提示充足。 [root@centos6 kvm3 script ...
  • 六、shell腳本的條件測試與比較 (一)條件表達式的常見語法 1、條件表達式6種寫法(if,while) 語法1:test 語法2:[ ] 中括弧兩端必須要有空格 語法3:[[]] 兩端必須要有空格 語法4:((測試表達式)) 兩端必不需要空格 語法5:(命令表達式) 語法6: 實際應用展示 ①[ ...
  • Ansible playbook Vault 加密詳解與使用案例 主機規劃 添加用戶賬號 說明: 1、 運維人員使用的登錄賬號; 2、 所有的業務都放在 /app/ 下「yun用戶的家目錄」,避免業務數據亂放; 3、 該用戶也被 ansible 使用,因為幾乎所有的生產環境都是禁止 root 遠程登 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...