版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Linux自動化運(yùn)維項目11:角色和集合
學(xué)習(xí)目標(biāo)【知識目標(biāo)】了解大項目管理方式。了解任務(wù)并行和滾動更新的使用場景。了解角色基本概念和目錄結(jié)構(gòu)。了解AnsibleGalaxy基本概念和作用。了解集合基本概念和目錄結(jié)構(gòu)?!炯寄苣繕?biāo)】掌握Ansible角色管理方式,可以創(chuàng)建和編寫角色內(nèi)容。掌握Ansible集合管理方式,可以部署和使用集合內(nèi)容。掌握使用ansible-galaxy命令管理角色和集合的方法?!舅刭|(zhì)目標(biāo)】培養(yǎng)讀者系統(tǒng)分析與解決問題的能力,使其能夠深入分析問題,掌握相關(guān)知識點(diǎn),并在實踐中高效地完成項目任務(wù)。培養(yǎng)讀者的安全意識,使其重視Ansible自動化代碼的安全性,避免代碼出現(xiàn)漏洞,保護(hù)系統(tǒng)安全。角色和集合任務(wù)1:大項目管理方式目錄/Contents01020304動態(tài)清單文件forks并行配置滾動更新控制任務(wù)執(zhí)行位置05導(dǎo)入和包含任務(wù)01動態(tài)清單文件動態(tài)清單文件在Ansible中,用戶可以手動編輯靜態(tài)清單文件,并輕松地添加、刪除或修改主機(jī)信息。靜態(tài)清單文件非常適合用于主機(jī)列表相對穩(wěn)定,或者不經(jīng)常更改的小型環(huán)境或測試環(huán)境。但對于大型基礎(chǔ)設(shè)施或快速變更的環(huán)境來說,保持靜態(tài)清單文件的最新狀態(tài)可能會很困難。為了解決這個問題,Ansible提供了對動態(tài)清單腳本的支持。動態(tài)清單腳本可以從外部數(shù)據(jù)源中獲取主機(jī)列表,在Ansible運(yùn)行時動態(tài)生成清單文件,這些腳本可以是可執(zhí)行程序,也可以是Ansible插件,能夠以JSON格式輸出清單文件信息。在大型IT環(huán)境中,許多系統(tǒng)都使用動態(tài)清單腳本來跟蹤可用主機(jī)和它們的組織方式,比如云提供商、LDAP(LightweightDirectoryAccessProtocol,輕量目錄訪問協(xié)議)、Cobbler或企業(yè)CMDB系統(tǒng)。動態(tài)清單腳本可以從這些數(shù)據(jù)源中獲取主機(jī)列表,并在Ansible執(zhí)行時將其提供給Ansible模塊進(jìn)行管理。相比于靜態(tài)清單文件,動態(tài)清單腳本具有更高的靈活性和自動化能力,可以更好地適應(yīng)不同的環(huán)境和任務(wù)需求。動態(tài)清單文件如果通過AWX或RedHatAnsibleAutomationPlatform(紅帽Ansible自動化平臺)等圖形用戶界面工具管理和監(jiān)視動態(tài)清單腳本,這些平臺的清單腳本數(shù)據(jù)庫會與所有動態(tài)清單腳本源同步,并提供Web和REST接口來查看和編輯清單腳本。通過與所有主機(jī)的數(shù)據(jù)庫記錄相關(guān)聯(lián),用戶可以查看過去的事件歷史記錄,并查找哪些主機(jī)在最近的Playbook運(yùn)行中出現(xiàn)了故障。動態(tài)清單腳本是一種基于外部數(shù)據(jù)源的清單文件管理方式。Ansible支持兩種與外部數(shù)據(jù)源連接的方式:清單插件和清單腳本。在Ansible2.10及之前的版本中,常見的方式是編寫自定義動態(tài)清單腳本,用戶可以使用任何編程語言編寫自定義程序,但傳遞選項時必須以JSON格式返回清單腳本信息。清單插件是管理動態(tài)清單腳本的推薦方式,它可以利用Ansible核心代碼的最新更新內(nèi)容。通過編寫自定義的清單插件,用戶可以連接到其他動態(tài)清單腳本源,并且可以更靈活地管理和更新清單文件。動態(tài)清單文件動態(tài)清單腳本的使用方式與靜態(tài)清單文件的類似,清單腳本的位置可以直接在當(dāng)前的ansible.cfg文件中指定,或者通過-i選項指定。如果清單文件可以執(zhí)行,則視為動態(tài)清單腳本,Ansible會嘗試運(yùn)行它來生成清單文件。如果清單文件不可執(zhí)行,則視為靜態(tài)清單文件。動態(tài)清單腳本如下所示。#inventory_script.py#!/usr/bin/envpythonimportjsonhost_data={'webserver':{'hosts':['web1','web2'],'vars':{'http_port':80,'proxy_server':''}},'databases':{'hosts':['db1'],'vars':{'ansible_user':'dbadmin','ansible_password':'dbpass'}}}print(json.dumps(host_data))setcolour_count=colour_count+1%}{%endfor%}Currently{{colour_count}}peoplecall{{}}theirfavourite.Andthefollowingareexamplesofthingsthatare{{}}:{%foritemincolour.things%}-{{item}}執(zhí)行命令python3inventory_script--list|python3-mjson.tool運(yùn)行動態(tài)清單腳本,查看動態(tài)清單腳本中的主機(jī)信息。02forks并行forks并行當(dāng)Ansible處理Playbook時,會按順序運(yùn)行每個play,確定play的主機(jī)列表之后,Ansible將按順序運(yùn)行每個任務(wù)。通常情況下,所有主機(jī)在play中啟動下一個任務(wù)之前成功完成當(dāng)前任務(wù)。默認(rèn)情況下,Ansible可以同時在所有目標(biāo)主機(jī)上執(zhí)行任務(wù),但是如果目標(biāo)主機(jī)數(shù)量較多,那么執(zhí)行任務(wù)的主機(jī)數(shù)量也會很多,這可能會導(dǎo)致系統(tǒng)負(fù)載過高,影響系統(tǒng)穩(wěn)定性。因此,可以使用forks關(guān)鍵字控制同時執(zhí)行任務(wù)的主機(jī)數(shù)量,以提高任務(wù)執(zhí)行效率。在小型主機(jī)列表中,可以同時連接到play中的所有主機(jī)以執(zhí)行每項任務(wù)。但如果該play以數(shù)百個主機(jī)為目標(biāo),則可能會給控制節(jié)點(diǎn)帶來沉重的負(fù)擔(dān)。因此,根據(jù)實際情況,可以選擇合適的策略來平衡負(fù)載和效率,以確保Ansible自動化運(yùn)維任務(wù)的順利執(zhí)行。forks并行Ansible所允許的最大同時連接數(shù)由Ansible配置文件中的forks參數(shù)控制。默認(rèn)情況下,該參數(shù)設(shè)置為5,可在/etc/ansible/ansible.cfg文件中查看默認(rèn)值。ansible或ansible-playbook命令都支持-f或--forks選項,如果要修改forks的數(shù)量,可以在Playbook中使用forks關(guān)鍵字,或者在命令行中使用-f參數(shù)來指定。如果Ansible控制節(jié)點(diǎn)配置了默認(rèn)值為5的forks參數(shù),這表示Ansible可以同時處理的最大連接數(shù)為5。當(dāng)一個play包含10個受管主機(jī)時,Ansible將在前5個受管主機(jī)上執(zhí)行play中的第1個任務(wù),然后在剩下的5個主機(jī)上再次執(zhí)行第1個任務(wù)。完成對所有主機(jī)的第一個任務(wù)后,Ansible將每次在5個主機(jī)的組中逐一執(zhí)行下一個任務(wù),直到play執(zhí)行完畢。grepforks/etc/ansible/ansible.cfgforks=5ansible-playbook-f30my_playbook.yml03配置滾動更新配置滾動更新在示例中,web_servers主機(jī)組包含100個服務(wù)器,通過將serial設(shè)置為10,每次將按照每組10個主機(jī)的數(shù)量進(jìn)行操作,通過控制任務(wù)的并發(fā)性,使大規(guī)模集群的配置更新和服務(wù)重啟過程更加可控和穩(wěn)定。-name:DeployandRestartServicehosts:web_serversserial:10#設(shè)置每組處理的主機(jī)數(shù)量為10tasks:-name:Copyconfigurationfileansible.builtin.copy:src:/path/to/config/filedest:/etc/service/config.conf-name:Restartserviceansible.builtin.service:name:service_namestate:restarted在生產(chǎn)環(huán)境中,當(dāng)需要更新配置并重啟服務(wù)時,使用serial關(guān)鍵字可以控制并發(fā)性,一組一組進(jìn)行更新和重啟,而不是同時對所有主機(jī)進(jìn)行操作,避免整個集群同時停機(jī)導(dǎo)致服務(wù)中斷,可提高系統(tǒng)的可用性和穩(wěn)定性,減少對用戶的影響。在Playbook中使用serial關(guān)鍵字示例如下。配置滾動更新在示例中,第一個Plabook中的webservers組有20個主機(jī),那么第一批包含6個主機(jī),第二批包含6個主機(jī),第三批包含6個主機(jī),最后一批包含2個主機(jī)。----name:testplayhosts:webserversserial:"30%"----name:testplayhosts:webserversserial:-1-5-10serial關(guān)鍵字還可以指定為百分比,或者以列表的形式指定批處理流程,具體示例如圖。第一批包含1個主機(jī),第二批包含5個主機(jī),第三批包含10個主機(jī)。如果剩余的主機(jī)數(shù)量少于10個,則下一批將包含所有剩余的主機(jī)。04控制任務(wù)執(zhí)行位置控制任務(wù)執(zhí)行位置默認(rèn)情況下,Ansible會在Playbook中指定的所有主機(jī)上執(zhí)行任務(wù),但有些情況下,需要將任務(wù)委派給不同的機(jī)器或組,或者只在本地運(yùn)行Playbook。通過任務(wù)委派,可以更加靈活地控制Playbook的執(zhí)行過程。常見的任務(wù)委派可以使用delegate_to、delegate_facts、run_once、local_action等關(guān)鍵字來實現(xiàn)如表所示。在Ansible中,可以使用delegate_to和delegate_facts關(guān)鍵字將任務(wù)委派給指定的機(jī)器或組,或?qū)⑹聦嵨山o特定的機(jī)器或組。序號委派關(guān)鍵字描述1delegate_to將任務(wù)委派給指定的主機(jī)或組執(zhí)行2delegate_facts將事實委派到指定的主機(jī)或組收集3local_action將任務(wù)委派給Ansible控制節(jié)點(diǎn)上的本地主機(jī)執(zhí)行4run_once將任務(wù)委派給所有主機(jī)中的一個主機(jī)執(zhí)行控制任務(wù)執(zhí)行位置通過delegate_to關(guān)鍵字,可以將任務(wù)從當(dāng)前主機(jī)轉(zhuǎn)移到其他主機(jī),以便在指定的主機(jī)上執(zhí)行任務(wù)。delegate_to關(guān)鍵字具體示例如下。在上面的示例中,delegate_to關(guān)鍵字將Stopwebserver任務(wù)委派給名為web_server3的主機(jī)執(zhí)行,該任務(wù)將在web_server3上執(zhí)行,而不是在play中的web_servers主機(jī)列表中的主機(jī)上執(zhí)行。----name:Exampleplaybookhosts:web_serverstasks:-name:Stopwebserverservice:name:httpdstate:stoppeddelegate_to:web_server3控制任務(wù)執(zhí)行位置通過delegate_facts關(guān)鍵字,可以將事實從當(dāng)前主機(jī)轉(zhuǎn)移到其他主機(jī),以便在指定的主機(jī)上使用這些事實。delegate_facts關(guān)鍵字具體示例如下。在上面的示例中,delegate_facts參數(shù)被設(shè)置為true,因此收集到的事實將分配給被委派的主機(jī)web_server3,而不是當(dāng)前執(zhí)行任務(wù)的主機(jī)。----name:Exampleplaybookhosts:web_serverstasks:-name:Gatherfactssetup:delegate_facts:truedelegate_to:web_server3控制任務(wù)執(zhí)行位置local_action關(guān)鍵字用于在控制節(jié)點(diǎn)上執(zhí)行本地任務(wù),而不是在遠(yuǎn)程主機(jī)上執(zhí)行。local_action關(guān)鍵字具體示例如下。在上面的示例中,local_action關(guān)鍵字將Runlocalscript任務(wù)委派給Ansible控制節(jié)點(diǎn)上的本地主機(jī)執(zhí)行,而不是在遠(yuǎn)程主機(jī)上執(zhí)行。----name:Exampleplaybookhosts:web_serverstasks:-name:Runlocalscriptlocal_action:command/path/to/local/script.sh控制任務(wù)執(zhí)行位置run_once關(guān)鍵字用于確保一個任務(wù)只在清單文件的主機(jī)中的一個主機(jī)上運(yùn)行。run_once關(guān)鍵字具體示例如下。在上面的示例中,Createdirectory任務(wù)使用file模塊創(chuàng)建一個名為/path/to/directory的目錄。由于run_once關(guān)鍵字被設(shè)置為true,因此該任務(wù)只會在第一個主機(jī)上執(zhí)行,而不是在所有主機(jī)上都執(zhí)行。----name:Exampleplaybookhosts:web_serverstasks:-name:Createdirectoryfile:path:/path/to/directorystate:directoryrun_once:true05導(dǎo)入和包含任務(wù)導(dǎo)入和包含任務(wù)在編寫大型Playbook時,如果將所有任務(wù)都寫在一個Playbook文件中,這些任務(wù)可能會變得難以維護(hù)和理解。為了使Playbook更加模塊化和易于維護(hù),可以將其分成較小的文件,可采用模塊化方式將多個Playbook組合為一個主Playbook,或者將文件中的任務(wù)列表插入play,這樣可以更輕松地在不同項目中重用play或任務(wù)序列。常見的導(dǎo)入和包含關(guān)鍵字如表所示。序號關(guān)鍵字描述1import_playbook靜態(tài)導(dǎo)入另一個Playbook文件,可以在當(dāng)前Playbook中使用導(dǎo)入的Playbook中定義的變量。與動態(tài)包含相比,靜態(tài)導(dǎo)入不支持循環(huán)2import_tasks靜態(tài)導(dǎo)入一個或多個任務(wù)文件,可以在當(dāng)前Playbook中使用導(dǎo)入的任務(wù)文件中定義的變量。與動態(tài)包含相比,靜態(tài)導(dǎo)入不支持循環(huán)3import_role靜態(tài)導(dǎo)入一個或多個角色,可以在當(dāng)前Playbook中使用導(dǎo)入的角色中定義的變量。與動態(tài)包含相比,靜態(tài)導(dǎo)入不支持循環(huán)4include_tasks動態(tài)包含一個或多個任務(wù)文件??梢耘c循環(huán)一起使用,對于循環(huán)中的每個項目,包含的任務(wù)文件將被執(zhí)行一次。支持變量傳遞。與靜態(tài)包含相比,動態(tài)包含無法在--list-tags中列出標(biāo)簽5include_role動態(tài)包含一個或多個角色??梢耘c循環(huán)一起使用,對于循環(huán)中的每個項目,包含的角色將被執(zhí)行一次。支持變量傳遞。與靜態(tài)包含相比,動態(tài)包含無法在--list-tags中列出標(biāo)簽導(dǎo)入Playbookimport_playbook指令可以將包含play列表的外部文件導(dǎo)入主Playbook中,它允許在主Playbook中導(dǎo)入一個或多個額外的Playbook。通過使用import_playbook指令,可以將復(fù)雜的Playbook分解為多個模塊化的部分,以提高其可維護(hù)性和可重用性。在Ansible項目中有兩個Playbook文件,分別是webserver.yml和database.yml,webserver.yml包含Web服務(wù)器的自動化任務(wù),database.yml包含數(shù)據(jù)庫服務(wù)器的自動化配置。在主Playbook中導(dǎo)入兩個額外Playbook的示例如下:由于導(dǎo)入的內(nèi)容是一個完整的Playbook,因此import_playbook功能只能在Playbook的頂層使用,不能在play內(nèi)使用。如果導(dǎo)入多個Playbook,它們將按照導(dǎo)入的順序依次執(zhí)行。-name:Preparethewebserverimpor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程共同償還承諾書
- 體育場館入駐辦法
- 倒班工作安全管理
- 醫(yī)療器械維護(hù)基礎(chǔ)設(shè)施施工合同
- 印刷企業(yè)平面設(shè)計師招聘合同
- 造紙企業(yè)消防設(shè)施改造施工協(xié)議
- 市場營銷班主任合同協(xié)議
- 食品冷鏈貨車司機(jī)招聘合同
- 地震監(jiān)測新司機(jī)招聘模板
- 金融服務(wù)平臺審計要領(lǐng)
- 聯(lián)通公司個人先進(jìn)事跡2篇
- 合同管理內(nèi)部控制流程圖
- 2024年度酒店管理與運(yùn)營公司合同
- 專題01 基礎(chǔ)知識綜合(多題型)50題-2023-2024學(xué)年八年級語文下學(xué)期期中專題復(fù)習(xí)(深圳專用)(原卷版)
- 求職簡歷 課件
- 2024-2030年中國蠔殼粉市場競爭戰(zhàn)略及投資風(fēng)險分析報告
- 創(chuàng)新創(chuàng)業(yè)實戰(zhàn)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 房地產(chǎn)中介公司業(yè)務(wù)管理制度
- 電大《生產(chǎn)與運(yùn)作管理》2023-2024期末試題及答案(試卷代號2617)
- 中國腫瘤藥物治療相關(guān)惡心嘔吐防治專家共識(2022年版)解讀
- PLC應(yīng)用技術(shù)(三菱機(jī)型)三菱大中型PLC
評論
0/150
提交評論