天天看點

Linux Ansible的基礎概念

作者:我有我彩

IT自動化的由來

首先目前許多企業的IT運維已經實作了從人工運維到計算機管理的過渡,但是其中有很多的企業的IT運維還隻是處于一種“半自動化”的運維狀态。因為這種IT運維仍然是要等到IT故障出現後再由運維人員采取相關的補救措施。主要表現有以下三個方面即:

  1. IT運維人員過于被動,效率較低
  2. 缺乏一套完整高效的IT運維機制
  3. 缺乏行之有效的IT運維技術工具

IT自動化就是為了解決現在大部分企業IT運維效率低而誕生的。并且IT自動化是IT的優化和其數字化轉型的關鍵點。在如今變化多端的IT環境需要以前所未有的速度進行擴充,而這個目标是需要IT自動化。

IT自動化即是使用特定的軟體來建立可以重複使用的指令和程序,相應的取代或者減少人類操作與IT系統的互動。自動化的軟體中在這些指令,工具和架構的限制範圍内工作,進而在幾乎不需要人工幹預的情況下執行任務。

IT自動化的應用

再理論上,隻要是IT任務,就能實作一定程度上的自動化。是以,自動化可以整合并且應用到任何方面,例如網絡方面的自動化,基礎架構,雲置備和标準操作環境,以及應用部署和配置管理等等。

自動化功能和應用可以進一步延伸到具體的技術(如容器)、方法學(如開發運維)和更廣闊的領域(例如雲,邊緣計算,安全性、測試和監控/警報)。

IT自動化的發展趨勢

未來的自動化發展程度肯定是進一步的提高,更強大的智能功效也會随之建構到這些自動化系統中。它們将拓展為包括更多的IT軟體堆棧組成部分,可以進行想象一下,在裸機恢複、中間件、軟體應用、安全、更新、通知、故障轉移、預測分析以及在決策指定等等方面實作自動化,無需直接的監管和過多的人機互動。

即在企業中,當你的IT部門的員工處于休息期間,自動化系統可以對自動檢測和報告安全風險并進行修補、測試和進行部署。你的系統可以能夠進行自我修複,收集相關的資訊來探查可能的攻擊以及攻擊的來源,并且及時通知相關人員,這一切均不耗費運作時間。對大家而言這些事情都是好消息,而且其中一些功能已經成為現實。

IT自動化的優勢

在資訊大爆發的時代,企業會出現大量的警告資訊,例如資料庫,網絡流量,伺服器等等的資訊,IT運維人員在大量警告資訊中沒有辦法立刻判斷問題的根源在哪裡,這就需要IT運維人員逐一進行配置變更和檢查操作。點裝置數量十分龐大時,其中的工作量巨大可想而知,并且這種變更和檢查操作在IT運維中往往時每天都在進行中,占用了大量的運維資源。是以人工操作變為一定程度的自動化管理是一個重要的IT運維的發展趨勢。

首先,IT運維自動化能夠提高流程的可控性,可以基于業務需求來制定個性化的流程,可以對企業的流程有一個深刻的分析和了解,進而提高和優化相關的流程。

其次,IT自動化能夠提高透明度,自動化可以使使用者能夠一目了然的看見整個流程的節點運作情況,可以有效的提高企業業務的保障能力。

然後就是運維的系統使用了自動化的監控後,通過工具自動化監控對IT運維人員的工作是一種減負的措施,也是一種降低成本的表現。

紅帽Ansible的相關介紹

Ansible的介紹

IT 自動化具有許多用途或用例。當您開始組合各種用例時,就能最終實作 IT 自動化的優勢。或者更進一步,将它們整合到單一的系統中。這就是紅帽Ansible自動化平台的用武之地。

紅帽 Ansible 自動化平台是紅帽為自動化置備、配置、管理和部署而推出的軟體。Ansible 在執行這些活動時利用的是 playbook,即 Ansible 的自動化指令和語言。Playbook 可以描述您要在一個通用 IT 流程中實施的政策或執行的步驟。

