.NET Core + Kubernetes:Helm

Helm[1] 作为 Kubernetes 体系的包管理工具,已经逐渐成为了应用分发标准,在 .NET 开发中,可以理解为与 NuGet 包类似。回顾之前文章中的介绍,Kubernetes 中单个服务的部署有时会涉及到多种资源类型,如:DeployemetServiceIngressPVCConfigMapSecret 等,而通过 Helm 可以把服务相关资源打包到一个 chart 中,以 chart 为单位,进行版本管理,简化 Kubernetes 部署应用的版本控制、打包、发布、删除、更新等操作。

以下是 Helm 3 的架构图,通过 Helm Client 创建 chart ,然后把基于 chart 将相关资源在 Kubernetes 中创建,同时 chart 可被保存到 chart 仓库,进行 chart 包管理与共享。

Helm 安装与配置

Helm 3 的安装参考文档 Installing Helm[2] 简单几步即可完成,我这里采用的是 Binary Releases 方式。安装完成后需添加 chart 仓库源,有了 chart 仓库源才能进行搜索与安装。下面先添加 azurealiyun 的仓库源:

helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

经过以上配置,就可以通过 helm search repo xxxx 搜索相关 chart 包进行安装使用(和 docker search 类似)。如:

搭建 repo

这里将使用 harbor[3] 来保存 Helm chart,下载最新 harbor-offline-installer[4] 的 release 版本,解压后对 harbor.yml 进行相关修改,主要调整配置如下(如果不使用 https ,需要注释配置文件中 https 相关字段):

hostname: 192.168.124.9   # 访问地址
http:port: 8888              # 端口
chart:absolute_url: enabled

首次安装,执行以下命令(之后停止或启动执行 ./docker-compose start|stop):

./install.sh --with-clair --with-chartmuseum

安装成功后,访问  http://192.168.124.9:8888,创建名为 charts 的项目作为接下来使用的 chart 仓库。

在 Helm 中添加自建的 repo http://192.168.124.9:8888/chartrepo/charts,因为 charts 项目是私有级别,所以在添加时需要传入用户名和密码,如下:

helm repo add harbor http://192.168.124.9:8888/chartrepo/charts --username=admin --password=Harbor12345
helm repo update

创建 Chart

执行命令 helm create k8sdemo 创建名为 k8sdemo 的 chart,会生成一批文件,文件结构如下图,可以看出有些文件是我们比较熟悉的,如:deployement.yamlingress.yamlservice.yaml

├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
  • charts:存放该 chart 依赖的所有子 chart;

  • Chart.yaml:基本信息定义,如:名称、版本、描述等;

  • templates:存放模板文件,_helpers.tpl 定义变量,NOTES.txt 注释文件,yaml 文件则是各资源类型定义模板,tests 下是相关的测试模板;

  • values.yaml:定义模板中需要使用的常量,如果需要对常量进行二次处理,则需要在 _helpers.tpl 通过变量实现,如:

{{- define "k8sdemo.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

在 templates 文件夹下的模板文件中包含大量的常量、变量的引用,具体语法就不详细介绍了,基本多看两眼都能理解

k8sdemo chart 创建主要包含以下 3 个文件的调整:

values.yaml 主要修改内容如下,创建 3 个 Pod,镜像使用beckjin/k8sdemo:1.0.0 版本,以 NodePort 的方式提供服务,对外端口为 31000,其他可保持默认:

replicaCount: 3image:repository: beckjin/k8sdemopullPolicy: IfNotPresenttag: "1.0.0"service:type: NodePortport: 80nodePort: 31000

templates/deployment.yaml 主要修改健康检查的配置,默认是 / 路由,这里改成 /weatherforecast,如下:

livenessProbe:httpGet:path: /weatherforecastport: http
readinessProbe:httpGet:path: /weatherforecastport: http

templates/service.yaml 主要修改 nodePort 字段,引用常量 Values.service.nodePort,如下:

spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: httpnodePort: {{ .Values.service.nodePort }}protocol: TCPname: http

其他的几个模板文件暂无需调整,可通过查看每个 yaml 文件的具体代码,像 hpa.yamlingress.yamlserviceaccount.yaml 都是含开关控制的,默认不启用。最后可以通过 helm lint k8sdemo/ 进行语法检查,如果没问题就可以直接打包成 chart 使用了。

推送到 repo

chart 的推送这里将使用 helm-push[5] 插件来完成,它的作用是将创建出来的 chart 包推送到远端的 chart 仓库。由于网络上的问题,建议直接下载对应系统版本的 release 包,上传至 Helm 的插件目录,Linux 下为:/root/.local/share/helm/plugins/

└── helm-push├── bin│   └── helmpush├── helm-push_0.8.1_linux_amd64.tar.gz├── LICENSE└── plugin.yaml

将 k8sdemo 文件夹进行打包,生成 k8sdemo-1.0.0.tgz

helm package k8sdemo/

推送到 harbor

helm push k8sdemo-1.0.0.tgz harbor

推送成功后在 charts 项目的 Helm Charts 下会有出现对应的 chart 包:

安装 Chart

在进行安装使用前,需要先进行 helm repo update 操作,不然获取不到最新的内容,另外可执行命令 helm search repo k8sdemo 查看结果:

执行命令 helm install k8sdemo harbor/k8sdemo 进行安装,最终会输出如下内容,这部分信息其实是在 NOTES.txt 中定义的。我们可以根据提示信息执行命令,获取服务访问地址,当然也可以直接通过 kubectl get services 查看。

升级

如果 chart 需要升级,可修改 Chart.yaml 中的  version 字段,重新打包并推送,然后 helm repo update 更新 chart 仓库,最后执行 helm upgrade k8sdemo harbor/k8sdemo 进行升级。

回滚

通过 helm history k8sdemo 查看历史版本,然后执行 helm rollback k8sdemo 版本号 即可回滚到之前的版本。

参考资料

[1]

Helm: https://helm.sh/

[2]

Installing Helm: https://helm.sh/docs/intro/install/

[3]

harbor: https://github.com/goharbor/harbor

[4]

harbor-offline-installer: https://github.com/goharbor/harbor/releases

[5]

helm-push: https://github.com/chartmuseum/helm-push

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

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

相关文章

vue项目中引入阿里图标iconfont

vue如何在创建好的项目中引入阿里图标iconfont呢,涉及到以下几个步骤: 1、首先先到阿里图标官方网站https://www.iconfont.cn/,先对账户进行登录,登录完成后任意选择几个图标加入购物车 2、加入购物车后,点击页面最右…

78. 子集022(回溯法)

一:题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:…

vue项目中使用vue-router进行路由配置及嵌套多级路由

在vue项目中,很多时候我们需要二级路由或者三级路由来跳转页面,但大部分需求下我们都只用到了二级路由,有小伙伴就会发现,用到三级路由的时候,就会突然不知所措,是有新的方法呢,还是跟二级路由配…

解决流氓软件方法(亲测有效)

一:问题描述 本来我想在百度上下载一个API文档,我当然知道是取官网上下载了,但是我想要的是中文版,所以我就搜啊搜,搜到脚本之家 ,那里面可以下载,我记得以前在里面下载过东西,以为安全就去下载…

.NET Core:跨平台和开源,让我在框架中脱颖而出

自从 2016 年微软发布了 .NET Core 1.0,至今 4 年的时间里,.NET Core 历经 7 个正式版本和几十个 Preview 版本。.NET Core 作为最通用的框架,和其他软件框架不同的是,它面向 Windows、Linux 和 MacOS 多个平台,在桌面…

vue实现侧边折叠菜单栏手风琴效果

在我们做管理后台亦或是产品流程时,总是需要一个菜单栏或者导航栏来架起我们的产品架构,那么,如何用vue实现侧边折叠导航栏呢?接下来将一一介绍。 请先看效果演示图。 步骤1:先架构整个页面的布局,撰写html…

程序员过关斩将--解决分布式session问题

微信搜一搜架构师修行之路session 说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过。session 这个词,其实是一个抽象的概念,它不像 Cookie 那样有着明确的定义。当大多数程序员谈论 session 的时候,可能…

如何将nodejs项目程序部署到阿里云服务器上

将nodejs项目程序部署到阿里云服务器上一、概述二、具体步骤1、拥有自己的服务器2、下载Xshell3、 oneinstack配置web环境4、 XShell连接远程主机5、更新系统软件6、在服务器上安装node环境7、部署项目到服务器上8、安装pm2并启动nodejs项目三、快捷指令1、linux的常用命令2、p…

101. 对称二叉树023(BFS)

一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullpt…

中移动完成透镜天线远距覆盖和降本增效试点

日前,中国移动研究院在官微上正式发布了《新型透镜天线进行首次高铁覆盖实验》一文。中国移动研究院、中国移动甘肃公司与西安海天天线科技股份有限公司联合开展的人工介质圆柱透镜天线在高铁、高速等线状纵深领域的长距覆盖取得突破性进展。两年以来,铁…

基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)

1、安装软件 编程工具:Notepad 运行环境:phpEnv 2、用phpEnv建立本地运行环境 (1)官方下载phpEnv,运行phpEnv,启动服务。服务启动之后,apache和mysql变绿。如下图所示: &#xff0…

在idae中为什么用Module创建一个新的Maven项目的时候会被卡死

一:问题描述 然后就会卡死, 二:问题解决 我们会发现这里的路径是有问题的,idea自带的maven会卡死我们,因为下载jar包的速度慢的惊人 将其改为我们自己maven路径,下载速度会很快,便不会出现卡死的现象&a…

ASP.NET Core Blazor Webassembly 之 数据绑定

上一次我们学习了Blazor组件相关的知识(Asp.net Core Blazor Webassembly - 组件)。这次继续学习Blazor的数据绑定相关的知识。当代前端框架都离不开数据绑定技术。数据绑定技术以数据为主导来驱动UI界面,用户对数据的修改会实时提现在UI上&a…

PHP做二次开发:本机安装ThinkCMF系统

使用工具:phpEnv、TortoiseGit 具体步骤: 1.获取thinkcmf源代码 2.修改Hosts文件设置虚拟域名指向本机 3.配置apache建立本地站点 4.建立数据库 5.访问本地站点开始安装 第一步:获取thinkcmf源代码 1.打开浏览器访问gitee.com,搜…

107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)

