欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker容器管理之Docker Engine詳解

 更新時(shí)間:2023年08月21日 08:30:35   作者:demo007x  
當(dāng)我們運(yùn)行集群Docker引擎時(shí),管理器節(jié)點(diǎn)是管理集群和存儲(chǔ)集群狀態(tài)的關(guān)鍵組件,在這篇文章中我們將了解manager節(jié)點(diǎn)的一些關(guān)鍵功能很重要,以正確部署和維護(hù)集群,需要的朋友可以參考下

管理和維護(hù)集群的Docker Engine

在集群中操作管理器節(jié)點(diǎn)

集群管理器節(jié)點(diǎn)使用筏raft來(lái)管理集群狀態(tài)。你只需要了解raft的一些一般概念,就能管理集群。

管理器節(jié)點(diǎn)的數(shù)量沒(méi)有限制。關(guān)于實(shí)施多少個(gè)manager節(jié)點(diǎn)的決定是性能和容錯(cuò)之間的權(quán)衡。將管理器節(jié)點(diǎn)添加到集群中會(huì)使集群更容錯(cuò)。然而,額外的管理器節(jié)點(diǎn)會(huì)降低寫(xiě)入性能,因?yàn)楦嗟墓?jié)點(diǎn)必須確認(rèn)更新群態(tài)的建議。這意味著更多的網(wǎng)絡(luò)往返流量。

Raft要求大多數(shù)manager(也稱(chēng)為法定人數(shù))就群的擬議更新達(dá)成一致,例如節(jié)點(diǎn)添加或刪除。會(huì)員操作受到與狀態(tài)復(fù)制相同的約束。

保持manager節(jié)點(diǎn)的數(shù)量

如果集群失去管理者的法定數(shù)量,則集群無(wú)法執(zhí)行管理任務(wù)。如果你的群體有多個(gè)manager,總是有兩個(gè)以上。為了維持法定人數(shù),必須有大多數(shù)manager人。建議使用奇數(shù)的manager,因?yàn)橄乱粋€(gè)偶數(shù)不會(huì)使法定人數(shù)更容易保持。例如,無(wú)論您有3個(gè)還是4個(gè)manager,您仍然只能失去1名manager并保持法定人數(shù)。如果你有5個(gè)或6個(gè)manager,你仍然只能失去兩個(gè)。

即使集群失去了manager的法定人數(shù),現(xiàn)有工作節(jié)點(diǎn)上的集群任務(wù)也會(huì)繼續(xù)運(yùn)行。但是,群節(jié)點(diǎn)無(wú)法添加、更新或刪除,新的或現(xiàn)有的任務(wù)也無(wú)法啟動(dòng)、停止、移動(dòng)或更新。

如果您確實(shí)失去了manager的法定數(shù)量,請(qǐng)參閱從教程①,以了解故障排除步驟。

配置管理器

啟動(dòng)集群時(shí),我們必須指定--advertise-addr標(biāo)志,以將我們的地址廣播給集群中的其他管理器節(jié)點(diǎn)。由于管理器節(jié)點(diǎn)應(yīng)該是基礎(chǔ)設(shè)施的穩(wěn)定組件,因此我們應(yīng)該使用固定的IP地址作為廣播地址,以防止群在機(jī)器重新啟動(dòng)時(shí)變得不穩(wěn)定。

如果整個(gè)集群重新啟動(dòng),并且每個(gè)管理器節(jié)點(diǎn)隨后獲得一個(gè)新的IP地址,則任何節(jié)點(diǎn)都無(wú)法跟現(xiàn)有管理器通信。因此,當(dāng)節(jié)點(diǎn)試圖在舊的IP地址上相互聯(lián)系時(shí),集群會(huì)被阻塞。

動(dòng)態(tài)IP地址適用于工作節(jié)點(diǎn)。

添加容錯(cuò)管理器節(jié)點(diǎn)