Ansible:簡單、友善、容易學習、功能和其他工具相比同樣強大。Ansible有配置檔案,可以支援多線程,不需要寫腳本。

Ansible的基本架構

Linux Ansible的基礎概念

圖 2.2‑1 Ansible的基本結構

  • 核心:ansible
  • 核心子產品(Core Modules):這些都是ansible自帶的子產品,連接配接主機實作操作
  • 擴充子產品(Custom Modules):如果核心子產品不足以完成某種功能,可以添加擴充子產品
  • 插件(Plugins):完成子產品功能的補充
  • 劇本(Playbooks):ansible的任務配置檔案,将多個任務定義在劇本中,由ansible自動執行
  • 連接配接插件(Connectior Plugins):ansible基于連接配接插件連接配接到各個主機上,雖然ansible是使用ssh連接配接到各個主機的,但是它還支援其他的連接配接方法,是以需要有連接配接插件
  • 主機群(Host Inventory):定義ansible管理的主機

Ansible的應用

  • 自動化的部署應用
  • 自動化的管理配置
  • 自動化持續傳遞
  • 自動化(AWS)雲伺服器管理

Ansible的優勢

  1. Ansible融合了衆多老牌運維工具的優點,基本上pubbet和saltsatck能實作的功能,Ansible都可以顯現。
  2. 輕量級,無需在用戶端上安裝Agent,更新時,隻需要在操作機上進行一次更新即可。
  3. Ansible是一個輕量級的工具,Ansible不需要啟動服務,僅僅隻是一個工具,可以輕松實作分布式擴充。
  4. 不需要單獨安裝用戶端,隻是利用現有的SSHD服務(協定)即可;不需要伺服器(server)。
  5. Ansible功能子產品較多,對于自動化的場景支援豐富。
  6. 因為使用python編寫,維護更加簡單。

紅帽Ansible企業級環境的搭建

學習要求

本實驗需要掌握Linux的基本指令,以及Linux作業系統的一些配置檔案,防火牆的配置,以及yum源的配置等等;

由于涉及到Ansible軟體,是以也是需要了解Ansible的相關操作指令,相關的配置檔案,主機清單Inventory等等。

[1]Ansible配置檔案:

(1)Ansible配置檔案/etc/ansible/ansible.cfg(一般保持預設)

(2)Inventory=/etc/ansible/hosts (主機清單配置檔案)

(3)Library=/usr/share/my_modules (庫檔案存放目錄)

(4)Remot_tmp=$HOME/.ansible/tmp (臨時py指令檔案存放的遠端主機目錄)

(5)Local_tmp=$HOME/.ansible/tmp (本機的臨時指令執行目錄)

(6)Forks=5 (預設并發數)

(7)Sudo_user=root (預設sudo使用者)

(8)Ask_sudo_pass=True (每次執行ansible指令是否詢問ssh密碼)

(9)Host_key_checking=False (檢查對應伺服器的host_key,建議取消注釋)

(10)Log_path=/var/log/ansible.log (日志檔案)

[2]Ansible常用的指令:

Ansible常用的指令,直接在指令行中輸入ansible+tab鍵就可以知道了。

Linux Ansible的基礎概念

圖 3.1‑1 Ansible常用的指令

具體Ansible指令雖然有很多,但是用到的比較少,下面着重講常用的ansible指令:

(1)/usr/bin/ansible:主程式,臨時指令執行工具

(2)/usr/bin/ansible-doc:檢視配置文檔,子產品功能檢視工具

(3)/usr/bin/ansible-galaxy:下載下傳和上傳優秀代碼或者Roles子產品的官網平台;是連接配接https: //galaxy.ansible.com下載下傳相應的roles,其中操作有ansible- galaxy list(列出galaxy所有已經安裝的劇本),ansible- galaxy install geerlingguy.redis(安裝劇本),ansible- galaxy remove geerlingguy.redis(删除劇本)

(4)/usr/bin/ansible-playbook:定制自動化任務,編排劇本工具

(5)/usr/bin/ansible-pull:遠端執行指令工具

