上一篇文章講了 k8s使用helm打包chart並上傳到騰訊雲TencentHub,今天就講一下使用Helm部署應用並使用configMap代替asp.net core 中的appsettings.json檔案。
把Chart上傳到TencentHub之後,我們就可以透過騰訊雲的容器服務,直接部署Helm應用了。
部署Helm應用
點選新建然後選擇TencentHub,私有倉庫,就可以看到自己上傳的Chart了。填寫一下應用名稱,拉到最下方點選完成即可建立應用。
註意:如果你的yaml檔案寫的不對,如少個空格,變數引數名稱寫錯或者不存在,都無法建立成功。
可以點選新建下方那個檢視詳情,可以看到Helm應用安裝日誌,安裝失敗會提示錯誤資訊,自己跟據錯誤提示修複自己的錯誤。
成功安裝後點選應用可以檢視資源資訊和狀態
註意:Chart部署成功不代表你的服務已經成功啟動了,如果你的服務本身是有問題起不來的話,這裡不會有提示,需要自己去檢視Pod是否已經正常啟動成功。
好了,應用部署完成後,我們來試試如何讀取configMap。
讀取configMap
上篇文章沒有把config.yaml檔案的內容放出來,裡面內容如下
其中metadata中的name是必選項,namespace不寫的話預設是default,labels用於條件過濾篩選。
data就是我們的配置內容,key-value的形式存在。
—————————分割線—————————————————–
.net core呼叫k8s需要使用KubeClient,這裡我使用 https://github.com/tintoy/dotnet-kube-client 來呼叫k8s的介面。
直接使用nuget搜尋KubeClient即可找到。
KubeClient支援依賴註入。需要安裝
KubeClient.Extensions.DependencyInjection
void ConfigureServices(IServiceCollection services) { services.AddKubeClient(new KubeClientOptions { ApiEndPoint = new Uri("http://localhost:8001"), AuthStrategy = KubeAuthStrategy.BearerToken, AccessToken = "my-access-token", AllowInsecure = true // Don't validate server certificate }); }
最簡單的建立一個KubeClient方法如下:
KubeApiClient client = KubeApiClient.Create(new KubeClientOptions { ApiEndPoint = new Uri("http://localhost:8001"), AuthStrategy = KubeAuthStrategy.BearerToken, AccessToken = "my-access-token", AllowInsecure = true // Don't validate server certificate});
這裡我只是簡單讀取k8s中的configMap,至於用途下麵再講。
使用console控制檯程式編寫如下程式碼。
使用KubeApiClient獲取一個configClient,然後configClient.List()獲取k8s中的所有configMap,labelSelector和kubeNamespace都是預設可空引數,用於過濾篩選configMap。
這裡我們透過斷點可以看到,已經讀取到wechat中的configMap資訊,AppMode:Devlopment 就是我們config.yaml中data中的內容。
至此我們已經完成了.net core讀取configMap的事情了。
asp.net core中載入configMap
使用nuget安裝
KubeClient
和
KubeClient.Extensions.Configuration
在Startup.cs中的建構式新增下麵程式碼即可。
使用configMap的原因
現在asp.net core一般是使用appsettings.json檔案來讀取專案的配置資訊,這樣做非常簡單易容,但是在生產環境特別是微服務上面我們往往需要一個配置中心來管理應用配置。
目前充當配置中心的產品有很多,如攜程的Apollo,springCloud中的SpringCloudConfig,consul也可以充當配置中心。
這些都需要額外部署多一個服務,而configMap也可以實現配置中心的功能,何樂而不為呢。至於有不同意見的讀者,歡迎評論指點指點。
k8s中儲存配置資訊的不只configMap,一些敏感資訊,我們可以使用Secret,Secret以密文的方式儲存資料,避免了直接在配置檔案中儲存敏感資訊。
Pod可以透過Volume或者環境變數的方式使用configMap和Secret。
總結一下
由於自己也是剛接觸這個不久,很多都還不沒有深入理解到,就暫且說說遇到的一些問題吧……
首先最基本的,yaml格式錯誤,yaml很好用無需置疑,但是當配置資訊以多起來的時候,yaml空格的問題就容易犯了,畢竟誰不會手誤呢~~~( ͡° ͜ʖ ͡°)
一個是yaml的分號: 後面必須加上一個空格。另一個是yaml的物件層級是跟據空格劃分的,雖然沒有規定幾個空格一層,但是要同層次的空格都是必須一致的。在yaml上面慎用TAB……(o≖◡≖)
然後呢,就是Chart模板的配置資訊。
Chart模板中資源型別是透過kind區分的,然後資源的基本資訊是在metadata中描述。
比如說config.yaml中,kind是ConfigMap。
metadata中包含資源的name,namespace,labels等,雖然至於name是必須項,但是最好儘量把能寫的都寫上。
第一次操作的時候只填寫了name,然後再查詢的時候怎麼都查不出來(ノへ ̄、)然後才知道namespace不對……預設namespace是defalut 〒▽〒
然後,把namespace補上去了,然後再拉一次,出來了,但是是一次性拉取namespace下的所有configMap,沒法過濾,然後看了下API才發現可以用label過濾(;´༎ຶД༎ຶ`)
嗯,然後又補了個labels上去了╮(╯▽╰)╭
嗯,還有其他很多細節,暫時還沒去接觸,這就不說了(✿◡‿◡)
最後
最後呢,期待各位大佬指點指點
原文地址:https://www.cnblogs.com/fanshaoO/p/10406325.html
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com