ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 2


本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。上一篇 Part 1 中介绍了Helm的基本概念与基本使用,这一篇我们来自定义一个Chart玩玩。

自定义一个Chart

1 创建Chart

        首先,通过以下命令创建一个chart命名为mychart:

helm create mychart

  Helm会帮我们创建目录mychart,并生成各种chart文件。

  

  这里我们需要关注的是values.yaml,修改其中的内容为我们之前演示的ASP.NET Core WebAPI应用镜像:

# Default values for mychart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.replicaCount: 1image:repository: edisonsaonian/k8s-demotag: latestpullPolicy: IfNotPresentservice:type: NodePortport: 80nodePort: 31000ingress:enabled: falseresources:limits:cpu: 1memory: 228Mirequests:cpu: 100mmemory: 128Mi

  这里我们选择NodePort的方式让外部可以通过31000端口访问到API,也设置了资源限制。

  此外,我们再修改一下Templates目录下的deployment和service两个模板文件:

  (1)deployment模板:重点关注两个探针的配置

apiVersion: apps/v1beta2
kind: Deployment
metadata:name: {{ include "mychart.fullname" . }}labels:app.kubernetes.io/name: {{ include "mychart.name" . }}helm.sh/chart: {{ include "mychart.chart" . }}app.kubernetes.io/instance: {{ .Release.Name }}app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:replicas: {{ .Values.replicaCount }}selector:matchLabels:app.kubernetes.io/name: {{ include "mychart.name" . }}app.kubernetes.io/instance: {{ .Release.Name }}template:metadata:labels:app.kubernetes.io/name: {{ include "mychart.name" . }}app.kubernetes.io/instance: {{ .Release.Name }}spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"imagePullPolicy: {{ .Values.image.pullPolicy }}ports:- name: httpcontainerPort: 80protocol: TCP# 探针  检测项目是否存活livenessProbe:httpGet:path: /api/valuesport: http# 探针  检测项目是否启动成功readinessProbe:httpGet:path: /api/valuesport: httpinitialDelaySeconds: 30periodSeconds: 60resources:
{{ toYaml .Values.resources | indent 12 }}{{- with .Values.nodeSelector }}nodeSelector:
{{ toYaml . | indent 8 }}{{- end }}{{- with .Values.affinity }}affinity:
{{ toYaml . | indent 8 }}{{- end }}{{- with .Values.tolerations }}tolerations:
{{ toYaml . | indent 8 }}{{- end }}

  (2)service模板:重点关注NodePort的配置


apiVersion: v1
kind: Service
metadata:name: {{ include "mychart.fullname" . }}labels:app.kubernetes.io/name: {{ include "mychart.name" . }}helm.sh/chart: {{ include "mychart.chart" . }}app.kubernetes.io/instance: {{ .Release.Name }}app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: http# 添加nodePortnodePort: {{ .Values.service.nodePort }}protocol: TCPname: httpselector:app.kubernetes.io/name: {{ include "mychart.name" . }}app.kubernetes.io/instance: {{ .Release.Name }}

   编写完成后,通过 helm lint 可以帮助我们快速验证是否有语法错误:

  

2 安装Chart

        没有语法错误检测之后,便可以开始安装Chart了,正式安装之前我们可以通过以下命令来模拟安装,它会输出每个模板生成的yaml内容,帮助你检查生成的yaml内容是否是你想要的或者正确的。

helm install --dry-run --debug

  然后,这里我们选择本地安装Chart:

helm install mychart -n edc-api-release --namespace=aspnetcore

  只需要简单的一句话,就可以将chart部署到K8S集群中了,下面我们通过在外部访问NodePort 31000端口来验证一下是否部署成功:

  (1)Node 1  

  (2)Node 2   

   两个Node节点都可以访问到,证明部署成功!

3 添加Chart到仓库

        通过测试之后,我们的Chart就可以发布到仓库中供团队成员使用了,像阿里云、腾讯云等云服务商都已经提供了完善的Helm远程仓库,我们也可以自己搭建一个仓库,任何的Web Server其实都可以作为一个chart仓库。

  下面我们在k8s-master上启动给一个httpd容器,让它来作为我们的本地chart仓库。

