Ansible實現自動部署簡述

2021-10-25 21:32:37 字數 3333 閱讀 3648

一、操作過程(以jdk安裝部署過程為例):

1、伺服器準備:為受管伺服器配置公鑰進行連線

安裝命令:

yum -y install epel-release

yum -y install ansible

生成公鑰:

ssh-keygen -t rsa -p ""

複製公鑰到受管伺服器:

ssh-copy-id -i /root/.ssh/id_rsa.pub root@[受管伺服器ip]

ps:linux的ssh-copy-id命令沒有,那是當前系統沒有安裝openssh-clients客戶端元件,你可以通過如下命令安裝:

yum install openssh-clients*

(如果安裝不成功,則需要把原有的openssh相關檔案先全部remove)

systemctl  start sshd.service(重啟ssh服務,不然以後就登不上去啦!)

檢查受管節點連通性:

ansible -m ping all

2、修改受管伺服器host配置:

vim /etc/ansible/hosts

在host中加入並儲存:

[jdk] ---------------- 定義的分組名

受管伺服器ip1

受管伺服器ip2

...3、上傳jdk安裝包到ansible主機的/opt/jdk/files目錄,並在該目錄下新增.bashrc檔案

4、編寫ansible劇本:

vim [playbook所在路徑]/jdkinstall.yml

5、執行ansible劇本:

ansible-playbook [playbook所在路徑]/jdkinstall.yml

二、playbook:可持久化使用

1、核心元素:

hosts:執行的遠端主機列表(可以為ip或定義的分組名)

tasks:所有需要執行的任務,最少需要包括乙個(name: task)元素

vars:內建變數或自定義變數,在playbook中呼叫

templates:使用模板語法的檔案,如配置檔案等

handlers/notity:結合使用,用於特定條件觸發的操作

tags:用於選擇執行某條或某部分任務

2、基本語法:使用yaml語法格式,字尾可為yaml或yml

1.同乙個playbook中可以通過三連破折號(---)區分多個play

2.縮排必須統一,空格與tab不能混用,同樣的縮排代表同樣的級別(建議只使用空格來進行縮排)

3.大小寫敏感

4.k/v的值可同行(用:分割)也可換行,v可以是字串也可是乙個列表

3、元素屬性:

1.每乙個task必須要有乙個name,若沒有定義則action的值會用作輸出資訊中標記特定的task;所有在hosts中定義的主機或主機組都將執行task

2.notify action會在每一次task結束時被動觸發,且只會被觸發一次(如配置發生改動需要重啟服務等)

3.可以在命令列執行playbook時通過- e傳入變數,該變數在整個playbook中都可以被使用,其優先順序比playbook中直接定義的變數優先順序高,格式如下:

ansible-playbook - e "[變數名]=[值]" [playbook檔名]

4.可以在/etc/ansible/hosts檔案中為主機組或單個主機定義變數,組中定義的沒有單個主機中的優先順序高,主機組定義變數格式如下:

[[組名]:vars]

[變數名]=[值]

5.可以將所有變數統一放在乙個yaml檔案中,在要使用的playbook中直接引用該檔案,引用格式如下:

var_files:

-    [變數檔案路徑]

6.可以為任務加上tag,在命令列執行playbook時可以通過-t引數來指定執行或--skip-tags來忽略某任務

三、playbook模板:提供動態配置服務,使用jinja2語言

2、role檔案目錄:每乙個在主yml中使用的role需要包含以下對應的目錄及檔案

(1)tasks目錄:必需,在該資料夾下有乙個main.yml(即上面基本的playbook劇本),當ansible執行到主yml的對應role時會自動讀取該yml檔案並執行

(2)files目錄:非必需,用於存放該role的部署操作中需要使用的檔案資源,檔案操作可以省略檔案路徑(相對路徑),ansible會自動在該目錄下讀取對應檔案

(3)templates目錄:非必需,如果部署操作中有某個配置檔案需要根據不同情況配置不同的引數,則可以將配置檔案放入該資料夾,並為對應引數宣告對應的變數;templates/資料夾下的檔案需要轉為jinja2型別(字尾改為.j2)

(4)vars目錄:非必需,在該資料夾下有乙個main.yml,用於存放本role所使用的所有變數

(5)handlers目錄:非必需,目錄下有乙個main.yml,用於存放handlers

(6)meta目錄:非必需,目錄下有乙個main.yml,用於定義本role的依賴關係(ansible1.3及以後的版本支援)

(7)default目錄:非必需,目錄下有乙個main.yml,用於存放role定義的預設變數

3、在hosts檔案中定義主機組:如果部分主機只執行部分的roles任務,則可以在/etc/ansible/hosts檔案中為其定義單獨的主機組名,並在主yml檔案中配置其對應的roles

六、playbook常用語法:

1、檔案操作:

1.1 建立目錄:file: path=[要建立的目錄路徑] state=directory owner=root group=root

1.2 刪除檔案/目錄: file: path=[要刪除的檔案/目錄路徑] state=absent

1.3 複製檔案/目錄:copy: src=[原始檔/目錄路徑] dest=[目的路徑]

dest如果已存在則會報錯

1.4 獲取遠端主機檔案:fetch: src=[遠端主機上的檔案路徑] dest=[本地儲存路徑]

2、檔案壓縮/解壓:

2.1 檔案解壓:unarchive: src=[源壓縮檔案路徑] dest=[目的路徑]

2.2 檔案壓縮:archive: path=[待壓縮檔案路徑] dest=[目的路徑] format=[打包的型別]

3、遠端執行命令:

3.1 shell命令:shell: [shell命令]

3.2 command命令:格式同上

3.3 yum命令:yum: name=[要安裝的包名] state=[present/installed/lastest/absent/remove]

present/installled表示安裝程式包;lastest表示安裝最新版本;absent/remove表示解除安裝程式包

預設安裝最新版本

DevOps系列Ansible自動部署 一 初識

通過上乙個專題gitlab cicd我們已經介紹了,在dixdevops流程中的自動觸發pipeline過程,下面這乙個專題系列,我們將重點介紹第二個環節,自動部署 進入這個專題系列,我們將重點闡述下圖中第二部分 首先說一下,技術選型,作為乙個程式猿,總是會對新的知識有著一種想要征服的慾望,所以我們...

Ansible自動化部署的運用

ansible,是乙個使用python語言開發的輕量級自動化運維工具。安裝部署過程簡單,學習曲線很平坦。由於業務的關係,需要在集群上部署1000個zabbix agent,借助ansible無疑是最好的選擇了。yum y install ansible 內網情況下,現在ansible及其依賴的rpm...

ansible安裝部署

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