K8s單controller多集群監測總結——client-go

2020-12-05 蝸牛OR兔子

最近面臨一個需求,如何監控多個K8s集群的service,並將其名下的pod們的IP記錄下來,便於管理把,主要是做網絡方面的ACL。

在使用一種新的語言前,我是習慣於去看看菜鳥教程的,因為這可以讓你迅速可以寫出自己的first little pro。但是 想要更上一層就需要閱讀別人的源碼啦。對於K8s 我師傅曾說過這主要是針對接口的使用,如果真的有技術含量的部分,那肯定就是網絡部分了,網絡的實現,如何改善K8s網絡和外部的通訊。

client-go的github地址:https://godoc.org/admiralty.io/multicluster-controller,client-go裡面的examples會給我們提供一個模板,還有一些有用的函數,不用重新編寫,比如獲取kubeconfig home文件夾的HomeDir(),以及一些數據結構定義及其相關接口實現。

然後,GoDOC: https://godoc.org/admiralty.io/multicluster-controllerhttps://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1這個地方我們能夠找到我們所需數據結構定義,以及所在的包目錄等等。

本次主要監測K8s集群對象類型是service下面的pod,以service為粒度劃分,所以不能使用單獨的service監測的接口,需要使用endpoints這個對象,因為endpoints不僅監測servie本省增刪改查,還監測其下面包含的pod(Subesets)的變化,這個滿足我們對於pod IP監測的需要。主要涉及到的package如下:

實現過程及思路:

將K8s集群kubeconfig信息存入固定文件夾,將其加入環境變量,通過config.AllNamedConfigsAndNamespaces()生成config列表,遍歷該列表,形成個集群的clientset,生成serviceLookupController,加入到multicluster-controller包的manager對象,之後開始監測配置文件中讀入的service列表,相關主要內容如下:

service conf load + kubeconfig env
serviceLookupController add
new a serviceLookupController

相關焦點

  • k8s存儲系統介紹
    在k8s集群中,運行服務離不開持久化地將數據保存起來,這就涉及到k8s的存儲系統了。k8s的存儲系統在運行機制上基於docker原生的volume機制,本質上都是先將存儲掛在到主機上,經過處理後,通過docker的volume機制掛載到容器中。
  • 《蹲坑學K8S》之22-2:Kubernetes授權機制
    在ABAC中,K8s集群中的訪問策略只能跟用戶直接關聯;而在RBAC中,訪問策略可以跟某個角色關聯,具體的用戶在跟一個或多個角色相關聯。顯然,RBAC像其他新功能一樣,每次引入新功能,都會引入新的API對象,從而引入新的概念抽象,而這一新的概念抽象一定會使集群服務管理和使用更容易擴展和重用。
  • Spring 的 Controller 是單例還是多例?怎麼保證並發的安全
    默認是單例的,不要使用非靜態的成員變量,否則會發生數據邏輯混亂。正因為單例所以不是線程安全的。接下來我們再來給controller增加作用多例 @Scope("prototype")package相信大家不難發現 :單例是不安全的,會導致屬性重複使用。
  • 從零開始入門 K8s:調度器的調度流程和算法介紹
    具體的優化算法邏輯(有興趣的同學可以看 node_tree.go 的 Next 方法):在 NodeCache 中,Node 是按照 zone 進行分堆。取樣規模 = Max (100, 集群 Node 數 * 取樣比率)。
  • 擁抱雲原生,如何將開源項目用k8s部署?
    基於以上部署架構,我們只需要將otter-manager和otter-node部署到k8s上。尤其是otter-node,需要利用k8s實現節點快速水平擴展、計算性能彈性擴縮容。我們需要部署測試環境與生產環境兩套集群,而無論是otter-manager還是otter-node,都依賴於讀取 conf/otter.properties 作為配置。因此,我們需要根據環境,修改不同的otter.properties。
  • 手把手教你用 Jenkins+K8S 打造流水線環境
    因為 Jenkins 伺服器在 kubernetes 集群之外,所以我們準備以下文件才能從外面連接到 kubernetes 集群。 添加憑據,類型選擇 X.509 Client Certificate Client Key: .kube/config文件中 client-key
  • 「每日github」6:restful接口mock工具:json-server|K8s上榜等
    這個庫還是相當好用的,各種時間日期顯示操作功能齊全,且有多語言支持。這個庫建議大家收藏,你必然會用到的,到時候不需要自己重複造輪子。這也是我寫這一些列文章的初衷,避免重複造輪子。3,node這個項目就是nodeJs項目,這是之前的一個老項目地址。所以star數很多,但是沒用了,已經遷移了。
  • [易學springboot]對controller層進行單元測試
    對controller層的直接測試可能進行的較少。下面介紹一下在SpringBoot中進行Controller層的Rest請求測試的方法。這種方式只測試controller,controller裡面的一些依賴,需要你自己去mock。所以有點麻煩@WebMvcTest 不能同時使用@SpringBootTest,所以不會加載整個spring容器。
  • 英方軟體助力安信證券打造「多對多池化」高可用集群技術方案
    (如銀行等外部機構提供的應用)實踐「多對多池化」高可用集群技術的探索和實踐,介紹了單點應用從傳統的「一對一」冗餘技術,到「多對多池化」高可用集群技術的創新與落地,生產上實現了在不改變現有系統架構、應用程式並滿足固定IP等的要求下,以較低的運維人力及軟硬體投入成本,有效解決豎井式IT架構的伺服器單點故障可能引發的手動切換等問題,故障轉移時間從分鐘級縮短至秒級。
  • 無人機集群可上天,同樣可入地 ——井下無人機集群
    2、井下無人機集群系統具有覆蓋範圍廣、監 測能力強等顯著優勢,通過協同控制多架井下無人機,可有效提高監控效率,而且還可以通過無線多跳的方式解決井下無人機單架平臺無線通信距離受限的問題,有利於監測與控制信息的傳遞。
  • 基於Spring Boot + MVC 之控制器Controller實現
    在New Package面板上輸入包名controller,完成包的創建。創建成功後,會在com.zzfeng.springbootdemo下面出現一個名叫controller的包。3 創建一個控制器類右擊controller,再分別點擊New-Java Class,進入創建java類的面板。
  • Dubbo-go v1.5.1 發布,Apache Dubbo 的 Go 實現
    Dubbo-go 團隊近期發布了 Dubbo-go v1.5.1,Dubbo-go 是 Apache Dubbo 項目的 Go
  • 無人飛行器集群智能調度技術綜述
    隨著控制技術、通訊技術和智能調度技術的快速發展, 無人飛行器集群技術在區域監測與搜索、軍事偵察與打擊、信息通訊和物流運輸等領域得到廣泛應用. 無人飛行器集群技術能夠在極少人為幹預的情況下做出智能決策, 具有自組織性、協同性、並行性和安全性的優點, 是未來飛行器技術信息化、智能化發展的必然趨勢.
  • 北峰多制式數字集群系統為機場地勤部門通信保駕護航
    此外,很多機場沿用原有的模擬系統有多處覆蓋盲點,且終端功能單一僅能滿足簡單的語音傳輸、抗幹擾性差。 頻譜利用率機場業務的飛速發展迫切需要提升指揮調度系統的容量以及無線電頻率的使用效率。模擬集群系統採用的是頻分多址技術,雖然能實現多信道的動態共享,但是頻率利用率依然不高。