docker run -d -p 8080:80 \
-v /var/www:/usr/local/apache2/htdocs/ \
httpd

  然后,我们将mychart进行打包,helm会将其打包为一个tgz包:

helm package mychart

  然后,我们为mychart包生成仓库的index文件,并将其推送到本地chart仓库中:

mkdir myrepo
mv mychart-0.1.0.tgz myrepo/
helm repo index myrepo/ --url http://192.168.2.100:8080/charts

  这里我们将httpd容器中的charts目录作为chart仓库,因此需要提前创建charts目录,并将打好的包和index.yaml文件也上传到该目录中:

  

  最后,我们将新仓库添加到helm:

helm repo add edc-repo http://192.168.2.100:8080/charts
helm repo list

  

   可以看到,edc-repo已经添加到了helm中,代表可以从新的本地仓库中下载和安装mychart了!

4 使用自定义Chart

        现在我们来从本地的新仓库中下载和安装mychart:

helm install edc-repo/mychart \
-n mychart-release \ 
--namespace=aspnetcore

  安装完成后再次验证:

  (1)Node 1  

  (2)Node 2  

  如果以后仓库添加了新的chart,需要使用以下命令来更新本地的index文件:

helm repo update

小结

本文介绍了K8S的包管理器Helm的基本概念与安装和使用,Helm能够帮助我们像使用apt或yum那样管理安装、部署、升级和删除容器化应用,最后演示了如何为我们的ASP.NET Core API应用开发自己的chart,并在团队中共享chart。当然,关于Helm,笔者也是初学,还有很多地方没有研究,希望此文能给初学者一点帮助,谢谢!

参考资料(感谢作者们)

(1)CloudMan,《每天5分钟玩转Kubernetes》

(2)李振良,《一天入门Kubernets教程》

(3)马哥(马永亮),《Kubernetes快速入门》

(4)潘猛,《Kubernetes笔记之Helm》

(5)雪雁(心莱科技),《利用Helm简化Kubernetes应用部署(二)》

(6)周国通,《Kubernetes实战篇之Helm填坑与基本命令》

恰童鞋骚年,风华也许不再正茂,但却仍想挥斥方遒

本公众号会长期关注和分享.NET Core,Microservice,Cloud Native,DevOps等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!


点个【在看】,和更多人一起分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Vistual Studio N年,推荐2个异常捕获的技巧

点击上方“dotNET全栈开发”,“设为星标”加“星标★”,每天11.50,好文必达全文约1600字,预计阅读时间3分钟这个n到底是多少年?宇宙第一开发IDE Visual Studio的调试功能非常强大,平常工作debug帮助我们解决…

LeetCode动态规划 斐波那契数

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n > 1 给你 n &a…

Magicodes.Sms短信库的封装和集成

简介Magicodes.Sms是心莱团队封装的短信服务库,已提供Abp模块的封装。Nuget新的包开始使用如果使用Abp相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:1.引用对应的Nuget包如:2.添加模…

Magicodes.IE编写多框架版本支持和执行单元测试

