部署Chart应用并使用.net core读取Kubernetes中的configMap
上一篇文章講了?k8s使用helm打包c(diǎn)hart并上傳到騰訊云TencentHub,今天就講一下使用Helm部署應(yīng)用并使用configMap代替asp.net core 中的appsettings.json文件。
把Chart上傳到TencentHub之后,我們就可以通過騰訊云的容器服務(wù),直接部署Helm應(yīng)用了。
部署Helm應(yīng)用
點(diǎn)擊新建然后選擇TencentHub,私有倉庫,就可以看到自己上傳的Chart了。填寫一下應(yīng)用名稱,拉到最下方點(diǎn)擊完成即可創(chuàng)建應(yīng)用。
?注意:如果你的yaml文件寫的不對,如少個(gè)空格,變量參數(shù)名稱寫錯(cuò)或者不存在,都無法創(chuàng)建成功。
?可以點(diǎn)擊新建下方那個(gè)查看詳情,可以看到Helm應(yīng)用安裝日志,安裝失敗會(huì)提示錯(cuò)誤信息,自己跟據(jù)錯(cuò)誤提示修復(fù)自己的錯(cuò)誤。
成功安裝后點(diǎn)擊應(yīng)用可以查看資源信息和狀態(tài)
注意:Chart部署成功不代表你的服務(wù)已經(jīng)成功啟動(dòng)了,如果你的服務(wù)本身是有問題起不來的話,這里不會(huì)有提示,需要自己去查看Pod是否已經(jīng)正常啟動(dòng)成功。
好了,應(yīng)用部署完成后,我們來試試如何讀取configMap。
讀取configMap
上篇文章沒有把config.yaml文件的內(nèi)容放出來,里面內(nèi)容如下?
其中metadata中的name是必選項(xiàng),namespace不寫的話默認(rèn)是default,labels用于條件過濾篩選。
data就是我們的配置內(nèi)容,key-value的形式存在。
---------------------------分割線-----------------------------------------------------
.net core調(diào)用k8s需要使用KubeClient,這里我使用 https://github.com/tintoy/dotnet-kube-client 來調(diào)用k8s的接口。
直接使用nuget搜索KubeClient即可找到。
KubeClient支持依賴注入。需要安裝
KubeClient.Extensions.DependencyInjection最簡單的創(chuàng)建一個(gè)KubeClient方法如下:
這里我只是簡單讀取k8s中的configMap,至于用途下面再講。
使用console控制臺(tái)程序編寫如下代碼。
使用KubeApiClient獲取一個(gè)configClient,然后configClient.List()獲取k8s中的所有configMap,labelSelector和kubeNamespace都是默認(rèn)可空參數(shù),用于過濾篩選configMap。
這里我們通過斷點(diǎn)可以看到,已經(jīng)讀取到wechat中的configMap信息,AppMode:Devlopment 就是我們config.yaml中data中的內(nèi)容。
?至此我們已經(jīng)完成了.net core讀取configMap的事情了。
asp.net core中加載configMap
使用nuget安裝
KubeClient和
KubeClient.Extensions.Configuration在Startup.cs中的構(gòu)造函數(shù)添加下面代碼即可。
使用configMap的原因
現(xiàn)在asp.net core一般是使用appsettings.json文件來讀取項(xiàng)目的配置信息,這樣做非常簡單易容,但是在生產(chǎn)環(huán)境特別是微服務(wù)上面我們往往需要一個(gè)配置中心來管理應(yīng)用配置。
目前充當(dāng)配置中心的產(chǎn)品有很多,如攜程的Apollo,springCloud中的SpringCloudConfig,consul也可以充當(dāng)配置中心。
這些都需要額外部署多一個(gè)服務(wù),而configMap也可以實(shí)現(xiàn)配置中心的功能,何樂而不為呢。至于有不同意見的讀者,歡迎評論指點(diǎn)指點(diǎn)。
k8s中存儲(chǔ)配置信息的不只configMap,一些敏感信息,我們可以使用Secret,Secret以密文的方式存儲(chǔ)數(shù)據(jù),避免了直接在配置文件中保存敏感信息。
Pod可以通過Volume或者環(huán)境變量的方式使用configMap和Secret。
總結(jié)一下
?由于自己也是剛接觸這個(gè)不久,很多都還不沒有深入理解到,就暫且說說遇到的一些問題吧......
首先最基本的,yaml格式錯(cuò)誤,yaml很好用無需置疑,但是當(dāng)配置信息以多起來的時(shí)候,yaml空格的問題就容易犯了,畢竟誰不會(huì)手誤呢~~~( ?° ?? ?°)
一個(gè)是yaml的分號: 后面必須加上一個(gè)空格。另一個(gè)是yaml的對象層級是跟據(jù)空格劃分的,雖然沒有規(guī)定幾個(gè)空格一層,但是要同層次的空格都是必須一致的。在yaml上面慎用TAB......(o???)
然后呢,就是Chart模板的配置信息。
Chart模板中資源類型是通過kind區(qū)分的,然后資源的基本信息是在metadata中描述。
比如說config.yaml中,kind是ConfigMap。
metadata中包含資源的name,namespace,labels等,雖然至于name是必須項(xiàng),但是最好盡量把能寫的都寫上。
第一次操作的時(shí)候只填寫了name,然后再查詢的時(shí)候怎么都查不出來(ノへ ̄、)然后才知道namespace不對......默認(rèn)namespace是defalut 〒▽〒
然后,把namespace補(bǔ)上去了,然后再拉一次,出來了,但是是一次性拉取namespace下的所有configMap,沒法過濾,然后看了下API才發(fā)現(xiàn)可以用label過濾(;′??Д??`)
嗯,然后又補(bǔ)了個(gè)labels上去了╮(╯▽╰)╭
嗯,還有其他很多細(xì)節(jié),暫時(shí)還沒去接觸,這就不說了(????)
最后
最后呢,期待各位大佬指點(diǎn)指點(diǎn)
原文地址:https://www.cnblogs.com/fanshaoO/p/10406325.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的部署Chart应用并使用.net core读取Kubernetes中的configMap的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dotnet全平台下APM-Trace探
- 下一篇: EFCore Lazy Loading