如何使用Kubernetes C#客戶端庫?
譯文【51CTO.com快譯】使用Kubernetes并非總是易事。管理集群和pod耗費精力,雖然云托管的Kubernetes實例(比如Azure的AKS)可以替你處理許多繁重的任務,但如果你在本地或自己的虛擬基礎架構上運行Kubernetes,就沒法使用它們。
這時Kubernetes API有了用武之地,因為它是Kubernetes在組件與外部控制器之間進行聯(lián)系的手段。你可以使用kubectl命令行工具與API進行聯(lián)系,也可以通過熟悉的REST(代表性狀態(tài)傳輸)調(diào)用來使用它。該API可幫助你管理工作負載、配置集群并管理應用程序和集群的行為。
像這種充分利用REST的API是有用的工具,但如果你構建自己的控制器,它們需要大量的開發(fā)。你可以借助其中一個官方的Kubernetes API客戶端(現(xiàn)在包括.NET庫),避免相關的開發(fā)開銷。除了官方客戶端外,還有非官方客戶端:如果官方版與你想要使用的方式不太相符,非官方版含有兩種替代的.NET實現(xiàn)。
.NET Kubernetes API客戶端庫簡介
官方.NET客戶端庫在GitHub上就有,由包括微軟人員在內(nèi)的一群開源開發(fā)人員管理。最新版本是1.6.21,正在開發(fā)中。可以從GitHub下載代碼并自行編譯,也可以通過NuGet將該庫作為一個名為KubernetesClient的軟件包添加到應用程序。安裝完畢后,使用加載客戶端的語句將庫添加到代碼中。該庫同時支持.NET和.NET Core,因此你可以用它編寫跨平臺應用程序以及純Windows代碼。
安裝后,你可以開始使用該庫為Kubernetes構建自己的工具,比如分布式應用程序中響應事件的特定事件處理程序??蓮谋O(jiān)聽Kubernetes命名空間上的事件入手。你可以使用C#現(xiàn)有的異步編程功能、設置等待以監(jiān)視事件并將處理程序連接到結果來執(zhí)行此操作。 Kubernetes提供了自定義資源,可用于監(jiān)視你自己的事件,并管理自定義Kubernetes基礎架構。
在Kubernetes端,先為代碼將使用的控制器構建適當?shù)淖远x資源定義。這將需要一個API版本以及資源所需的許多適當?shù)脑獢?shù)據(jù)。這些元素映射到C# Kubernetes API中的對象,可以從對象中讀取。最后,你可以在資源的spec字段和status字段中添加自己的數(shù)據(jù),自定義資源類進行管理。
一旦你有了這些元素,可以使用我們想要查看的資源的自定義資源定義將它們包裝在Kubernetes API客戶端實例中,從而構建一個控制器。一旦你有了事件處理程序的結果,就可以在Kubernetes管理應用程序的其余部分中使用它們,比如說編寫日志或修改Kubernetes實例。如果你的Kubernetes代碼將消息寫入到自定義資源的狀態(tài)字段,這樣的處理程序就可以根據(jù)需要生成新的pod。
創(chuàng)建Kubernetes客戶端
創(chuàng)建客戶端意味著為實例加載Kubernetes配置數(shù)據(jù)。你可以從默認的本地kubeconfig、某個特定文件或目前集群執(zhí)行此操作。一旦有了作為配置對象的配置數(shù)據(jù),你可以使用已加載的配置創(chuàng)建客戶端。
這為你提供了可以與Kubernetes API調(diào)用一起使用的客戶端對象。庫的GitHub存儲庫中有一組實用的示例代碼。值得復制和運行示例,因為它們可以幫助你了解如何使用.NET Kubernetes客戶端、如何理解語法以及如何使用API以處理創(chuàng)建、讀取、更新和刪除等操作。
一個有用的示例是一個25行的小程序,該程序列出了pod中的命名空間。如果你構建用于控制Kubernetes實例的應用程序,列出所有目前的命名空間很重要,因為這些命名空間讓你可以將API定位于Kubernetes基礎架構的特定部分。
處理Kubernetes API文檔
為了充分利用.NET API庫,最好花點時間閱讀Kubernetes API的文檔。雖然庫中有足夠的資源讓你入門,但是你需要深入研究官方文檔以獲得構建自己的控制器所需的詳細信息。查看其他一些API庫實現(xiàn)的文檔有所幫助。將Java或Go調(diào)用轉換成C#并不難,你可以看看別人如何使用這些API。
另一個選擇是使用kubectl文檔來查看如何在代碼中使用關鍵的kubectl動詞。在處理更復雜的任務之前,最好先使用API之類的工具來構建可自動執(zhí)行常見操作的應用程序。在編寫任何新代碼之前,你應該檢查現(xiàn)有的Kubernetes擴展是否已經(jīng)實現(xiàn)了你所考慮的功能,比如KEDA(基于Kubernetes的事件驅動型自動擴展)。
用你自己的代碼自動執(zhí)行Kubernetes操作
管理Kubernetes可能很復雜,因此很高興看到一組官方庫可以幫助你構建自己的工具以使用Kubernetes API。由于活躍的社區(qū)和非官方客戶端的相互交流,.NET API團隊很顯然在竭力提供一種實用的框架用于構建可與Kubernetes協(xié)同運行的代碼,無論在.NET Framework上還是在.NET Core上。
如果我們要構建在云原生平臺上運行的分布式應用程序所需要的新一代操作工具,這類工具必不可少。通過使用熟悉的語言,尤其是可訪問其他平臺庫的語言,我們就能構建連接Azure Pipelines、GitHub和Kubernetes等平臺的工具,使我們目前手動完成的大量工作實現(xiàn)自動化。
原文標題:How to use the Kubernetes C# client library,作者:Simon Bisson
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】