背景很多情况下,我们编写了一些工具库之后,往往在某些框架版本中会出现一些问题,比如本人最近写的一个导入导出的工具库Magicodes.IE就出现了以下问题:(GitHub:https://github.com/xin-lai/Magicodes.IE&am…

2019全球AI训练营五地再同发

不觉已过小大寒,虽然天气渐冷,但我们学习的热情却愈加高涨。因为由MVP发起主办的、2019年的全球AI训练营又要在北京、上海、广州、杭州、宁波五个地方同时举办了!去年取得巨大成功的全球活动,今年参与举办的国家地区/城市更是高达…

NLog自定义Layout Renderer

更多精彩内容请关注我们长话短说前文《解剖HttpClientFactory,自由扩展HttpMessageHandler》主要讲如何为HttpClientFactory自定义HttpMessageHandler组件, 现在完成课后的小作业: 将重点日志字段显示到Nlog的Layout Renderer上本文自定义一个NLog Layo…

一文了解Nuget的使用

Nuget介绍官网定义:NuGet是.NET的软件包管理器(免费)。NuGet客户端工具提供了生成和使用软件包的能力。NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库。简单来说,nuget包解决了dll引用的问题,开发者…

.NET 应用程序支持直接调用 WebAssembly 模块

WebAssembly Runtime 现已添加 .NET Core API,开发者可直接在 .NET 应用程序中调用 WebAssembly 模块。Mozilla 宣布由 Bytecode Alliance 创建的 Wasmtime(WebAssembly runtime)现已添加处于早期预览版状态的 .NET Core API,这就…

《RPA、AI、.NET Core 与未来》-中国.NET开发者峰会

未 来第四次工业革命,催生了数字自动化劳动,RPA 与 AI 技术的融合,成为智能信息社会的重要环节。当下RPA平台主要采用.NET Framework框架,也限制了 RPA 只用于 Windows 平台。.NET Core 的开放与跨平台特性赋予RPA更大发展空间。…

浅议gRPC的数据传输机制和回调机制

本文来自DotNET技术圈作者:溪源一、引子如您所知,gRPC是目前比较常见的rpc框架,可以方便的作为服务与服务之间的通信基础设施,为构建微服务体系提供非常强有力的支持。而基于.NET Core的gRPC.NET 组件截至2019年11月30日的最新版本…

如何在 Visual Studio 2019 中连接中国版 Azure

点击上方蓝字关注“汪宇杰博客”导语做国内项目很可能用到中国版的 Azure,即世纪互联运营的 azure.cn。然而 Visual Studio 2019 默认连接的是国际版的 Azure,如何添加中国版订阅呢?差点9966年前我曾经写过一篇《图解:如何在Visua…

k8s 使用 Init Container 确保依赖的服务已经启动

k8s 使用 Init Container 确保依赖的服务已经启动Intro最近 helm 3 正式发布了,dotnetcore 3.1 也正式发布了,最近打算把我的活动室预约项目做一个升级,项目已经升级到了 dotnetcore 3.1,最近几天则在准备把项目打包一个 helm 包&…

dotNET面试题汇总系列连载(1):基础语法

点击上方“dotNET全栈开发”,“设为星标”加“星标★”,每天11.50,好文必达全文约4000字,预计阅读时间8分钟马上要到2020年了,这里整理一个.NET 工程师面试题系列,希望年底或者明年金三银四跳槽的程序猿们带…

Blazor 版 Bootstrap Admin 通用后台权限管理框架

前言上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能。本篇文章带来的是微软最新出的 Blazor 版本的 NET Core 通用权限管理系统Blazor 简介至于 Blazor 是什么,Blazor 的优缺点小伙伴们可以…

xms跨平台基础框架 - 基于.netcore

背景鄙人经过多年开发,数百个项目“打磨(折磨)”,各种国内外框架平台都有涉及,没有一款称心顺手的,原因有三,一是设计反人类,二是不开源根本无法突破框架限制,三是即使开源也是阉割版&#xff0…

如何让 Azure AD 里的应用只允许特定用户登录

点击上方蓝字关注“汪宇杰博客”导语我的博客系统支持 Azure Active Directory 身份认证,然而用VS点点鼠标配出来的 Azure 应用,默认情况下会允许所有 AAD 内的用户访问,如何限制为只让特定用户访问呢?背景情况其实最近&#xff0…

程序员:这10种糟糕的程序命名,你遇到过几个?

点击上方“dotNET全栈开发”,“设为星标”加“星标★”,每天11.50,好文必达全文约2300字,预计阅读时间4分钟有人问:规范的命名风格真的能让你程序员少出bug?当遇到这方面的教训时,就会想到这句话…

.Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换

1.什么是API网关API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API。它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等。API网关方式的核心要…

【STM32】STM32学习笔记-TIM定时中断(13)

00. 目录 文章目录 00. 目录01. TIM简介02. 定时器类型03. 基本定时器04. 通用定时器05. 高级定时器06. 定时中断基本结构07. 预分频器时序08. 计数器时序09. 计数器无预装时序10. 计数器有预装时序11. RCC时钟树12. 附录 01. TIM简介 TIM(Timer)定时器…

你知道怎么使用DebugView查看调试信息吗?

简介 DebugView是sysinternals工具集中的一款用来查看调试信息的工具。不管你是内核开发人员还是应用程序开发人员,都会用到这款神器。先简单看看DebugView可以干什么吧。可以查看应用程序输出的调试信息。可以查看驱动程序输出的调试信息。可以查看本地机器的调试信…