(6)/usr/bin/ansible-vault:檔案加密工具,功能就是管理加密解密yml檔案,其中的操作有ansible-vault encrypt .yml(加密yml檔案),ansible-vault decrypt .yml(解密yml檔案),ansible-vault view yml(檢視檔案内容),ansible-vault edit .yml(編輯加密檔案),ansible-vault rekey .yml(修改密碼),ansible-vault create .yml(建立yml新檔案)

(7)/usr/bin/ansible-console:基于Console界面與使用者互動的執行工具。

[3]Ansible常用的子產品(會進行一些注解):

  • Command:在遠端主機執行指令時,預設子產品可忽略 -m 的選項,即可以ansible -m command 也可以ansible -m;因為此子產品時不支援$VARNAME < > | &等等,是以需要用Shell 子產品實作。
  • Shell 和 Command相似,用shell 執行指令,其調用的bash可以執行複雜的指令,即使使用shell可能會有失敗,其解決方法:寫到腳本時,copy到遠端執行,再把需要的結果拉回執行指令的機器。即ansible -m shell
  • Script:運作腳本;ansible websrvs -m script -a ‘f1.sh’
  • Copy:從伺服器複制檔案到用戶端;如果目标檔案存在,則預設覆寫,此處指定先備份;
Linux Ansible的基礎概念

圖 3.1‑2 利用copy子產品(1)

可以利用copy這個子產品進行簡單的建立并且寫入文本檔案。

Linux Ansible的基礎概念

圖 3.1‑3 利用copy子產品(2)

Linux Ansible的基礎概念

圖 3.1‑4 利用copy子產品(3)

  • Fetch:從用戶端讀取檔案至伺服器端copy相反,目錄可先tar,例如:ansible websrvs -m fetch -a ‘srv=/root/data/a.sh dest=/data/script’
  • File:設定檔案屬性,例如:ansible websrvs -m file -a ‘path=/root/a.sh owner=wang mode=755’、ansible websrvs -m file -a ‘srv=/data/test.txt dest=/etc/fstab-link state=link’
  • Hostname:管理主機名,例如:ansible node1 -m hostname -a ‘name=websrv’
  • Cron:計劃任務,支援時間minute,hour,day,month,weekday,例如添加計劃任務,删除任務則是:ansible all -m cron -a ‘name=warning state=absent’

圖 3.1‑5 利用cron 子產品

  • Yum:管理包,例如:ansible all -m yum -a ‘name=httpd state=latest’(安裝httpd服務,state可省略)ansible all -m yum -a ‘name=httpd state=absent’(删除httpd)
  • Service:管理服務,例如ansible websrvs -m service -a ‘name=httpd state=stopped(停止服務)/started(開始服務)/reloaded(重新加載服務)/restart(重新開機服務)’
  • User:管理使用者,例如ansible all -m user -a ‘name=user1 comment=”test user” uid=2048 home=/app/user1 group=root’(添加使用者)ansible all -m user -a ‘name = user1 state=absent remove=yes’(删除使用者及家目錄等資料)
  • Group:管理組,例如ansible all -m group -a ‘name=testgroup system=yes’(添加組)ansible all -m group -a ‘name=testgroup state=absent’(删除組)

[4]Ansible Playbook和 ShellScripts 對比

Linux Ansible的基礎概念

圖 3.1‑6 Ansible Playbook和 ShellScripts 對比

[5]Ansible Playbook的工作流程:

Linux Ansible的基礎概念

圖 3.1‑7 Ansible Playbook的工作流程

在Playbook裡面可以寫很多的Play,然後使用者去調用這個Playbook,調用Playbook最終實際上是用Ansible對應的指令來執行的,Ansible去調用裡面的一個個Play;當然了,每個Play裡面可能有自己的任務Task,而且任務與任務之間有先後順序跟腳本是一樣的;然後呢就是任務Task再執行過程中也是會去調用相應的子產品Modules(底層子產品,開發子產品或者是核心子產品等等)或者是插件;然後就是再任務Task執行的時候會去看相應的主機清單,檢視任務Task是針對哪個主機清單,主機清單裡面的哪些主機要執行Playbook裡面定義的任務Task;再執行的時候,還是需要使用SSH服務連接配接到被管控的主機上。

