邵杰
Etcd是一個(gè)開(kāi)源的分布式鍵值存儲(chǔ),由CoreOS團(tuán)隊(duì)開(kāi)發(fā),現(xiàn)在由Cloud Native Computing Foundation管理。這個(gè)詞的讀音是“et-cee-dee”,意思是在多臺(tái)機(jī)器上分發(fā)Unix系統(tǒng)的“/etc”目錄,其中包含大量全局配置文件。它是許多分布式系統(tǒng)的主干,并提供了一種跨服務(wù)器集群存儲(chǔ)數(shù)據(jù)的可靠方法。它適用于各種操作系統(tǒng),包括Linux、BSD和OS X..
Etcd具有以下屬性:
完全復(fù)制:集群中的每個(gè)節(jié)點(diǎn)都可以使用完整的存檔高可用性:Etcd可用于避免硬件的單點(diǎn)故障或網(wǎng)絡(luò)問(wèn)題一致性:每次讀取都會(huì)返回跨多主機(jī)的最新寫入簡(jiǎn)單:包括一個(gè)定義良好、面向用戶的API(gRPC)安全:實(shí)現(xiàn)了帶有可選的客戶端證書(shū)身份驗(yàn)證的自動(dòng)化TLS快速:每秒10000次寫入的基準(zhǔn)速度可靠:使用Raft算法實(shí)現(xiàn)了存儲(chǔ)的合理分布Etcd的工作原理
在了解Etcd的工作機(jī)制之前,我們先定義三個(gè)關(guān)鍵概念:領(lǐng)導(dǎo)、選舉、任期。在基于raft的系統(tǒng)中,集群使用選舉來(lái)選擇給定任期的領(lǐng)導(dǎo)者。
領(lǐng)導(dǎo)者處理所有需要集群一致協(xié)商的客戶請(qǐng)求。不需要協(xié)商一致的請(qǐng)求可以由任何集群成員處理。領(lǐng)導(dǎo)負(fù)責(zé)接受新的變更,將信息復(fù)制到跟隨者節(jié)點(diǎn),跟隨者驗(yàn)證接受后提交變更。在任何給定時(shí)間,每個(gè)集群只能有一個(gè)領(lǐng)導(dǎo)者。
如果領(lǐng)導(dǎo)掛機(jī)或不再響應(yīng),其他節(jié)點(diǎn)將在預(yù)定時(shí)間到期后打開(kāi)新的任期以創(chuàng)建新的選舉。每個(gè)節(jié)點(diǎn)都維護(hù)一個(gè)隨機(jī)選舉計(jì)時(shí)器,該計(jì)時(shí)器指示節(jié)點(diǎn)在調(diào)用新的選舉并選擇自己作為候選人之前需要等待的時(shí)間。
如果節(jié)點(diǎn)在超時(shí)前沒(méi)有收到領(lǐng)導(dǎo)的消息,節(jié)點(diǎn)將通過(guò)開(kāi)始新的任期、標(biāo)記自己為候選人并要求其他節(jié)點(diǎn)投票來(lái)開(kāi)始新的選舉。每個(gè)節(jié)點(diǎn)投票給第一個(gè)要求它投票的候選人。如果一個(gè)候選人從集群中的大多數(shù)節(jié)點(diǎn)獲得選票,它就成為一個(gè)新的領(lǐng)導(dǎo)者。但是,如果有多個(gè)候選人,并且獲得了相同的票數(shù),現(xiàn)有的選舉任期將在沒(méi)有領(lǐng)導(dǎo)人的情況下結(jié)束,新的任期將以新的隨機(jī)選舉計(jì)時(shí)器開(kāi)始。
如上所述,任何更改都必須連接到引線節(jié)點(diǎn)。Etcd不立即接受和提交更改,而是使用Raft算法來(lái)確保大多數(shù)節(jié)點(diǎn)同意更改。領(lǐng)導(dǎo)者向集群中的每個(gè)節(jié)點(diǎn)發(fā)送建議的新值。然后,節(jié)點(diǎn)發(fā)送一條消息,確認(rèn)收到新值。如果大多數(shù)節(jié)點(diǎn)確認(rèn)收到,領(lǐng)導(dǎo)者提交一個(gè)新值,并向每個(gè)節(jié)點(diǎn)發(fā)送一條消息,將該值提交到日志中。這意味著每一個(gè)更改都需要由集群節(jié)點(diǎn)進(jìn)行仲裁,然后才能提交。
庫(kù)本內(nèi)特斯的Etcd
自2014年成為庫(kù)本內(nèi)特的一部分以來(lái),Etcd社區(qū)呈現(xiàn)出指數(shù)級(jí)增長(zhǎng)。CoreOS、Google、Redhat、IBM、思科、華為等都是Etcd的投稿會(huì)員。其中,AWS、Google云平臺(tái)、Azure等大型云提供商已經(jīng)在生產(chǎn)環(huán)境中成功使用了Etcd。
Etcd在Kubernetes的工作是為分布式系統(tǒng)安全地存儲(chǔ)關(guān)鍵數(shù)據(jù)。它最著名的是Kubernetes的主數(shù)據(jù)存儲(chǔ),用于存儲(chǔ)配置數(shù)據(jù)、狀態(tài)和元數(shù)據(jù)。Kubernetes通常運(yùn)行在幾臺(tái)機(jī)器的集群上,所以它是一個(gè)分布式系統(tǒng),需要像Etcd一樣的分布式數(shù)據(jù)存儲(chǔ)。
Etcd使跨集群存儲(chǔ)數(shù)據(jù)和監(jiān)控變得更加容易,它允許Kubernetes集群中的任何節(jié)點(diǎn)讀寫數(shù)據(jù)。Kubernetes使用Etcd的監(jiān)視功能來(lái)監(jiān)控系統(tǒng)的實(shí)際或期望狀態(tài)的變化。如果兩個(gè)州不一樣,Kubernetes會(huì)做一些改動(dòng)來(lái)調(diào)和兩個(gè)州。ku pect l命令的每次讀取都是從存儲(chǔ)在etcd中的數(shù)據(jù)中檢索的,任何更改都會(huì)在Etcd中創(chuàng)建或更新條目,每次崩潰都會(huì)觸發(fā)對(duì)Etcd中值的修改。
部署和硬件建議
Etcd可以在筆記本電腦或輕量級(jí)云上運(yùn)行,用于測(cè)試或開(kāi)發(fā)目的。但是在生產(chǎn)環(huán)境下運(yùn)行Etcd集群時(shí),要考慮Etcd官方文檔提供的指導(dǎo)。它為良好穩(wěn)定的生產(chǎn)部署提供了一個(gè)良好的起點(diǎn)。應(yīng)該指出的是:
Etcd會(huì)將數(shù)據(jù)寫入磁盤,因此強(qiáng)烈推薦使用SSD始終使用奇數(shù)個(gè)集群數(shù)量,因?yàn)樾枰ㄟ^(guò)仲裁來(lái)更新集群的狀態(tài)出于性能考慮,集群通常不超過(guò)7個(gè)節(jié)點(diǎn)讓我們回顧一下在Kubernetes部署Etcd集群所需的步驟。之后,我們將演示一些基本的CLI命令和API調(diào)用。我們將使用庫(kù)伯內(nèi)特的概念進(jìn)行部署,例如狀態(tài)集和持久卷。
提前準(zhǔn)備
在繼續(xù)演示之前,我們需要準(zhǔn)備:
一個(gè)谷歌云平臺(tái)的賬號(hào):免費(fèi)的tier應(yīng)該足夠了。你也可以選擇大多數(shù)其他云提供商,只需進(jìn)行少量修改即可。一個(gè)運(yùn)行Rancher的服務(wù)器啟動(dòng)牧場(chǎng)主實(shí)例
在您控制的服務(wù)器上啟動(dòng)Rancher實(shí)例。這里有一個(gè)非常簡(jiǎn)單直觀的入門指南:https://rancher.com/quick-start/
與牧場(chǎng)主一起部署GKE集群
根據(jù)本指南,使用牧場(chǎng)主在GCP帳戶中設(shè)置和配置庫(kù)本內(nèi)特集群:
https://rancher . com/docs/rancher/v2 . x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/
在運(yùn)行Rancher實(shí)例的同一服務(wù)器上安裝Google Cloud SDK和kubelet命令。按照上面提供的鏈接,通過(guò)Rancher UI安裝SDK和kubelet。
使用gcloud init和gcloud auth登錄,以確保gcloud命令可以訪問(wèn)您的GCP帳戶。
部署集群后,輸入以下命令來(lái)檢查基本kubectl函數(shù):
應(yīng)用以下YAML文件并更新區(qū)域值以匹配您的首選項(xiàng),以便我們可以使用固態(tài)硬盤存儲(chǔ):
應(yīng)用YAML文件后,我們可以在牧場(chǎng)主提供的不同選項(xiàng)卡中定義資源:
我們檢查Etcd版本。為此,我們可以使用API或CLI。根據(jù)您選擇的方法,輸出結(jié)果會(huì)略有不同。
使用此命令直接聯(lián)系應(yīng)用編程接口:
檢查應(yīng)用編程接口版本為v2的etcdctl客戶端,并輸入:
要檢查應(yīng)用編程接口版本為v3的etcdctl客戶端,請(qǐng)輸入:
接下來(lái),列出集群成員,如上所述:
{ " members ":," client URLs ":},{"id":"7fd61f3f79d97779 "," name":"etcd-1 "," peer URLs ":全部不可訪問(wèn)
成員7fd61f3f79d97779健康:從http://etcd-1.etcd:2379獲得健康結(jié)果
成員b429c86e3cd4e077健康:從http://etcd-2獲得健康結(jié)果,etcd:2379cluster已降級(jí)
命令以退出代碼5終止
上述信息表明,由于丟失了引導(dǎo)節(jié)點(diǎn),群集處于降級(jí)狀態(tài)。
一旦Kubernetes通過(guò)啟動(dòng)新實(shí)例來(lái)響應(yīng)已刪除的pod,Etcd群集應(yīng)該會(huì)恢復(fù):
結(jié)論理論
Etcd是一個(gè)非常強(qiáng)大、高度可用和可靠的分布式鍵值存儲(chǔ),是專門為特定用例設(shè)計(jì)的。常見(jiàn)示例包括存儲(chǔ)數(shù)據(jù)連接詳細(xì)信息、緩存設(shè)置、功能標(biāo)簽等。它被設(shè)計(jì)成相同的順序,所以整個(gè)集群中的每個(gè)事件都以相同的順序存儲(chǔ)。
在牧場(chǎng)主的幫助下,我們學(xué)習(xí)了如何在庫(kù)本內(nèi)斯的幫助下建立和運(yùn)行etcd集群。之后可以用一些基本的Etcd命令來(lái)操作。為了更好地理解項(xiàng)目,如何組織密鑰,如何為密鑰設(shè)置TTl,或者如何備份所有數(shù)據(jù),參考官方Etcd報(bào)告是一個(gè)很好的選擇:
https://github.com/etcd-io/etcd/tree/master/Documentation
牧場(chǎng)實(shí)驗(yàn)室中國(guó)團(tuán)隊(duì)正在熱招!集裝箱領(lǐng)域第一品牌,傳奇創(chuàng)始人,硅谷明星創(chuàng)業(yè)團(tuán)隊(duì)...2019,就是想認(rèn)識(shí)你!
關(guān)于牧場(chǎng)實(shí)驗(yàn)室
1.《etcd Etcd超全解:原理闡釋及部署設(shè)置的最佳實(shí)踐》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《etcd Etcd超全解:原理闡釋及部署設(shè)置的最佳實(shí)踐》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/tiyu/1690585.html