面向 Devops 的 Ansible 面試問題和答案

在本指南中,我們將查看面向 DevOps 工程師的 Ansible 面試問題和答案。 這旨在幫助您準備 Ansible Devops 面試並檢查您的技能。 在過去的一年裡,Ansible 被大量採用。 它現在是最常用的軟件之一,可在從單服務器到多服務器集群的基礎架構上實現軟件供應、配置管理和應用程序部署的自動化。

如果您正在閱讀本指南,我相信您已經了解了 Ansible 的基礎知識 – 它的工作原理、要求以及與 Puppet、Chef 等類似工具相比的優勢……

1) 什麼是 Ansible?

Ansible 是一個用 Python 編寫的開源 IT 自動化工具,現在由 Redhat 提供支持。 它可以調配系統、部署軟件、配置系統並協調高級 IT 任務,例如零停機時間的持續部署。

2) Ansible 相對於其他自動化工具的優勢是什麼?

  • Ansible 是無代理的——只需要在目標機器上啟動 SSH 服務
  • 唯一需要的依賴是 Python。 大多數係統都預裝了 Python
  • 它的開銷低 – 資源利用率最低
  • Ansible 任務使用 YAML 語法編寫 – 易於學習和理解
  • Ansible 是聲明性的 – 與其他主要是程序性的工具不同。 您只需要定義所需的狀態,Ansible 將滿足達到該狀態的要求

3) 哪些選項可用於安裝 Ansible?

  • 從分發包存儲庫安裝
  • 從源代碼構建
  • 使用 Python 包管理工具(如 pip)安裝

4) 解釋 Ansible 是如何工作的?

Ansible 由節點和控制機器組成。
Ansible 將安裝在控制機器上,節點通過 SSH 在該控制機器內進行管理,無需停機。 節點位置由控制機器通過其庫存指定。
Ansible 使用 SSH 協議將模塊部署到節點,這些模塊僅臨時存儲在遠程節點中,它們通過標準輸出上的 JSON 連接與 Ansible 機器進行通信。

5) 描述 Ansible 的一個實際用途?

Ansible 用於管理 IT 基礎設施並將軟件應用程序部署到遠程節點。
Ansible 可用於使用單個命令將許多軟件應用程序部署到許多節點。 假設您想使用單個命令將一個或多個應用程序部署到 100 多個節點,這就是 Ansible 可以幫助我們的地方。
以下是我們如何在所有機器上安裝軟件包 zlib 和 vim:

- hosts: all
vars:
package_list:
- 'zlib'
- 'vim'
tasks:
- name: Install zlib and vim
become: "yes"
package:
name:"{{ package_list }}"
state: present

6) 你如何在 Ansible 中保護密碼?

Ansible 有一個稱為 Vault 的功能,它允許您將敏感數據(例如密碼或密鑰)保存在加密文件中,而不是作為劇本或角色中的明文保存。 它有一個名為 ansible-vault 的命令行工具,用於編輯文件。 與此命令行工具一起使用的常見標誌是 –ask-vault-pass 或 –vault-password-file。 要運行包含 Vault 加密數據文件的 playbook,您必須傳遞兩個標誌之一。

7) 什麼是 Ansible 清單?

Ansible 在 /etc/ansible/hosts 上有一個默認文件,其中包含目標系統的 IP 地址或主機名。
您可以使用 -i <路徑> 命令行選項。 Ansible 從該文件中選擇要處理的一部分主機。 文件格式可以是 INI 或 YAML,默認是類似 INI 的。 在 INI 格式中,括號中的標題是組名,用於對系統進行分類並決定您在什麼時間控制哪些系統以及出於什麼目的。 例如

[db-servers]
192.168.10.4
192.168.10.5

[app-servers]

10.1.5.4 10.1.5.5

主機和組變量可以在清單文件中定義。 將變量分配給稍後將在劇本中使用的主機很容易,例如

[web-servers:vars]
ntp_server=ntp.server.com
proxy=proxy.server.com

8) 什麼是 Ansible Playbook?

Ansible Playbooks 是 Ansible 所有用例的構建塊。 不同的 YAML 標籤分為四種類型,稱為聲明、變量、任務和處理程序。
Playbooks 是一組可以執行多個任務的命令,它們以 YAML 文件格式編寫。

9) 檢查為主機定義的庫存變量的方法是什麼?

使用以下命令檢查庫存:

$ ansible -m debug -a "var=hostvars['hostname']" localhost

10) 什麼是 Ansible 塔?

Ansible Tower 是一種基於 Web 的解決方案,可讓各種 IT 團隊更輕鬆地使用 Ansible。 它旨在成為您所有自動化任務的中心。 該塔最多可免費使用 10 個節點。

11) 什麼是 Ansible 角色?

Ansible 角色是一種捆綁自動化內容並使其可重用的方式。
創建 Ansible 角色的第一步是創建它的目錄結構。 為了創建基本目錄結構,我們使用與 Ansible 捆綁在一起的名為 Ansible Galaxy 的工具。
此命令將創建 linoxide.packer 目錄:

