本文是紅帽RHCE考題的總結,個別題目寫了多種步驟。 一、安裝和配置ansible 題目: 按照下方所述,在控制節點 bastion.lab.example.com 上安裝和配置 Ansible: 安裝所需的軟體包 創建名為/home/devops/ansible/inventory 的靜態清單文件 ...
本文是紅帽RHCE考題的總結,個別題目寫了多種步驟。
一、安裝和配置ansible
題目:
按照下方所述,在控制節點 bastion.lab.example.com 上安裝和配置 Ansible:
- 安裝所需的軟體包
- 創建名為/home/devops/ansible/inventory 的靜態清單文件,以滿足以下要求:
- servera 是 dev 主機組的成員
- serverb 是 test 主機組的成員
- serverc 和 serverd 是 prod 主機組的成員
- workstation 是 balancers 主機組的成員
- prod 組是 webservers 主機組的成員
- 創建名為/home/devops/ansible/ansible.cfg 的配置文件,以滿足以下要求:
- 主機清單文件為/home/devops/ansible/inventory
- playbook 中使用的角色的位置包括/home/devops/ansible/roles
步驟:
1、普通用戶登錄控制節點
2、使用sudo安裝ansible
[devops@bastion ~]$ sudo yum install -y ansible
3、創建名為/home/devops/ansible/inventory 的靜態清單文件。
[devops@bastion ~]$ mkdir -p ansible/roles && cd ansible/
[devops@bastion ansible]$ vim inventory
[dev]
servera
[test]
serverb
[prod]
serverc
serverd
[balancers]
workstation
[webservers:children]
prod
4、創建名為/home/devops/ansible/ansible.cfg 的配置文件(從預設配置文件/etc/ansible/ansible.cfg複製過來一份直接修改)
[devops@bastion ansible]$ vim ansible.cfg
[defaults]
inventory = /home/devops/ansible/inventory
roles_path = /home/devops/ansible/roles
remote_user = devops
host_key_checking = no
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
5、驗證ansible的配置文件路徑和查看主機清單,正確則此題做完。
[devops@bastion ansible]$ ansible --version
[devops@bastion ansible]$ ansible-inventory --graph
二、創建和運行ansible臨時命令
題目:
作為系統管理員,您需要在受管節點上安裝軟體。
請按照下方所述,創建一個名為/home/devops/ansible/adhoc.sh 的 shell 腳本,該腳本將使用Ansible 臨時命令在各個受管節點上安裝 yum 存儲庫。
存儲庫 1:
存儲庫的名稱為:EX294_BASE
描述為:EX294 base software
基礎 URL 為:http://content.example.com/rhel8.0/x86_64/dvd/BaseOS
GPG 簽名檢查為:啟用狀態
GPG 密鑰 URL 為:http://content.example.com/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
存儲庫狀態為:啟用狀態
存儲庫 2:
存儲庫的名稱為:EX294_STREAM
描述為:EX294 stream software
基礎 URL 為:http://content.example.com/rhel8.0/x86_64/dvd/AppStream
GPG 簽名檢查為啟用狀態
GPG 密鑰 URL 為:http://content.example.com/rhel8.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
存儲庫狀態為:啟用狀態
步驟:
1、創建一個名為/home/devops/ansible/adhoc.sh 的 shell 腳本。(此題需要用到yum_repository模塊,使用ansible臨時命令的-m參數指定模塊,使用-a參數指定模塊參數,使用ansible-doc查看模塊的使用方法,把命令模板直接複製到文件中,無需死記命令)
(1)yum_repository模塊命令記不住。可以使用ansible-doc -l命令列出所以模塊,過濾yum即可。
(2)然後使用ansible手冊詳細查看ansible-doc yum_repository
直接翻到後面查看實例:
(3)編寫配置文件
2、給腳本執行許可權,運行腳本測試
[devops@bastion ansible]$ chmod +x adhoc.sh
[devops@bastion ansible]$ ./adhoc.sh
三、安裝軟體包
題目:
創建一個名為/home/devops/ansible/packages.yml 的 playbook:
-
將 php 和 mariadb 軟體包安裝到 dev、test 和 prod 主機組中的主機上。(servera——serverd)
-
將 RPM Development Tools 軟體包組安裝到 dev 主機組中的主機上。(servera)
-
將 dev 主機組中主機上的所有軟體包更新為最新版本。(servera)
步驟:
1、此題需要用到yum模塊,只需要用到它的兩個參數name:包名,state:latest安裝最新包。此題先將hosts中的所有主機寫上,然後在tasks中寫入when語句,按條件執行。
註意最後一個任務的yum參數有state:latest,前面兩個任務也可以加上這個參數。when語句用到的兩個變數,inventory_hostname指的是所有的主機,groups[‘dev’]指的是所有的主機和組中的dev組的主機。所以此題的when語句就表示所有主機中在dev組的主機執行任務。
四、使用RHEL系統角色
題目:
安裝 RHEL 系統角色軟體包,並創建名稱為/home/devops/ansible/timesync.yml,符合以下條件的 playbook:
-
在所有受管節點上運行
-
使用 timesync 角色
-
配置該角色,以使用當前有效的 NTP 提供商
-
配置該角色,以使用時間伺服器172.25.250.254
-
配置該角色,以啟用 iburst 參數
步驟:
1、安裝rhel系統角色軟體包。
[devops@bastion ansible]$ sudo yum install -y rhel-system-roles
2、將下載的角色中的timesync角色複製到ansible/roles目錄中;並改名為timesync
3、查看所有已安裝的角色
4、查看timesync角色的使用方法。
5、創建名稱為/home/devops/ansible/timesync.yml的playbook
五、使用ansible galaxy安裝角色
題目:
使用Ansible Galaxy和要求文件/home/devops/ansible/roles/requirements.yml。
從以下 URL下載角色並安裝到/home/devops/ansible/roles:
- http://materials.example.com/laoma/haproxy.tar
此角色的名稱應當為 balancer
- http://materials.example.com/laoma/phpinfo.tar
此角色的名稱應當為 phpinfo
步驟:
1、創建requirements.yml文件
2、運行安裝角色
[devops@bastion ansible]$ ansible-galaxy install -r requirements.yml
六、創建和使用角色
題目:
(1)根據下列要求,在/home/devops/ansible/roles 中創建名為 apache 的角色:
-
httpd 軟體包已安裝,設為在系統啟動時啟用並啟動(yum模塊,service模塊)
-
防火牆已啟用並正在運行,並使用允許訪問 Web 伺服器的規則(firewalld模塊)
-
模板文件 用於創建文件/var/www/html/index.html具有以下輸出內容:(template模塊)
Welcome to HOSTNAME on IPADDRESS 。
HOSTNAME 是受管節點的完全限定功能變數名稱,IPADDRESS 則是受管節點的 IP 地址。
(2)按照下方所屬,創建一個使用此角色的 playbook /home/devops/ansible/newrole.yml
- 該 playbook 在 webservers 主機組中的主機上運行
步驟:
1、創建apache角色
[devops@bastion ansible]$ ansible-galaxy init apache --init-path=roles
也可以先進入roles目錄再創建,就不用指定--init-path參數了。
2、進入apache角色的tasks目錄,根據題目的第一部分需求編輯main.yml文件。
3、在templates目錄中按照需求編輯html.j2文件。
HOSTNAME和IPADDRESS 所指定的功能變數名稱和ip變數可以根據 Ansible 主機名 -m setup | grep ***查看
4、根據題目的要求編輯/home/devops/ansible/newrole.yml
七、從ansible galaxy使用角色
題目:
根據下列要求,創建一個名為/home/devops/ansible/roles.yml 的 playbook:
(1)playbook 中包含一個 play,該 play 在 balancers 主機組中的主機上運行並將使用 balancer 角色。
-
此角色配置一項服務,以在 webservers 主機組中的主機之間平衡 Web 伺服器請求的負載。
-
瀏覽到 balancers 主機組中的主機(例如http://workstation.lab.example.com)將生成以下輸出:
Welcom to serverc.lab.example.com on 172.25.250.8
- 重新載入瀏覽器將從另一 Web 伺服器生成輸出:Welcom to serverd.lab.example.com on 172.25.250.9
(2)playbook 中包含另外一個 play,該 play 在 webservers 主機組中的主機上運行並將使用 phpinfo 角色。
-
通過 URL/hello.php 瀏覽到 webservers 主機組中的主機將生成以下輸出:Hello PHP World from FQDN。其中,FQDN 是主機的完全限定名稱。
-
例如,瀏覽到 http://serverc.lab.example.com/hello.php,會生成輸出:Hello PHP World from serverc.lab.example.com另外還有 PHP 配置的各種詳細信息,如安裝的 PHP 版本等。
-
同樣,瀏覽到 http://serverd.lab.example.com/hello.php,會生成輸出:Hello PHP World from serverd.lab.example.com另外還有 PHP 配置的各種詳細信息,如安裝的 PHP 版本等。
步驟:
1、在第五題的時候下載了兩個角色,分別是tar和phpinfo.tar。此題直接調用這兩個角色即可。裡面的負載均衡配置都預設配置好了。
2、創建並配置/home/devops/ansible/roles.yml文件。
八、創建和使用邏輯捲
題目:
創建一個名為/home/devops/ansible/lv.yml 的 playbook,它將在所有受管節點上運行以執行下列任務。
創建符合以下要求的邏輯捲:
-
在 research 捲組中創建邏輯捲
-
邏輯捲名稱為 data
-
邏輯捲大小為 6000MiB
-
使用 ext4 文件系統格式化邏輯捲
-
如果無法創建請求的邏輯捲大小,應顯示錯誤信息:Could not create logical volume of that size
並且應改為使用大小 800MiB。
- 如果捲組 research 不存在,應顯示錯誤信息:Volume group done not exist
- 不要以任何方式掛載邏輯捲
步驟:
1、本題需要使用ansible block的錯誤處理。
-
block: 定義要運行的主要任務
-
rescue: 定義要在block子句中定義的任務失敗時運行的任務
-
always: 定義始終都獨立運行的任務,不論block和rescue子句中定義的任務是成功還是失敗
2、根據題目要求編輯/home/devops/ansible/lv.yml文件。
或:方法二:(推薦)
九、生成主機文件
題目:
-
將一個初始模板文件從http://materials.example.com/laoma/hosts.j2下載到/home/devops/ansible
-
完成該模板,以便用它生成以下文件,針對每個清單主機包含一行內容,其格式與/etc/hosts 相同。
-
創建名為/home/devops/ansible/hosts.yml 的 playbook,它將使用此模板在 dev 主機組中的主機上生成文件/etc/myhosts。
-
該 playbook 運行後,dev 主機組中主機上的文件/etc/myhosts 應針對每個受管主機包含一行內容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.9 workstation.lab.example.com workstation
172.25.250.10 servera.lab.example.com servera
172.25.250.11 serverb.lab.example.com serverb
172.25.250.12 serverc.lab.example.com serverc
172.25.250.13 serverd.lab.example.com serverd
註:清單主機名稱的顯示順序不重要。
步驟:
1、首先下載並修改模板文件
2、根據題目要求編輯/home/devops/ansible/hosts.yml文件
十、修改文件內容
題目:
按照下方所述,創建一個名為/home/devops/ansible/issue.yml 的 playbook:
-
該 playbook 將在所有清單主機上運行。
-
該 playbook 會將/etc/issue 的內容替換為下方所示的一行文本:
- 在 dev 主機組中的主機上,這行文本顯示為:Development
- 在 test 主機組中的主機上,這行文本顯示為:Test
- 在 prod 主機組中的主機上,這行文本顯示為:Production
步驟:
1、根據題目要求創建/home/devops/ansible/issue.yml文件。
十一、創建web內容目錄
題目:
按照下方所述,創建一個名為/home/devops/ansible/webcontent.yml 的playbook:
-
該 playbook 在 dev 主機組中的受管節點上運行。
-
創建符合下列要求的目錄/webdev:
所有者為 webdev 組 ;
具有常規許可權:
owner=read+write+execute,
group=read+write+execute,
other=read+execute
具有特殊許可權:設置組 ID
-
用符號鏈接將/var/www/html/webdev 鏈接到/webdev
-
創建文件/webdev/index.html,其中包含如下所示的單行文件:Development
-
在 dev 主機組中主機上瀏覽此目錄(例如 http://servera.lab.example.com/webdev/)將生成以下輸出:Development
步驟:
1、根據此題中最後一句話得知,需要在dev組的主機上部署apache伺服器。目前已經有了apche角色,直接部署即可。
2、根據要求創建編輯/home/devops/ansible/webcontent.yml文件。
十二、生成硬體報告
題目:
-
創建一個名為/home/devops/ansible/hwreport.yml 的 playbook,它將在所有受管節點上生成含有以下信息的輸出文件/root/hwreport.txt:
- 清單主機名稱
- 以 MB 表示的總記憶體大小
- BIOS 版本
- 磁碟設備 vda 的大小
- 磁碟設備 vdb 的大小
- 輸出文件中的每一行都是 key=value 對
-
您的 playbook 應當
- 從 http://materials.example.com/laoma/hwreport.empty 下載文件,並將它保存為/root/hwreport.txt
- 使用正確的值更改/root/hwreport.txt
- 如果硬體項不存在,相關的值應設為 NONE
步驟:
1、首先根據提供的鏈接下載txt文件。
2、Playbook需要用到一些內置變數。
清單主機名稱:inventory_hostname
記憶體MB顯示:ansible_memtotal_mb
BIOS:ansible_bios_version
DISK_SIZE_VDA:ansible_devices.vda.size
DISK_SIZE_VDB:ansible_devices.vdb.size
通過ansible localhost -m setup
命令可以查看到這些變數。
3、根據題目要求編寫/home/devops/ansible/hwreport.yml文件
方法二(推薦):
十三、創建密碼庫
題目:
按照下方所述,創建一個 Ansible 庫來存儲用戶密碼:
-
庫名稱為/home/devops/ansible/locker.yml
-
庫中含有兩個變數,名稱如下:
pw_developer,值為 Imadev
pw_manager,值為 Imamgr
-
用於加密和解密該庫的密碼為:laoma
-
密碼存儲在文件/home/devops/ansible/secret.txt 中
步驟:
1、編輯/home/devops/ansible/locker.yml文件
2、編輯加密和解密的庫
3、使用加密庫加密locker.yml文件
4、使用加密庫查看加密後的locker.yml文件
十四、創建用戶賬戶
題目:
-
從 http://materials.example.com/laoma/user_list.yml 下載要創建的用戶的列表,並將它保存到/home/devops/ansible 目錄。
-
在本次考試中使用在其他位置創建的密碼庫/home/devops/ansible/locker.yml。
創建名為/home/devops/ansible/users.yml 的 playbook,從而按以下所述創建用戶帳戶:
職位描述為 developer 的用戶應當:
- 在 dev 和 test 主機組中的受管節點上創建
- 從 pw_developer 變數分配密碼
- 是補充組 devops 的成員
職位描述為 manager 的用戶應當:
- 在 prod 主機組中的受管節點上創建
- 從 pw_manager 變數分配密碼
- 是補充組 opsmgr 的成員
-
密碼採用 SHA512 哈希格式。
-
您的 playbook 應能夠在本次考試中使用在其他位置創建的庫密碼文件/home/devops/ansible/secret.txt 正常運行。
步驟:
1、首先根據鏈接下載user_list.yml文件。並保存到/home/devops/ansible 目錄。
# wget http://materials.example.com/laoma/user_list.yml
2、根據題目要求編輯yml文件
方法一:
方法二:定義兩個paly(推薦):
十五、更新ansible庫的密鑰
題目:
按照下方所述,更新現有 Ansible 庫的密鑰:
-
從http://materials.example.com/laoma/salaries.yml 下載 Ansible 庫到/root/devops/ansible目錄
-
當前的庫密碼為 laoma
-
新的庫密碼為 redhat
-
庫使用新密碼保持加密狀態
步驟:
1、首先根據鏈接下載yml到ansible目錄。
# wget http://materials.example.com/laoma/salaries.yml
2、更改庫密碼