我們應(yīng)該在集群中保持奇數(shù)的manager,以支持manager節(jié)點(diǎn)故障。擁有奇數(shù)的manager可以確保在網(wǎng)絡(luò)分區(qū)期間,如果網(wǎng)絡(luò)被劃分為兩組,則有更高的機(jī)會(huì)保留法定人數(shù)來(lái)處理請(qǐng)求。如果遇到兩個(gè)以上的網(wǎng)絡(luò)分區(qū),則不能保證保持法定人數(shù)。參考如下:

集群大小多數(shù)容錯(cuò)
110
220
321
431
532
642
743
853
954

例如,在有5個(gè)節(jié)點(diǎn)的集群中,如果你失去了3個(gè)節(jié)點(diǎn),你就沒(méi)有法定人數(shù)。因此,在恢復(fù)一個(gè)不可用的管理器節(jié)點(diǎn)或使用災(zāi)難恢復(fù)命令恢復(fù)集群之前,我們無(wú)法添加或刪除節(jié)點(diǎn)。請(qǐng)參閱從災(zāi)難中恢復(fù)②。

雖然可以將集群縮小到單個(gè)管理器節(jié)點(diǎn),但不可能降級(jí)最后一個(gè)管理器節(jié)點(diǎn)。這可以確保您保持對(duì)集群的訪問(wèn)權(quán)限,并且集群仍然可以處理請(qǐng)求??s小到單個(gè)管理器是一項(xiàng)不安全的操作,不建議這樣做。如果最后一個(gè)節(jié)點(diǎn)在降級(jí)操作期間意外離開(kāi)集群,則集群將不可用,直到您重新啟動(dòng)節(jié)點(diǎn)或使用--force-new-cluster重新啟動(dòng)。

我們使用使用docker swarmdocker node子系統(tǒng)管理swarm成員。

分發(fā)管理器節(jié)點(diǎn)

除了維護(hù)奇數(shù)的manager節(jié)點(diǎn)外,在放置manager時(shí)還要注意數(shù)據(jù)中心拓?fù)?。為了獲得最佳的容錯(cuò),將管理器節(jié)點(diǎn)分布在至少3個(gè)可用區(qū)域,以支持整套機(jī)器的故障或常見(jiàn)的維護(hù)場(chǎng)景。如果在其中任何區(qū)域出現(xiàn)故障,集群應(yīng)保持可用于處理請(qǐng)求和重新平衡工作量的manager節(jié)點(diǎn)的法定人數(shù)。

群管理器節(jié)點(diǎn)重新分區(qū)(在3個(gè)可用區(qū)域)
31-1-1
52-2-1
73-2-2
93-3-3

運(yùn)行僅限管理器的節(jié)點(diǎn)

默認(rèn)情況下,管理器節(jié)點(diǎn)也充當(dāng)工作節(jié)點(diǎn)。這意味著調(diào)度器可以將任務(wù)分配給管理器節(jié)點(diǎn)。對(duì)于小型和非關(guān)鍵的集群,只要我們使用CPU和內(nèi)存的資源約束來(lái)安排服務(wù),就將任務(wù)分配給manager的風(fēng)險(xiǎn)相對(duì)較低。

然而,由于管理器節(jié)點(diǎn)使用Raft共識(shí)算法以一致的方式復(fù)制數(shù)據(jù),它們對(duì)資源匱乏很敏感。所以應(yīng)該將集群中的manager與可能阻止集群行動(dòng)(如集群心跳或領(lǐng)導(dǎo)人選舉)的過(guò)程隔離開(kāi)來(lái)。

為了避免干擾管理器節(jié)點(diǎn)操作,我們可以耗盡管理器節(jié)點(diǎn),使其作為工作節(jié)點(diǎn)不可用:

 docker node update --availability drain <NODE>

當(dāng)耗盡節(jié)點(diǎn)時(shí),調(diào)度器會(huì)將節(jié)點(diǎn)上運(yùn)行的任何任務(wù)重新分配給群中其他可用的工作節(jié)點(diǎn)。它還阻止調(diào)度程序?qū)⑷蝿?wù)分配給節(jié)點(diǎn)。