[6]Roles個目錄的作用

/roles/project/:項目名稱,有以下子目錄:

  • Files/:存放有copy或者script子產品等調用的檔案。
  • Templates/:template子產品查找所需要模闆檔案的目錄。
  • Tasks/:定義task,role的基本元素,至少應該包含一個名為main.yml的檔案;其他的檔案需要在此檔案中通過include進行包含。
  • Handler/:至少應該包含一個名為main.yml的檔案;其他的檔案需要在此檔案中通過include進行包含。
  • Var/:定義變量,至少應該包含一個名為main.yml的檔案;其他的檔案需要在此檔案中通過include進行包含。
  • Meta/:定義目前角色的特殊設定及其依賴關系,至少應該包含一個名為main.yml的檔案,其他檔案需要在此檔案中通過include進行包含。(不常用)
  • Default/:設定預設變量時使用此目錄中的main.yml檔案。(不常用)

部署規劃

首先需要安裝虛拟機VMware Workstation,并且需要有CentOS 7和CentOS 6的相關ISO鏡像檔案。本實驗需要安裝四台虛拟機,一個是Ansible的服務端,另外三個均是主機(其中一台主機為CentOS 6的作業系統),Ansible是需要安裝Ansible軟體,四台虛拟機都需要配置相同的IP網段,是以我将Ansible服務端配置192.168.30.7/24,另外三個分别是192.168.30.101/24,192.168.30.102/24,192.168.30.103/24;

在192.168.30.7/24的主機上安裝Ansible軟體。

環境搭建

CentOS 6和CentOS 7的作業系統的安裝,首先在VM中在“檔案”選項中選擇建立虛拟機導向->自定義模式->選擇虛拟機的ISO鏡像檔案路徑->填寫虛拟機的使用者名和密碼->選擇虛拟機檔案的存放路徑->處理器配置,虛拟機的記憶體都是使用預設配置->網絡類型選擇“使用網絡位址轉換(NAT)”->I/O控制器類型、磁盤類型、選擇磁盤、磁盤的空間和指定磁盤檔案的操作都是預設配置即可。

以上操作在CentOS 6和CentOS 7是一樣的,隻是選擇的ISO鏡像檔案是不同,其餘操作均是一樣的。

這裡需要注意,網絡類型選擇“使用網絡位址轉換(NAT)”,您需要檢視自己的“虛拟網絡編輯器”,檢視自己的NAT模式對應的VMnet 8是否是自己的想要的網段,若不是可以對自己配置設定的網段進行修改,或者直接對VMnet 8的子網IP和子網路遮罩進行修改。

Linux Ansible的基礎概念

圖 3.3‑1 環境搭建(1)

Linux Ansible的基礎概念

圖 3.3‑2 環境搭建(2)

配置網絡

在配置網絡中,由于是Linux作業系統,需要對配置檔案進行修改,即修改配置網絡的檔案是/etc/sysconfig/network-scripts/ 裡面對應的網卡,若不知道對應的網卡,可以使用指令ip addr檢視虛拟的網絡資訊。這裡我先修改了主機名即:

表格 3.4‑1 主機配置

作業系統 主機IP/網絡掩碼 主機名
CentOS 7(安裝Ansible) 192.168.30.7/24 Ansible
CentOS 7 192.168.30.101/24 Node1
CentOS 7 192.168.30.102/24 Node2
CentOS 6 192.168.30.103/24 Node3

修改主機名的指令:CentOS 6下修改hotname是vim /etc/sysconfig/network 編輯network檔案修改hostname行(重新開機生效);

CentOS 7修改hostname是hostnamectl set-hostname ansible(node1,node2);後續是修改對應虛拟機的IP位址其指令是vim /etc/sysconfig/network-scripts/ifcfg-ens33編輯該檔案。