$ ansible-galaxy init linoxide.packer
- linoxide.packer was created successfully

這是在 linoxide.packer 目錄中創建的目錄結構:

$ ls
README.md files meta templates vars
defaults handlers tasks tests

12) 什麼是 Ansible Galaxy?

Ansible Galaxy 是一個與 Ansible 捆綁在一起的工具,用於創建基本目錄結構。 使用 Ansible 命令,Ansible 與配置的客戶端進行通信。 您可以使用通過 ansible-playbook 命令運行的 playbook 自動配置。

13) 描述 Ansible 模塊的類型。

Ansible 中的模塊是冪等的。 從 RESTful 服務的角度來看,為了使操作具有冪等性,客戶端可以通過使用 Ansible 中的模塊來執行相同的結果。 多個相同的請求成為一個請求。
我們也可以在 Ansible 中創建我們自己的模塊。
如果您知道如何用 Python 編寫代碼,您可以在幾個小時內從頭開始創建自己的模塊,而且您不需要具備任何相同的先驗知識。

Ansible 中有兩種不同類型的模塊:

a) 核心模塊
b) 附加模塊

核心模塊:

Ansible 團隊維護這些類型的模塊,並且它們將始終與 Ansible 軟件一起提供。 與“額外”存儲庫中的模塊相比,它們還將對這些模塊給予更高的優先級。

附加模塊:

這些模塊目前與 Ansible 捆綁在一起,但將來可能會單獨提供。 它們也主要由 Ansible 社區維護。

14) 解釋 Ansible 事實

您可以將 ansible 事實視為 ansible 獲取有關主機的信息並將它們存儲在變量中以便於訪問的一種方式。 存儲在預定義變量中的這些信息可用於劇本。 為了生成事實,ansible 運行 setup 模塊。

$ ansible- m setup hostname

執行此語句後,它將打印出該特定主機可用的所有事實的字典。 這是訪問 Ansible_variables 列表的最佳方式。

您可以通過以下方式查看所有事實:

$ ansible all- m setup

因此,如果您只想提取信息的某些部分,那麼您可以使用“設置”模塊,您可以在其中選擇過濾輸出並掌握您需要的事實。

15) 什麼是臨時命令?

Ad-hoc 命令是我們可以用來在我們的節點上執行操作的方式,而無需編寫新的劇本。 如果您願意,假設要重新啟動特定組中的所有主機,您可以編寫新的劇本,或者簡單地運行一次性的臨時命令。

$ ansible servers -a "/sbin/reboot"

16) 如何訪問 Shell 環境變量?

訪問控制機器中的現有變量是通過使用“env”查找插件完成的。
為了 example:
在管理機器上訪問 Home 環境變量的值:

local_home:”{{lookup(‘env’,’HOME’)}}”

17) 編寫一個任務來創建目錄’/tmp/linoxide’

在節點上創建一個新目錄是這樣完成的:

- name: Create a new directory
file:
path: "/tmp/linoxide"
state: directory

18) 我們如何測試基於 Ansible 的項目?

有幾種方法可以測試我們的 Ansible 項目:

手動運行: 我們可以簡單地運行 play 並檢查系統是否處於所需狀態——這是最簡單和最懶惰的方法,但它也可能存在潛在危險,因為在測試環境和生產環境中的結果可能不一樣。

檢查模式: 檢查模式是測試 Ansible 項目的好方法,因為它會報告它會做的所有事情,就好像它在沒有模擬的情況下運行一樣。 因此,您可以輕鬆查看 Ansible 運行行為是否如您所願。 但是檢查模式不運行角色和劇本中使用的腳本和命令。 要運行它們,您必須使用“check_mode: no”禁用特定任務的檢查模式。

斷言: 斷言作為一種測試方法很棒,因為它也類似於您在其他語言(如 Python)中的測試方式,更重要的是,它確保您的系統達到所需狀態,而不是像檢查模式那樣模擬,而是作為實際驗證任務將某些資源更改為所需狀態。

您還可以查看 Ansible 測試工具,例如 Molecule 和 Test Kitchen。

19) 解釋什麼是紅帽 Ansible?

紅帽的 Ansible 和 Ansible Tower 都是端到端的完整自動化平台,能夠提供以下特性和功能:

    • 1. 供應
      2. 部署應用
      3. 編排工作流
      4. 管理 IT 系統
      5. IT系統配置
      6. 網絡
      7. 應用

20) 什麼是持續交付?

持續交付是一種在提交了一些更改後立即交付軟件的實踐。 使用這種方法,我們需要使用一些版本控制系統,比如 GitHub 或 GitLab。 該軟件在現場製作系統中不斷更新。

希望您現在已經為某家公司的 Ansible DevOps 工程師職位面試做好了更好的準備。 這個職位最近很受歡迎,公司一直在尋找新的 DevOps 工程師。 祝所有希望進入 Ansible 和 DevOps 領域的人好運。

另請閱讀:

  • 30 個預期的 DevOps 面試問題和答案