本文目錄一覽:
- 1、etcd為python提供哪些api介面
- 2、筆記本etcd什麼意思
- 3、如何在Kubernetes中部署一個高可用的PostgreSQL集群環境
- 4、kubernetes的master節點和node節點
- 5、api介面和python庫的區別是什麼?
etcd為python提供哪些api介面
python有個etcd的庫,可以網上搜下看下這個庫的使用以及它開發的api介面,
不過之前go使用etcd的時候,是調用etcd本身的rest api,沒有使用第三方的etcd的庫
etcd的api文檔github上有的,搜下這個coreos/etcd
你可以選擇自己喜歡的方式
筆記本etcd什麼意思
鍵值存儲倉庫,用於配置共享和服務發現。
擴展知識:etcd(讀作 et-see-dee)是一種開源的分散式統一鍵值存儲,用於分散式系統或計算機集群的共享配置、服務發現和的調度協調。etcd 有助於促進更加安全的自動更新,協調向主機調度的工作,並幫助設置容器的覆蓋網路。
etcd 是許多其他項目的核心組件。最值得注意的是,它是 Kubernetes 的首要數據存儲,也是容器編排的實際標準系統。使用 etcd, 雲原生應用可以保持更為一致的運行時間,而且在個別伺服器發生故障時也能正常工作。應用從 etcd 讀取數據並寫入到其中;通過分散配置數據,為節點配置提供冗餘和彈性。
如何在Kubernetes中部署一個高可用的PostgreSQL集群環境
雖然 kubernetes 社區一直在努力使得有狀態應用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩定的域名訪問和存儲訪問。但鑒於 MySQL 部署運維的多樣性和複雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰。
1、業務流量入口的配置方式
傳統虛擬機環境下,我們通過虛IP的方式,讓業務應用都配置事先定義的一個虛IP為鏈接資料庫的地址,然後由高可用服務保證虛IP始終能被路由到master資料庫。在kubernetes中,出現了一層網路插件屏蔽了底層網路拓撲,高可用服務管理虛IP的方式需要隨之適應調整,比如通過service結合標籤完成虛IP的漂移,但service本身是kubernetes提供的一項功能,其可靠性和性能都取決於kubernetes服務的穩定。以性能來說,service是kubeproxy組件通過配置iptables實現的,當iptables規則較多時不可避免的會產生時延,需要我們針對性的解決。
2、容器隔離帶來的監控視野問題
在 kubernetes 中,如果將 MySQL 製作為 container 運行在一個 pod 中,container 會將 MySQL 進程和運行環境隔離在一個單獨的 namespace 中。監控組件在獲取 MySQL 的一些 metirc 時,可能不得不進入與 MySQL 同一個 namespace 中,在部署和設計監控組件時需要考慮到這些限制。
3、存儲在 kubernetes 中,支持配置各種不同的存儲。
如果使用本地存儲 local persistent volume,則需要綁定 MySQL 在一個固定的節點,這就完全浪費了 kubernetes 靈活調度的天然優勢;而如果使用遠程共享存儲,確實是將 MySQL 進程與其存儲完全解耦,使得 MySQL 進程可以在任意節點調度,然而考慮到高 I/O 吞吐量的情況,就不是那麼美好了。設計時需要考量遠程存儲是否能夠滿足 MySQL 的帶寬要求。
4、高可用/備份恢復
kubernetes 提供的 statefulset 控制器只能提供最基本的部署,刪除功能,無法實現完善的 MySQL 集群高可用/備份恢復操作。對於有狀態應用的部署,仍需要定製開發,所以多數公司提供了定製的 operator 來完成應用容器的管理。比如 etcd operator,MySQL operator,後文將為大家詳述我測試使用 MySQL operator 的一些記錄。
kubernetes的master節點和node節點
kubernetes集群中的master節點是集群的控制節點, 負責整個集群的管理和控制。執行的控制命令都是發送給master節點。 Master節點上運行的主要組件如下:
Node節點時kubernetes集群中的工作負責節點,Node上的工作負載由master分配, 當某個Node宕機時,Master會將上面的工作負載轉移到其他節點上去, Node節點上運行的主要組件如下:
上圖為kubernetes中所有組件一起工作時的示意圖,由此我們可以得出以下幾個通信流程,
根據上面節點通信的介紹我們會產生一個疑問, 這個看起來好複雜的樣子。 臣妾看不懂呀。 如果想進一步了解集群中詳細的工作流程請移駕 kubectl創建pod背後發生了什麼 探索背後的秘密
要求結果為所有的 Kubernetes Master 伺服器沒有單點故障,任何一台伺服器當機均不影響Kubernetes的正常工作。
為了實現沒有單點故障的目標,需要為以下幾個組件建立高可用方案:
etcd是Kubernetes當中唯一帶狀態的服務,也是高可用的難點。Kubernetes選用etcd作為它的後端數據存儲倉庫正是看重了其使用分散式架構,沒有單點故障的特性。
雖然單節點的etcd也可以正常運行。但是推薦的部署方案均是採用3個或者5個節點組成etcd集群,供Kubernetes使用。
etcd的高可用基本有三種思路:
一是使用獨立的etcd集群,使用3台或者5台伺服器只運行etcd,獨立維護和升級。甚至可以使用CoreOS的 update-engine 和 locksmith ,讓伺服器完全自主的完成升級。這個etcd集群將作為基石用於構建整個集群。 採用這項策略的主要動機是etcd集群的節點增減都需要顯式的通知集群,保證etcd集群節點穩定可以更方便的用程序完成集群滾動升級,減輕維護負擔。
二是在Kubernetes Master上用static pod的形式來運行etcd,並將多台Kubernetes Master上的etcd組成集群。 在這一模式下,各個伺服器的etcd實例被註冊進了Kubernetes當中,雖然無法直接使用 kubectl 來管理這部分實例,但是監控以及日誌搜集組件均可正常工作。在這一模式運行下的etcd可管理性更強。
三是使用CoreOS提出的 self-hosted etcd方案 ,將本應在底層為Kubernetes提供服務的etcd運行在Kubernetes之上。 實現Kubernetes對自身依賴組件的管理。在這一模式下的etcd集群可以直接使用 etcd-operator 來自動化運維,最符合Kubernetes的使用習慣。
這三種思路均可以實現etcd高可用的目標,但是在選擇過程中卻要根據實際情況做出一些判斷。簡單來講預算充足但保守的項目選方案一, 想一步到位並願意承擔一定風險的項目選方案三。折中一點選方案二。各個方案的優劣以及做選擇過程中的取捨在這裡就不詳細展開了,對這塊有疑問的朋友可以私下聯繫交流。
apiserver本身是一個無狀態服務,要實現其高可用相對要容易一些,難點在於如何將運行在多台伺服器上的apiserver用一個統一的外部入口暴露給所有Node節點。
說是難點,其實對於這種無狀態服務的高可用,我們在設計業務系統的高可用方案時已經有了相當多的經驗積累。需要注意的是apiserver所使用的SSL證書要包含外部入口的地址,不然Node節點無法正常訪問apiserver。
apiserver的高可用也有三種基本思路:
一是使用外部負載均衡器,不管是使用公有雲提供的負載均衡器服務或是在私有雲中使用 LVS 或者 HaProxy 自建負載均衡器都可以歸到這一類。 負載均衡器是非常成熟的方案,在這裡略過不做過多介紹。如何保證負載均衡器的高可用,則是選擇這一方案需要考慮的新問題。
二是在網路層做負載均衡。比如在Master節點上用 BGP 做 ECMP ,或者在Node節點上用 iptables 做NAT都可以實現。採用這一方案不需要額外的外部服務,但是對網路配置有一定的要求。
三是在Node節點上使用反向代理對多個Master做負載均衡。這一方案同樣不需要依賴外部的組件,但是當Master節點有增減時,如何動態配置Node節點上的負載均衡器成為了另外一個需要解決的問題。
從目前各個集群管理工具的選擇來看,這三種模式都有被使用,目前還沒有明確的推薦方案產生。建議在公有雲上的集群多考慮第一種模式,在私有雲環境中由於維護額外的負載均衡器也是一項負擔,建議考慮第二種或是第三種方案。
這兩項服務是Master節點的一部分,他們的高可用相對容易,僅需要運行多份實例即可。這些實例會通過向apiserver中的 Endpoint 加鎖的方式來進行leader election, 當目前拿到leader的實例無法正常工作時,別的實例會拿到鎖,變為新的leader。
嚴格來說kube-dns並不算是Master組件的一部分,因為它是可以跑在Node節點上,並用 Service 向集群內部提供服務的。但在實際環境中, 由於默認配置只運行了一份kube-dns實例,在其升級或是所在節點當機時,會出現集群內部dns服務不可用的情況,嚴重時會影響到線上服務的正常運行。
為了避免故障,請將kube-dns的 replicas 值設為2或者更多,並用 anti-affinity 將他們部署在不同的Node節點上。這項操作比較容易被疏忽,直到出現故障時才發現原來是kube-dns只運行了一份實例導致的故障。
上面介紹了Kubernetes Master各個組件高可用可以採用的策略。其中etcd和kube-apiserver的高可用是整個方案的重點。由於存在多種高可用方案,集群管理員應當根據集群所處環境以及其他限制條件選擇適合的方案。
這種沒有絕對的通用方案,需要集群建設者根據不同的現狀在多個方案中做選擇的情況在Kubernetes集群建設過程中頻頻出現, 也是整個建設過程中最有挑戰的一部分。容器網路方案的選型作為Kubernetes建設過程中需要面對的另外一個大問題也屬於這種情況,今後有機會再來分享這個話題。
在實際建設過程中,在完成了上述四個組件的高可用之後,最好採取實際關機檢驗的方式來驗證高可用方案的可靠性,並根據檢驗的結果不斷調整和優化整個方案。
此外將高可用方案與系統自動化升級方案結合在一起考慮,實現高可用下的系統自動升級,將大大減輕集群的日常運維負擔,值得投入精力去研究。
雖然本篇主要在講Kubernetes Master高可用的方案,但需要指出的是,高可用也並不是必須的,為了實現高可用所付出的代價並不低, 需要有相應的收益來平衡。對於大量的小規模集群來說,業務系統並沒有實現高可用,貿然去做集群的高可用收益有限。這時採用單Master節點的方案,做好etcd的數據備份,不失為理性的選擇。
api介面和python庫的區別是什麼?
API
介面屬於一種操作系統或程序介面,而後兩者都屬於直接用戶介面。
有時公司會將
API
作為其公共開放系統。也就是說,公司制定自己的系統介面標準,當需要執行系統整合、自定義和程序應用等操作時,公司所有成員都可以通過該介面標準調用源代碼,該介面標準被稱之為開放式
API。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308795.html