Linux Ansible的基礎概念

圖 3.4‑2 /etc/sysconfig/network-scripts/ifcfg-ens33

在檔案修改和末尾添加以下代碼:

BOOTPROTO="static" (修改部分,以下是添加部分)

IPADDR=192.168.30.7

NETMASK=255.255.255.0 (或者PREFIX=24)

GATEWAY=192.168.30.2

DNS1=0.0.0.0

DNS2=114.114.114.114

Linux Ansible的基礎概念

圖 3.4‑3 修改/etc/sysconfig/network-scripts/ifcfg-ens33(1)

Linux Ansible的基礎概念

圖 3.4‑4 修改/etc/sysconfig/network-scripts/ifcfg-ens33(2)

Linux Ansible的基礎概念

圖 3.4‑5 修改/etc/sysconfig/network-scripts/ifcfg-ens33(3)

Linux Ansible的基礎概念

圖 3.4‑6 修改/etc/sysconfig/network-scripts/ifcfg-ens33(4)

其餘的虛拟機的操作一樣,隻是将IPADDR=(對應的IP位址),在CentOS 6中我的虛拟網卡是/etc/sysconfig/network-scripts/ifcfg-eth0;

修改完網絡配置檔案後,需要對網絡服務進行重新開機,如:CentOS 6 中輸入以下指令:service network restart,而CentOS 7中輸入以下指令:systemctl restart network 即可。

配置完網絡後,需要對yum 源進行配置,其yum源的配置檔案是/etc/yum.repos.d/CentOS-Base.repo 首先對原有的CentOS-Base.repo進行複制,其指令:cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

操作,後對該檔案進行編輯,其指令是vim /etc/yum.repos.d/CentOS-Base.repo

,這裡我是配置了一個阿裡雲yum。具體的阿裡雲yum的配置,在CSDN中有寫:這裡就不作研究。

Linux Ansible的基礎概念

圖 3.4‑7 配置yum 源

編輯完yum配置檔案後,對yum服務進行操作:yum clean all,yum repolist

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7(為避免安裝軟體因為外部源未經校驗導緻安裝中斷,可以通過導入校驗密鑰)。這邊我在CentOS 7和CentOS 6作業系統中均安裝了yum源的操作。

在192.168.30.7/24的虛拟機安裝Ansible軟體。

Linux Ansible的基礎概念

圖 3.4‑8 yum repolist

驗證179.168.30.7的虛拟機Ansible是否安裝成功,可以輸入以下指令:ansible –version進行檢驗是否安裝完成。

Linux Ansible的基礎概念

圖 3.4‑9 ansible --version

調試優化

安裝Ansible完成之後,系統預設開機自啟的。是以這裡不用進行開機自啟的操作,但是在Ansible軟體的正式使用中,需要進行一系列的準備操作和調試優化的操作,具體有以下操作:

(1)第一,讓Ansible伺服器端的主機(192.168.30.7)對node1(192.168.30.101),node2(192.168.30.102),node3(192.168.30.103)進行ssh連接配接。當然是要關閉防火牆,友善後續操作的友善。

Linux Ansible的基礎概念

圖 ‑1 ssh 192.168.30.102

Linux Ansible的基礎概念

圖 3.5‑2 ssh 192.168.30.101

Linux Ansible的基礎概念

圖 3.5‑3 ssh 192.168.30.103

(2)第二,配置Ansible的檔案,設定幾個準備常用的組,編輯指令是vim/etc/ansible/hosts,添加以下内容即可。

Linux Ansible的基礎概念

圖 3.5‑4 vim/etc/ansible/hosts

(3)第三,要知道一些配置名稱,執行的指令有:ansible websrvs -m setup | grep "cpu";ansible all -m setup -a 'filter="*distribution*"';其中需要的名稱有:ansible_distribution_major_version(系統的版本);ansible_processor_vcpus(CPU個數)

Linux Ansible的基礎概念

圖 3.5‑5 ansible all -m setup -a 'filter="*distribution*"

繼續閱讀