一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullpt…

PHP做二次开发:ThinkCMF门户应用安装

使用工具:phpEnv 具体步骤: 1.获取门户应用portal源码 2.安装portal代码 3.执行portal数据库文件 4.安装并启用前台模板 5.导入后台管理菜单 第一步:获取门户应用portal源码 1.打开官方网站http://kancloud.cn/thinkcmf/faq/1005840&#xf…

vector的逆序输出(神奇的vector)

一&#xff1a;直接上代码&#xff08;逆序输出&#xff09; #include<bits/stdc.h> using namespace std; int main(){vector<int> v;for(int i 0; i < 5; i){v.push_back(i); }reverse(v.begin(),v.end());for(int i 0; i < 5; i){cout << v[i] &…

初识ABP vNext(6):vue+ABP实现国际化

点击上方蓝字"小黑在哪里"关注我吧语言选项语言切换注意前言上一篇介绍了ABP扩展实体&#xff0c;并且在前端部分新增了身份认证管理和租户管理的菜单&#xff0c;在实现这两个功能模块前&#xff0c;先来解决一下界面文字国际化的问题。开始国际化&#xff08;简称 …

『软件工程1』详解软件是什么

软件基本概念一、什么是产品二、软件的双重角色三、软件的涵义及特征四、软件应用五、软件危机六、软件神话一、什么是产品 1、从用户的角度 产品实际上就是信息&#xff0c;以某种方式使得用户世界更加美好 2、从软件工程师的角度 产品实际上就是软件 二、软件的双重角色 1…

200. 岛屿数量025(BFS详解)

二&#xff1a;思路 1.这里我们使用的是BFS(广度优先搜索遍历) 2.当我们遇到一个岛屿&#xff08;‘1’&#xff09;的时候&#xff0c;我们就对其的左右四边进行广度遍历 并且标记已经访问过的结点。 3.那么我们每次遇到一个1开始广度遍历那就证明我们发现了一个岛 三:上码 …