添加工作節(jié)點(diǎn)進(jìn)行負(fù)載平衡

只要工作節(jié)點(diǎn)與服務(wù)的要求相匹配,復(fù)制的服務(wù)任務(wù)就會(huì)隨著時(shí)間的推移盡可能均勻地分布在群中。當(dāng)限制服務(wù)僅在特定類(lèi)型的節(jié)點(diǎn)上運(yùn)行時(shí),例如具有特定CPU數(shù)量或內(nèi)存量的節(jié)點(diǎn),不符合這些要求的工作節(jié)點(diǎn)無(wú)法運(yùn)行這些任務(wù)。

監(jiān)測(cè)群體健康

我們可以通過(guò)查詢docker nodes API 以 JSON格式通過(guò)/nodes HTTP端點(diǎn)來(lái)監(jiān)視管理節(jié)點(diǎn)的健康狀況。

從命令行運(yùn)行docker node inspect <id-node>來(lái)查詢節(jié)點(diǎn)。例如,要查詢節(jié)點(diǎn)作為管理器的可訪問(wèn)性:

 docker node inspect manager1 --format "{{ .ManagerStatus.Reachability }}"

要查詢節(jié)點(diǎn)作為接受任務(wù)的工作的狀態(tài):

 docker node inspect manager1 --format "{{ .Status.State }}"

