上一篇文章讲了 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

部署Chart应用并使用.net core读取Kubernetes中的configMap相关推荐

  1. 从零开始在 Windows 上部署 .NET Core 到 Kubernetes

    本章节所有代码已上传至:https://github.com/Seanwong933/.NET-Core-on-Kubernetes 文末附有本人遇到过的 Docker 和 k8s 的故障排除. 本文 ...

  2. NET CORE读取Excel.xlsx单元格内的图片,并关联当前业务ID推送图片到指定服务器...

    NET CORE读取Excel.xlsx单元格图片的场景,一般是批量导入业务数据,例如:药品的图片,医师资格证,商品上架.商家营业资质.水果信息.用户头像等等 这里我截个图,图文并茂更好理解 特别声明 ...

  3. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例

    在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...

  4. SpringBoot 读取项目中静态资源文件

    目录 一. ClassPathResource 二. DefaultResourceLoader 三. PathMatchingResourcePatternResolver 四. ResourceU ...

  5. SpringBoot 读取配置文件中参数全面教程

    一.简介 在日常开发使用 SpringBoot 框架时,经常有一些配置信息需要放置到配置文件中,我们需要手动读取这些配置到应用中进行一些逻辑,这里整理了一些常用读取配置的方法,简单介绍一下. 1.Sp ...

  6. 第五节13读取配置中的连接字符串

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. CloudBees发布“Jenkins X”:面向部署到Kubernetes中的现代云应用的CI/CD解决方案

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ James Strachan和CloudBees团队发布了开源的"Jenkins ...

  8. c efcore.mysql_EF Core在mysql中调用存储过程

    EF Core在mysql中调用存储过程,博主找了很多,然而大多都是EF Core+SqlServer的或者EF Core+Oracle的,并没有正对Mysql的Pomelo驱动的,所以查找了一些资料 ...

  9. async/await 的基本实现和 .NET Core 2.1 中相关性能提升

    前言 这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话. 在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 ...

最新文章

  1. 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
  2. prepare 和 row_count()一起使用的误区
  3. Flex实现分页显示功能(mx:DataGrid)
  4. 你会因为贫富差距远离曾经的好友吗?
  5. 关于元素绝对定位的父元素问题
  6. python语句分为什么_Python为什么使用缩进来分组语句?
  7. c语言编写python库_c语言包装python程序
  8. DXperience-6.2.4 破解
  9. muduo学习笔记:net部分之实现TCP网络编程库-TcpClient
  10. 树莓派3B+ 远程下载服务器(Aria2)
  11. Revit 2022安装教程(附详细安装步骤+激活教程)
  12. 示波器常用的13个概念
  13. C++ vector去重 交集 并集
  14. 武汉java工资水平
  15. 一个蚂蚁曾经的辛酸面试历程
  16. Git可视化工具使用
  17. 黑苹果下idea启动项目慢
  18. 铅酸蓄电池含铅废水处理,沉淀系统+过滤系统+螯合树脂除铅系统,出水0.05mg/l
  19. 2022年9月青少年软件编程(Python) 等级考试试卷(一级)
  20. php停车位管理办法,深圳小区车位分配使有新规 《车位分配和管理办法》将于近期正式印发...

热门文章

  1. centos 7.x systemd service 配置方法整理
  2. 【JS第34期】BOM-window对象
  3. JAVA代码—算法基础:数独问题(Sodoku Puzzles)
  4. 【数学题】男女的比例
  5. 运营商在万物互联扮演什么角色?上海联通NB-IoT奠定基础
  6. 页面获取Spring Security登录用户
  7. SQL Sever 性能调优
  8. 构建根文件系统(2)Busybox init 进程
  9. WPF GridControl控件的用法举例
  10. 如何限制并发的 异步IO 请求数量?