本篇已加入《.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等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!

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

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

  1. Mac npm6.10.3包管理器下载依赖并运行项目的步骤

    Mac npm包管理器下载依赖并运行项目的步骤 1.使用npm config get registry查看npm的仓库地址 2.使用npm config set registry https://re ...

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

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 关于Helm Why Helm? 虽然K8S能够很好地组织和编排容器,但是缺少 ...

  3. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    本博文翻译自: https://dotnetcoretutorials.com/2017/10/25/owasp-top-10-asp-net-core-cross-site-scripting-xs ...

  4. ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理

    本博文翻译自: https://dotnetcoretutorials.com/2017/10/16/owasp-top-10-asp-net-core-broken-authentication-s ...

  5. ASP.NET Core MVC 源码学习:MVC 启动流程详解

    前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...

  6. k8s包管理器helm_eShopOnContainers 知多少[10]:部署到 K8S | AKS

    1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我 ...

  7. Asp.Net Core WebApi 身份验证、注册、用户管理

    Asp.Net Core WebApi身份验证.注册.用户管理 用户服务 用户实体.用户模型及数据上下文 应用程序设置文件 在Startup.cs中配置身份验证 参考文献 用了两天的时间研究了在Asp ...

  8. Vue3学习笔记- NPM包管理工具

    导语   这篇分享是关于Vue3 系列的学习知识的整理的开始,能够对大家学习带来帮助.也是对自己能力的一种提升. 学习大纲 认识NPM 安装NPM 使用NPM NPM中级用法 了解package.js ...

  9. windows 10 windows凭据管理器使用已记录的密码

    windows 10 windows凭据管理器使用已记录的密码 之前电脑上有用户的服务器密码,但换地方办公了,忘了密码了. 备份,然后根据提示设置密码,然后拷贝到新电脑. 然后远程输入你那个ip,就不 ...

最新文章

  1. 【linux】ubuntu14.04升级dbus到1.13.8,杯具了,无法进入桌面
  2. 动图|几张动图告诉你,工业机器人无所不能!
  3. [题解]洛谷P1119 灾后重建
  4. 从智能合约到智能资产
  5. Gradle 使用技巧(一)
  6. vue项目使用webSocket前后端建立连接推送消息
  7. 使用Redis创建分布式锁
  8. mysql 停止服务内存_服务器莫名的内存高占用 导致 MySQL 停止运行问题
  9. 在quartusii如何设计出一个 3 位的十进制加法计数器的原理以及它的设计电_从算盘到计算机,从十进制到二进制,人类计算能力的提升...
  10. 潮流设计师创作灵感|是时候设计一下蒸汽波海报了!
  11. 立即预约!Meet Qt Online中国来了
  12. Zip即将复辟?免费是WinRAR的终极武器
  13. 高等数学(下)思维导图
  14. jstl标签中的fn与fmt标签的用法
  15. CentOS 安装 无线USB网卡 RTL8192EU
  16. matlab 相位解旋绕,相位解缠绕方法-南京航空航天大学学报.PDF
  17. android WebView去广告 使用javascript脚本去除webView广告(两种思路)
  18. OrCAD Capture CIS 16.6 - 为元器件添加属性
  19. Cordova进阶:插件开发
  20. 向量 p范数的凹凸性证明

热门文章

  1. workaround for %33 texture memory bug
  2. OnIntialDialog() (Dialog应用)和 OnIntialUpdate(View应用)的 程序起始点
  3. 手机主题随手机壳改变_无线充电可以与手机壳一起使用吗?
  4. macos mojave_如何修复macOS Mojave上的模糊字体(使用亚像素抗锯齿)
  5. R 语言 相关入门资料
  6. 私活利器,docker快速部署node.js应用
  7. Openssl搭建私有CA认证
  8. CSS:CSS 在工程中改变——面向对象的CSS (OO CSS)
  9. Impala入门笔记
  10. IKVM 编程武林之.NET派的北冥神功