從這些命令中,我們可以看到manager1既處于reachable作為manager的狀態(tài),又作為工作ready`。

unreachable的健康狀態(tài)意味著這個(gè)特定的管理器節(jié)點(diǎn)無(wú)法從其他管理器節(jié)點(diǎn)訪問(wèn)。在這種情況下,我們需要采取行動(dòng)來(lái)恢復(fù)無(wú)法訪問(wèn)的管理器:

  • 重新啟動(dòng)守護(hù)進(jìn)程,看看manager是否恢復(fù)可訪問(wèn)。
  • 重新啟動(dòng)機(jī)器。
  • 如果重新啟動(dòng)或重新啟動(dòng)都不起作用,應(yīng)該添加另一個(gè)管理器節(jié)點(diǎn)或?qū)orker提升為管理器節(jié)點(diǎn)。您還需要從帶有docker node demote <NODE>docker node rm <id-node>的管理器設(shè)置中清除失敗的節(jié)點(diǎn)條目。

或者,您還可以從具有docker node ls的管理器節(jié)點(diǎn)獲得群健康概述:

 docker node ls

對(duì)管理器節(jié)點(diǎn)進(jìn)行故障排除

永遠(yuǎn)不應(yīng)該通過(guò)從另一個(gè)節(jié)點(diǎn)復(fù)制raft目錄來(lái)重新啟動(dòng)管理器節(jié)點(diǎn)。數(shù)據(jù)目錄是節(jié)點(diǎn)ID的唯一。節(jié)點(diǎn)只能使用一次節(jié)點(diǎn)ID加入集群。節(jié)點(diǎn)ID空間應(yīng)該是全局唯一的。

要干凈地將管理器節(jié)點(diǎn)重新加入集群:

  • 使用docker node demote <NODE>將節(jié)點(diǎn)降級(jí)為worker。
  • 使用docker node rm <NODE>從群中刪除節(jié)點(diǎn)。
  • 使用docker swarm join將節(jié)點(diǎn)重新加入到具有新?tīng)顟B(tài)的群中。

強(qiáng)行刪除一個(gè)節(jié)點(diǎn)

在大多數(shù)情況下,我們應(yīng)該先關(guān)閉節(jié)點(diǎn),然后再使用docker node rm命令將其從群中移除。如果節(jié)點(diǎn)無(wú)法訪問(wèn)、無(wú)響應(yīng)或被破壞,您可以通過(guò)傳遞--force標(biāo)志來(lái)強(qiáng)制刪除節(jié)點(diǎn),而無(wú)需關(guān)閉它。例如,如果node2被泄露:

$ docker node rm node2
Error response from daemon: rpc error: code =  desc = node node2 is not down and can't be removed
$ docker node rm --force node2
Node node2 removed from swarm

在強(qiáng)制刪除管理器節(jié)點(diǎn)之前,您必須首先將其降級(jí)到工作角色。如果您降級(jí)或刪除manager,請(qǐng)確保您始終有奇數(shù)的manager節(jié)點(diǎn)。

集群備份

Docker管理器節(jié)點(diǎn)將群狀態(tài)和管理器日志存儲(chǔ)在/var/lib/docker/swarm/目錄中。這些數(shù)據(jù)包括用于加密Raft日志的密鑰。沒(méi)有這些文件,我們就無(wú)法恢復(fù)集群。

我們可以使用任何管理器備份集群。使用以下程序。

  • 如果集群?jiǎn)⒂昧俗詣?dòng)鎖定,需要解鎖密鑰才能從備份中恢復(fù)集群。如有必要,檢索解鎖密鑰并將其存儲(chǔ)在安全的位置。

  • 在備份數(shù)據(jù)之前,在管理器上停止Docker,這樣在備份期間就不會(huì)更改數(shù)據(jù)。可以在manager運(yùn)行時(shí)進(jìn)行備份(“熱”備份),但不建議這樣做,并且在恢復(fù)時(shí)您的結(jié)果更難預(yù)測(cè)。當(dāng)管理器停機(jī)時(shí),其他節(jié)點(diǎn)繼續(xù)生成不屬于此備份一部分的群數(shù)據(jù)。

    注意:

    一定要保持集群manager的法定人數(shù)。在manager關(guān)閉期間,如果丟失更多節(jié)點(diǎn),您的集群更容易失去法定人數(shù)。你管理的manager數(shù)量是一種取舍。如果定期刪除manager進(jìn)行備份,請(qǐng)考慮運(yùn)行五個(gè)manager群,這樣就可以在備份運(yùn)行時(shí)失去另一個(gè)manager,而不會(huì)中斷服務(wù)。

  • 備份整個(gè)/var/lib/docker/swarm目錄。

  • 重新啟動(dòng)管理器。

從備份中恢復(fù)

從備份恢復(fù)

如備份集群中所述備份集群后,請(qǐng)使用以下過(guò)程將數(shù)據(jù)恢復(fù)到新集群。

  • 為恢復(fù)的群關(guān)閉目標(biāo)主機(jī)上的Docker。

  • 刪除新群上/var/lib/docker/swarm目錄的內(nèi)容。

  • 使用備份的內(nèi)容恢復(fù)/var/lib/docker/swarm目錄。

    筆記

    新節(jié)點(diǎn)使用與舊節(jié)點(diǎn)相同的磁盤(pán)存儲(chǔ)加密密鑰。目前無(wú)法更改磁盤(pán)存儲(chǔ)加密密鑰。

    在啟用自動(dòng)鎖定的集群的情況下,解鎖密鑰也與舊集群相同,需要解鎖密鑰來(lái)恢復(fù)集群。復(fù)制代碼

docker swarm init --force-new-cluster 
  • 驗(yàn)證集群的狀態(tài)是否符合預(yù)期。這可能包括特定于應(yīng)用程序的測(cè)試,或者只是檢查docker service ls的輸出,以確保所有預(yù)期服務(wù)都存在。

  • 如果我們使用自動(dòng)鎖定,需要更新我的密鑰。

  • 添加管理器和工作節(jié)點(diǎn),使我們的新集群達(dá)到可接受服務(wù)請(qǐng)求 s。

  • 在新集群上恢復(fù)我們之前的備份數(shù)據(jù)。

恢復(fù)管理節(jié)點(diǎn)的數(shù)量

Swarm對(duì)故障有彈性,可以從任何數(shù)量的臨時(shí)節(jié)點(diǎn)故障(機(jī)器重新啟動(dòng)或重新啟動(dòng)時(shí)崩潰)或其他瞬態(tài)錯(cuò)誤中恢復(fù)。然而,如果群體失去法定人數(shù),它就無(wú)法自動(dòng)恢復(fù)?,F(xiàn)有工作節(jié)點(diǎn)上的任務(wù)繼續(xù)運(yùn)行,但無(wú)法執(zhí)行管理任務(wù),包括擴(kuò)展或更新服務(wù)以及從集群中加入或刪除節(jié)點(diǎn)?;謴?fù)的最佳方法是將丟失的管理器節(jié)點(diǎn)重新聯(lián)機(jī)。

在集群manager中,必須始終有法定人數(shù)(大多數(shù))的manager節(jié)點(diǎn)。例如,在有五名manager的集群中,至少有三名manager必須處于運(yùn)通信狀態(tài)并互聯(lián)互通。換句話說(shuō),集群可以容忍高達(dá)(N-1)/2的永久故障,超過(guò)這些故障,涉及集群管理的請(qǐng)求無(wú)法處理。這些類(lèi)型的故障包括數(shù)據(jù)損壞或硬件故障。

如果你失去了manager 的法定人數(shù),就無(wú)法管理集群。如果失去了法定人數(shù),并且嘗試對(duì)集群執(zhí)行任何管理操作,則會(huì)發(fā)生錯(cuò)誤:

Error response from daemon: rpc error: code = 4 desc = context deadline exceeded

從失去法定人數(shù)中恢復(fù)過(guò)來(lái)的最好方法是讓失敗的節(jié)點(diǎn)重新上線。如果我們無(wú)法做到這一點(diǎn),從此狀態(tài)中恢復(fù)的唯一方法是使用來(lái)自管理器節(jié)點(diǎn)的--force-new-cluster操作。這將刪除運(yùn)行命令的manager以外的所有manager。達(dá)到法定人數(shù)是因?yàn)楝F(xiàn)在只有一位manager。將節(jié)點(diǎn)提升為manager,直到擁有所需的manager人數(shù)。

從要恢復(fù)的節(jié)點(diǎn),運(yùn)行:

 docker swarm init --force-new-cluster --advertise-addr node01:2377

當(dāng)使用--force-new-cluster標(biāo)志運(yùn)行docker swarm init命令時(shí),您運(yùn)行命令的Docker引擎將成為能夠管理和運(yùn)行服務(wù)的單節(jié)點(diǎn)群的管理器節(jié)點(diǎn)。manager擁有之前關(guān)于服務(wù)和任務(wù)的所有信息,工作節(jié)點(diǎn)仍然是集群的一部分,服務(wù)仍在運(yùn)行。您需要添加或重新添加管理器節(jié)點(diǎn),以實(shí)現(xiàn)之前的任務(wù)分配,并確保您有足夠的管理器來(lái)保持高可用性并防止失去法定人數(shù)。

讓集群重新負(fù)載均衡

一般來(lái)說(shuō),我們不需要強(qiáng)迫集群重新平衡其任務(wù)。當(dāng)向群添加新節(jié)點(diǎn)時(shí),或者節(jié)點(diǎn)在一段時(shí)間不可用后重新連接到集群時(shí),集群不會(huì)自動(dòng)給空閑節(jié)點(diǎn)提供工作負(fù)載, Docker swarm 就是這么設(shè)計(jì)的,如果為了實(shí)現(xiàn)平衡,集群定期將任務(wù)轉(zhuǎn)移到不同的節(jié)點(diǎn),則使用這些任務(wù)的客戶端將被中斷。為了整個(gè)集群的平衡,目標(biāo)是避免中斷運(yùn)行服務(wù)。當(dāng)新任務(wù)開(kāi)始時(shí),或者當(dāng)具有運(yùn)行任務(wù)的節(jié)點(diǎn)不可用時(shí),這些任務(wù)將提供給不太繁忙的節(jié)點(diǎn)。目標(biāo)是最終平衡,盡量減少對(duì)最終用戶的干擾。

您可以將--force-f標(biāo)志與docker service update命令一起使用,以強(qiáng)制服務(wù)在可用的工作節(jié)點(diǎn)上重新分配其任務(wù)。這會(huì)導(dǎo)致服務(wù)任務(wù)重新啟動(dòng)??蛻舳藨?yīng)用程序可能會(huì)中斷。如果已配置它,我們的服務(wù)將使用滾動(dòng)更新。

以上就是docker容器管理之Docker Engine詳解的詳細(xì)內(nèi)容,更多關(guān)于docker容器管理Docker Engine的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker容器Container鏡像Image如何存儲(chǔ)詳解

    Docker容器Container鏡像Image如何存儲(chǔ)詳解

    本文主要介紹Docker容器(Container)和鏡像(Image)是如何進(jìn)行數(shù)據(jù)存儲(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Docker開(kāi)啟遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn)方式

    Docker開(kāi)啟遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn)方式

    這篇文章主要介紹了Docker開(kāi)啟遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 卸載Docker時(shí)遇到問(wèn)題的解決方案

    卸載Docker時(shí)遇到問(wèn)題的解決方案

    這篇文章主要介紹了卸載Docker時(shí)遇到問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • docker打包Python環(huán)境的過(guò)程詳解

    docker打包Python環(huán)境的過(guò)程詳解

    這篇文章主要介紹了docker打包Python環(huán)境過(guò)程,準(zhǔn)備工作需要大家復(fù)制python程序啟動(dòng)程序,具體操作流程跟隨小編一起看看吧
    2021-08-08
  • Docker搭建ELK日志系統(tǒng),并通過(guò)Kibana查看日志方式

    Docker搭建ELK日志系統(tǒng),并通過(guò)Kibana查看日志方式

    這篇文章主要介紹了Docker搭建ELK日志系統(tǒng),并通過(guò)Kibana查看日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Docker為網(wǎng)絡(luò)bridge模式指定容器ip的方法

    Docker為網(wǎng)絡(luò)bridge模式指定容器ip的方法

    Docker在創(chuàng)建容器時(shí)有四種網(wǎng)絡(luò)模式,bridge為默認(rèn)不需要用--net去指定,其他三種模式需要在創(chuàng)建容器時(shí)使用--net去指定。那Docker為網(wǎng)絡(luò)bridge模式指定容器ip該如何實(shí)現(xiàn)呢?下面通過(guò)通過(guò)這篇文章一起看看吧,文中給出了詳細(xì)的示例代碼,有需要的可以參考借鑒。
    2016-11-11
  • 使用docker安裝elk的詳細(xì)步驟

    使用docker安裝elk的詳細(xì)步驟

    這篇文章主要介紹了使用docker安裝elk,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 查看docker是否處于啟動(dòng)狀態(tài)的方法詳解

    查看docker是否處于啟動(dòng)狀態(tài)的方法詳解

    Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,本文主要給大家介紹了查看docker是否處于啟動(dòng)狀態(tài)的方法,需要的朋友可以參考下
    2024-06-06
  • 快速使用docker-compose部署clickhouse的教程

    快速使用docker-compose部署clickhouse的教程

    ClickHouse 的工作速度比傳統(tǒng)方法快 100-1000 倍。它適用于大數(shù)據(jù)、業(yè)務(wù)分析和時(shí)間序列數(shù)據(jù)。在這個(gè)小教程中,我將向您展示如何以最少的設(shè)置安裝 ClickHouse,感興趣的朋友一起看看吧
    2021-11-11
  • Docker之容器文件的上傳和下載方式

    Docker之容器文件的上傳和下載方式

    這篇文章主要介紹了Docker之容器文件的上傳和下載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論