kubernetes系列(十六) - Helm安装和入门

1. helm简介#

1.1 为什么需要helm#

在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment,service,configMap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂.

helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理

1.2 helm中几个概念#

Helm可以理解为Kubernetes的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

  • Chart: 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义

可以理解为docker的image

  • Release: 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart可以安装很多次。每次安装都会创建一个新的release

可以理解为docker的container实例

  • Repository: 用于发布和存储 Chart 的仓库。

1.3 helm用途#

做为Kubernetes的一个包管理工具,Helm具有如下功能:

  • 创建新的chart
  • chart打包成tgz格式
  • 上传chartchart仓库或从仓库中下载 chart
  • Kubernetes集群中安装或卸载chart
  • Helm管理安装的chart的发布周期

2. helm安装#

  • 注意:这里安装的是helm v3.2.4,如需下载更新的版本,可以至github官方repo选择

https://github.com/helm/helm/tags

Copy
# 如无需更换版本,直接执行下载 wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz # 解压 tar -zxvf helm-v3.2.4-linux-amd64.tar.gz # 进入到解压后的目录 cd linux-amd64/ # 赋予权限 chmod a+x /usr/local/bin/helm # 查看版本 helm version

3. helm的基本使用#

  • 注意这里的使用是针对Helm v3,因为v3版本和v2某些命令方面差距蛮大的,不完全兼容!!所以针对v2的操作这里就不赘述了

3.1 安装chart仓库里面的chart#

可以直接使用官方的chart仓库或者其他仓库来安装一些chart

https://hub.helm.sh

  • 下面以官方仓库的一个redis为例

https://hub.helm.sh/charts/choerodon/redis

Copy
# 添加仓库 helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n # 安装 helm install choerodon/redis --version 0.2.5

安装完成! 有没有很简单!!

3.2 创建自定义的chart#

这一节介绍以下如何自定义一个chart,并应用与平时项目中

3.2.1 文件目录结构#

Copy
. ├── Chart.yaml ├── templates | ├── deployment.yaml | └── service.yaml ├── values.yaml

一个基本的自定义chart的文件目录结构大概是如上:

  • Chart.yaml: 定义当前chart的基本metadata, 比如name,tag啥的
  • templates: 这个文件夹下放当前chart需要的一些yaml资源清单
    • 资源清单支持变量模版语法
  • values.yaml: 定义变量,可被template下的yaml资源清单使用

3.2.2 自定义chart的示例#

第一步: 准备自定义chart相关文件

Copy
# 1. 新建一个文件夹demo存放chart mkdir demo && cd demo && mkdir templates # 2. 新建Chart.yaml cat << EOF > Chart.yaml name: hello-world version: 1.0.0 EOF # 3. 新建./templates/deployment.yaml # 注意image部分使用了变量的模板语法,可以动态插入 cat << EOF > ./templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: tocgenerator-deploy labels: app: tocgenerator-deploy spec: replicas: 1 selector: matchLabels: app: tocgenerator-server template: metadata: labels: app: tocgenerator-server spec: containers: - name: tocgenerator image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePullPolicy: IfNotPresent ports: - containerPort: 80 EOF # 4. 新建./templates/service.yaml cat << EOF > ./templates/service.yaml apiVersion: v1 kind: Service metadata: name: tocgenerator-svc spec: type: NodePort selector: app: tocgenerator-server ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30075 EOF # 5. 新建values.yaml cat << EOF > values.yaml image: repository: lzw5399/tocgenerator tag: '951' EOF

第二步: 使用上面的自定义chart

Copy
# 将chart实例化成release # 格式:helm install [RELEASE-NAME] [CHART-PATH] helm install testname . # 查看release helm ls # 安装成功!!

3.3 helm的基本操作补充#

3.3.1 查看release#

Copy
# 列出已经部署的Release helm ls # 查询一个特定的Release的状态 helm status <RELEASE_NAME> # 查看被移除了,但保留了历史记录的release helm ls --uninstalled

3.3.2 安装release#

Copy
# 安装 helm install <RELEASE-NAME> <CHART-PATH> # 命令行指定变量 helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>

3.3.3 更新release#

Copy
# 更新操作, flag是可选操作 helm upgrade [FLAG] <RELEASE> <CHART-PATH> # 指定文件更新 helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH> # 命令行指定变量 helm upgrade --set foo=bar --set foo=newbar redis ./redis

3.3.4 卸载release#

Copy
# 移除Release helm uninstall <RELEASE_NAME> # 移除Release,但保留历史记录 # 可以通过以下查看:helm ls --uninstalled # 可以通过以下回滚:helm rollback <RELEASE> [REVISION] helm uninstall <RELEASE_NAME> --keep-history

3.3.5 回滚release#

Copy
# 更新操作, flag是可选操作 helm upgrade [FLAG] <RELEASE> <CHART-PATH>
posted @   宝树呐  阅读(4365)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
CONTENTS