優化效能的關鍵: 加速 ETCD

閱讀時間約 7 分鐘

建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。

本篇整理了之前研究ETCD時的一些文章和相關知識,以及在規劃時需要注意的重點,希望能夠幫助大家在部署前有一些可以參考的原則。

raw-image

同樣地,本文將分成幾個部分進行說明:

  • K8S是如何連接ETCD
  • Kubernetes 物件在ETCD的儲存路徑
  • 堆疊型的ETCD
  • 外部的ETCD cluster
  • 性能調校

1. K8S是如何連接ETCD

  • etcd是Kubernetes的後端儲存
  • 針對每個Kubernetes物件都有對應負責的儲存操作
  • 初始化kubeadm-config 中指定ETCD servers的集群,例如:
ETCD對於Kube-apiserver是一個Client的角色,需要它們的certificates並指定這些節點的位置

ETCD對於Kube-apiserver是一個Client的角色,需要它們的certificates並指定這些節點的位置

2. Kubernetes 物件在ETCD的儲存路徑

#-------------------------------------------------
# S2-1. 以以下方式找出路徑
#-------------------------------------------------​
[root]# ETCDCTL_API=3 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://10.107.88.15:2379

[root]# etcdctl get / --prefix --keys-only
* --keys-only: 只列出key不列出內容
raw-image
#----------------------------------------------
# S2-2. 將路徑的內容dump出來
#----------------------------------------------
​[root]# etcdctl get /registry/namespaces/default -w json | jq
raw-image
#--------------------------------------------
# S2-3. key還可以再解析出來
#--------------------------------------------
[root]# echo "key" | base64 --decode
/registry/namespaces/default

以上是apiserver透過/api/v1/registry/namespaces/default去get namespace時,就等於在etcd內get /registry/namespaces/default,整體邏輯是一樣的,將整段組成一支key之後儲存在ETEC內。

3. 堆疊型的ETCD

將ETCD的三個節點與三個Master結合,好處是建立容易,副本的管理容易,由於是在同一個節點,所以可以直接讀取,不用再透過網路傳輸,速度更快。缺點是當Master有一個節點故障就代表etcd cluster也會有失去一個成員的風險。

這種方式的ETCD會以Pod的型式存在,由Kubelet自行管理,方式如下:

--> kubelet讀取config,config內定義了static pod路徑,透過kubelet掃描這個路徑來看有沒有Pod,如果有就直接掛載

Note: ETCD cluster重視disk io

raw-image

4. 外部的ETCD cluster

將ETCD與Master間的關係解開,所以當一台Master出現問題後影響ETCD member的較少。缺點是需要的主機數量更多,至少要再加3台主機成為ETCD cluster。

raw-image

5. 性能調校

ETCD的回應速度會直接影響Kubernetes cluster的操作,進一步也會影響Cluster的穩定性。

平時就需要監控ETCD成員的效能表現,對於效能有問題的成員進行修復或移除,如果發現整體效能低下時,可以用以下原則進行調校。

一般影響的因素有以下二個:

  • 網路延遲(RTT)
  • Disk IO (資料實際儲存需要的時間)

以下是針對性能調校幾個考量因素:

※ 思考點-成員:

愈多愈好?

愈多愈好?

  • 成員是1個? 3個? 5個?
  • 保證高可用性是否最重要?
  • 成員如果變多會提升整體同時讀取的能力?
  • apiserver的設定連接到本地的etcd 成員?
  • 有需要動態擴展嗎?

※ 結論:

(1) 因為ETCD為投票方式決定Leader,如果偶數會出現票數相等的情況導致出現重新投票,Leader的產生就會很久,所以選擇奇數

成員數選擇:

  • 1個:沒有高可用容錯,但效能最佳,但資料無法保證安全
  • 3個:具備最基本的容錯,效能在中間
  • 5個:效能最差,但節點更多,成本更高

(2) ETCD cluster邏輯與一般不同,成員愈多時,資料寫入所需要確認的成員就愈多,效能就會更低。

(3) 所有寫入都是由Leader成員執行

(4) apiserver的設定會指定所有的ETCD 成員,但只有目前連接的etcd成員異常,apiserver才會換目標

※ 思考點 — apiserver 與ETCD之間的溝通:

有效率的溝通

有效率的溝通

要怎麼確保apiserver與ETCD之間的溝通是有效率的,可以做以下考量:

  • 將apiserver與etcd部署在同一個節點
  • 因為apiserver與etcd之間的溝通是基於gRPC,有以下特點:
gRPC:不管從同一個Client有多少請求,都會重復使用同一個connection到server,
同一個group也是共有一個gRPC connection,故pod , node都是透過同一個gRPC連到etcd
  • 問題:大規模的cluster可能link會很滿,例如:1000個pod,一次list所傳回的資料量可能會超過100M
# kubectl get pod - all-namespace | wc -l
# kubectl get pod -o yaml - all-namespace > pods
# ls -al pods

結論:

  • put 時盡量避免大量的數值。避免頻繁建立key-value(kv),例如k8s節點心跳回報機制(kube-node-lease)合理利用 apiserver 中的Cache,避免大量請求打到 etcd上,如集群異常回復後大量的Pod同步。

6.結論:

尤於篇幅過長,之後將繼續於另一篇文章進行說明。

自從深入了解ETCD之後,發現這個元件本身的知識量就很多,但因為ETCD在Kubernetes的角色的關係,個人認為如果事先規劃有做好,大致上在部署之後不會面對到太多會需要直接操作的機會(最好也不要 :) )。

當了解這些考慮因素後,進行部署前的溝通會議將可以更加清晰且具有方向。


Reference:

15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
本篇將補完上一篇所提到關於StatefulSet的實作部份。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
在現代商業世界中,要讓自己的品牌在網路上脫穎而出,搜尋引擎優化(SEO)是不可或缺的一環。其中,關鍵字的選擇與使用是提升搜尋引擎搜尋結果的重要策略之一。本文將介紹台灣商務環境中,如何運用Google關鍵字規劃工具、長尾關鍵字以及Google Search Console來增強網站的SEO效果。
Thumbnail
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
Thumbnail
破解學習效能瓶頸:如何精準閱讀、優化研究成果與高效筆記? 你是否曾經對閱讀過後感覺徒勞無功而困擾?是否有過進行研究,卻感覺成果難以有效傳遞的挫折?又或者在大量筆記中找不到所需信息,覺得筆記系統混亂無助?這篇文章將提供你三個有效的策略,助你解決上述問題,提升你的學習效能。 策略一:精準閱讀 閱讀不應是
Thumbnail
理財是讓你能夠掌握好自己的財富,投資則是讓你的財富繼續增長的工具。投資自己的思維,跟投資長期被動的ETF一樣,能越早投資,成本就越低,與其等低點,不如早一點。只有當你明白,提高月薪才有投資的底氣,正確的生涯規劃才能引導出對的理財規劃,並願意了解自己提高自己的財商思維,你才能真正掌握自己的人生。
Thumbnail
產品規劃流程時,除了要思考如何優化使用者體驗,也要思考如何減少用戶阻力,讓用戶在最「簡單、快速」的情境下完成任務,這篇想整理我看的到減少用戶阻力的方法。
Thumbnail
你所相信的都會成為真實。你對自己的所有的相信,會從意識的層面進入潛意識的層面,最終組成了「信念系統」,信念系統時時刻刻都在運作,每次你做選擇時,信念系統都會影響你的選擇,因此,好好優化保養信念系統,這樣,你每次都能夠做出正確的選擇。以下,會分享5個我用來優化保養「潛意識」和「信念系統」的心法與技巧。
Thumbnail
年底將屆,企業該如何有效進行新年度訓練規劃? 近年來疫情已重塑全球產業商模與工作型態,並展開人才爭奪大戰,促使數位科技加速應用,未來人才必將重新定義。人資此時需更關注人才策略「新需求人才定位及優化人才」是企業變革中關鍵要角! HR該如何有效將訓練與組織營運績效連結,透過年度教育訓練計劃展開並規劃符合
Thumbnail
開始教課時,最容易遇到的挑戰之一就是「備課」。 備課有很多種,有3個小時的知識型課程,或是一對一的教練課;也有2個小時的實作型課程,或是1小時的手作互動型課程。每一個課程面對不同的受眾,備課就顯得更加重要。 前面的一兩次課程在課程前幾天對我來說是最痛苦的, 將教案從零到一,不是件容易且簡單的事。 但
關鍵字研究始終是SEO過程中的第一步。在優化網站和創建活動時,行銷人員應該將其與市場研究放在同一層次上。作為初步計劃的一部分,查看行業中的哪些競爭對手正在分析其網站上的關鍵字總是一個好主意。進行Google關鍵字分析,您可以將這些分析結果與工具進行比較,以確定哪些關鍵字更常被搜尋!
Thumbnail
Facebook 廣告機制有自己的一套演算法,很多人看到廣告成效不佳時,就會想要暫停或是立即調整,但我覺得先讓那檔廣告跑個 2–3 天左右,讓它先自動優化一波後,再來做後續的調整會比較好。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
在現代商業世界中,要讓自己的品牌在網路上脫穎而出,搜尋引擎優化(SEO)是不可或缺的一環。其中,關鍵字的選擇與使用是提升搜尋引擎搜尋結果的重要策略之一。本文將介紹台灣商務環境中,如何運用Google關鍵字規劃工具、長尾關鍵字以及Google Search Console來增強網站的SEO效果。
Thumbnail
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
Thumbnail
破解學習效能瓶頸:如何精準閱讀、優化研究成果與高效筆記? 你是否曾經對閱讀過後感覺徒勞無功而困擾?是否有過進行研究,卻感覺成果難以有效傳遞的挫折?又或者在大量筆記中找不到所需信息,覺得筆記系統混亂無助?這篇文章將提供你三個有效的策略,助你解決上述問題,提升你的學習效能。 策略一:精準閱讀 閱讀不應是
Thumbnail
理財是讓你能夠掌握好自己的財富,投資則是讓你的財富繼續增長的工具。投資自己的思維,跟投資長期被動的ETF一樣,能越早投資,成本就越低,與其等低點,不如早一點。只有當你明白,提高月薪才有投資的底氣,正確的生涯規劃才能引導出對的理財規劃,並願意了解自己提高自己的財商思維,你才能真正掌握自己的人生。
Thumbnail
產品規劃流程時,除了要思考如何優化使用者體驗,也要思考如何減少用戶阻力,讓用戶在最「簡單、快速」的情境下完成任務,這篇想整理我看的到減少用戶阻力的方法。
Thumbnail
你所相信的都會成為真實。你對自己的所有的相信,會從意識的層面進入潛意識的層面,最終組成了「信念系統」,信念系統時時刻刻都在運作,每次你做選擇時,信念系統都會影響你的選擇,因此,好好優化保養信念系統,這樣,你每次都能夠做出正確的選擇。以下,會分享5個我用來優化保養「潛意識」和「信念系統」的心法與技巧。
Thumbnail
年底將屆,企業該如何有效進行新年度訓練規劃? 近年來疫情已重塑全球產業商模與工作型態,並展開人才爭奪大戰,促使數位科技加速應用,未來人才必將重新定義。人資此時需更關注人才策略「新需求人才定位及優化人才」是企業變革中關鍵要角! HR該如何有效將訓練與組織營運績效連結,透過年度教育訓練計劃展開並規劃符合
Thumbnail
開始教課時,最容易遇到的挑戰之一就是「備課」。 備課有很多種,有3個小時的知識型課程,或是一對一的教練課;也有2個小時的實作型課程,或是1小時的手作互動型課程。每一個課程面對不同的受眾,備課就顯得更加重要。 前面的一兩次課程在課程前幾天對我來說是最痛苦的, 將教案從零到一,不是件容易且簡單的事。 但
關鍵字研究始終是SEO過程中的第一步。在優化網站和創建活動時,行銷人員應該將其與市場研究放在同一層次上。作為初步計劃的一部分,查看行業中的哪些競爭對手正在分析其網站上的關鍵字總是一個好主意。進行Google關鍵字分析,您可以將這些分析結果與工具進行比較,以確定哪些關鍵字更常被搜尋!
Thumbnail
Facebook 廣告機制有自己的一套演算法,很多人看到廣告成效不佳時,就會想要暫停或是立即調整,但我覺得先讓那檔廣告跑個 2–3 天左右,讓它先自動優化一波後,再來做後續的調整會比較好。