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等技术内容文章,还会与你分享个人生活成长的点滴及各类好书的读书笔记,希望能对你有所帮助,一起成长!
点个【在看】,和更多人一起分享!
ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 2相关推荐
- Mac npm6.10.3包管理器下载依赖并运行项目的步骤
Mac npm包管理器下载依赖并运行项目的步骤 1.使用npm config get registry查看npm的仓库地址 2.使用npm config set registry https://re ...
- ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 1
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 关于Helm Why Helm? 虽然K8S能够很好地组织和编排容器,但是缺少 ...
- ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)
本博文翻译自: https://dotnetcoretutorials.com/2017/10/25/owasp-top-10-asp-net-core-cross-site-scripting-xs ...
- ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理
本博文翻译自: https://dotnetcoretutorials.com/2017/10/16/owasp-top-10-asp-net-core-broken-authentication-s ...
- ASP.NET Core MVC 源码学习:MVC 启动流程详解
前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...
- k8s包管理器helm_eShopOnContainers 知多少[10]:部署到 K8S | AKS
1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我 ...
- Asp.Net Core WebApi 身份验证、注册、用户管理
Asp.Net Core WebApi身份验证.注册.用户管理 用户服务 用户实体.用户模型及数据上下文 应用程序设置文件 在Startup.cs中配置身份验证 参考文献 用了两天的时间研究了在Asp ...
- Vue3学习笔记- NPM包管理工具
导语 这篇分享是关于Vue3 系列的学习知识的整理的开始,能够对大家学习带来帮助.也是对自己能力的一种提升. 学习大纲 认识NPM 安装NPM 使用NPM NPM中级用法 了解package.js ...
- windows 10 windows凭据管理器使用已记录的密码
windows 10 windows凭据管理器使用已记录的密码 之前电脑上有用户的服务器密码,但换地方办公了,忘了密码了. 备份,然后根据提示设置密码,然后拷贝到新电脑. 然后远程输入你那个ip,就不 ...
最新文章
- 【linux】ubuntu14.04升级dbus到1.13.8,杯具了,无法进入桌面
- 动图|几张动图告诉你,工业机器人无所不能!
- [题解]洛谷P1119 灾后重建
- 从智能合约到智能资产
- Gradle 使用技巧(一)
- vue项目使用webSocket前后端建立连接推送消息
- 使用Redis创建分布式锁
- mysql 停止服务内存_服务器莫名的内存高占用 导致 MySQL 停止运行问题
- 在quartusii如何设计出一个 3 位的十进制加法计数器的原理以及它的设计电_从算盘到计算机,从十进制到二进制,人类计算能力的提升...
- 潮流设计师创作灵感|是时候设计一下蒸汽波海报了!
- 立即预约!Meet Qt Online中国来了
- Zip即将复辟?免费是WinRAR的终极武器
- 高等数学(下)思维导图
- jstl标签中的fn与fmt标签的用法
- CentOS 安装 无线USB网卡 RTL8192EU
- matlab 相位解旋绕,相位解缠绕方法-南京航空航天大学学报.PDF
- android WebView去广告 使用javascript脚本去除webView广告(两种思路)
- OrCAD Capture CIS 16.6 - 为元器件添加属性
- Cordova进阶:插件开发
- 向量 p范数的凹凸性证明
热门文章
- workaround for %33 texture memory bug
- OnIntialDialog() (Dialog应用)和 OnIntialUpdate(View应用)的 程序起始点
- 手机主题随手机壳改变_无线充电可以与手机壳一起使用吗?
- macos mojave_如何修复macOS Mojave上的模糊字体(使用亚像素抗锯齿)
- R 语言 相关入门资料
- 私活利器,docker快速部署node.js应用
- Openssl搭建私有CA认证
- CSS:CSS 在工程中改变——面向对象的CSS (OO CSS)
- Impala入门笔记
- IKVM 编程武林之.NET派的北冥神功