一、helm基础知识

1、helm定义

  • Helm是k8s服务编排实施的标准,提供多种功能来支持k8s的服务编排

  • 是k8s的包管理器,主要用于管理chart包(chart包中包含一系列yaml格式的K8S资源定义文件以及资源的配置),一个命令行工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。

2、heml三大基本概念

  • chart:代表一个helm包。包含了在k8s集群中运行应用程序、工具或服务所需的所有yaml格式的资源定义文件

  • Repository(仓库):存放和共享helm chart的地方。

  • Release(版本):基于 Chart 的部署实体,一个 Chart 被 Helm 运行后将会生成一个对应的新的 release,然后将在 k8s 中创建出真正运行的资源对象,它是一个应用级别的版本管理。

3、helm原理

helm中主要包含两类文件:模板文件和配置文件

  • 模板文件通常有多个,配置文件通常有一个(对应使用同一套模板,启动不同配置的资源对象的场景使用)

  • helm的模板文件基于text/template模板文件,可将配置文件中的值渲染进模板文件中,最终生成一个可部署的k8s的yaml格式的资源定义文件

4、helm的应用场景及作用

  • 应用场景微服务、实际项目中多服务多对象资源组合创建部署的场景

  • 作用:

    • 高效复用:通过将创建服务或资源对象的yaml文件分离为模板和配置,其中模板为yaml中静态的不怎么修改变动的部分,配置为yaml中创建不同配置服务或对象时,需要修改变动的部分。使用时可以对模板进行复用,只需要对配置进行修改即可。

    • 应用级别的版本管理:版本更新、版本回滚

helm基本操作

1、安装helm

wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
tar -xvzf helm-v3.12.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
helm version #查看helm版本
  • 安装helm命令自动补全脚本

    helm completion bash > $HOME/.helm-completion.bash
    echo ‘source $HOME/.helm-completion.bash’ >> ~/.bashrc
    bashe

2、helm说明

helm create my-chart
cd my-chart
tree
|-- charts      # 该目录保存其他依赖的 chart(子 chart)
|-- Chart.yaml  
|-- templates            # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
|   |-- deployment.yaml  # Kubernetes deployment 配置    
|   |-- _helpers.tpl     # 用于创建模板时的帮助类
|   |-- hpa.yaml         # Kubernetes hpa 配置    
|   |-- ingress.yaml    #  Kubernetes ingress 配置
|   |-- NOTES.txt       # 用户运行 helm install 时候的提示信息
|   |-- serviceaccount.yaml  # Kubernetes serviceaccount 配置
|   |-- service.yaml          # Kubernetes service 配置
|   `-- tests
|       `-- test-connection.yaml
`-- values.yaml     # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖

以上是helm自动创建的目录结构,可在templates目录中加入其他k8s对象的配置比如ConfigMap、Daemonset等

  • 查看mychart/templates/service.yaml文件

    apiVersion: v1
    kind: Service
    metadata:
    name: {{ include “my-chart.fullname” . }}
    labels:
    {{- include “my-chart.labels” . | nindent 4 }}
    spec:
    type: {{ .Values.service.type }}
    ports:
    - port: {{ .Values.service.port }}
    targetPort: http
    protocol: TCP
    name: http
    selector:
    {{- include “my-chart.selectorLabels” . | nindent 4 }}

其中{{ }}中的字段是GO template创建的自定义字段,其中mychart开头是在_helped.tpl中生成的定义。

  • 查看_helped.tpl文件

  • 查看value.yaml文件配置字段

    service:
    type: ClusterIP
    port: 80

在使用 helm install 或 helm update时,会渲染 templates/service.yaml 文件中的 {{ .Values.service.type }} 和 {{.Values.service.port }} 的值。

3、helm部署应用

(1)初始化仓库
#语法
helm repo add 仓库名称 仓库地址
#添加微软仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#添加阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 官方Chart Repository

#查看添加的repository列表
helm repo list
#查询需要的chart包
helm search repo <keyword>
helm search hub <keyword>
(2)安装一个chart
#从chart的repository安装,--generate-name参数白哦是helm自动为release命名
helm install chart-name --generate-name

#从本地chart Archive安装
helm install foo foo-1.0.0.tgz

#从一个未打包的chart路径安装
helm install foo path/to/foo

#从一个完整的URL路径安装
helm install foo https://example.com/charts/foo-1.0.0.tgz

#查看chart包的基本信息
helm show chart chart-name

#查看chart包的所有信息
helm show all chart-name

#更新chart包安装源
helm repo update

#查看release状态
helm status release-name
(3)自定义chart配置
#查看相关chart中的可配置选项
helm show values chart-name
  • 可编辑chart包内的value.yaml文件对配置进行修改

    replicaCount: 2
    revisionHistoryLimit: 20
    updateStrategy:
    type: RollingUpdate
    rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0

  • 安装chart包时指定配置文件

    helm install nginx-01 -f nginx-values.yaml

  • 安装过程有两种传递配置数据的方式–f,–values:使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。–set:通过命令行的方式对指定配置项进行覆盖 。同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在–set中覆盖的内容会被保存在 ConfigMap 中

  • 查看指定release中–set设置的值

    helm get values release-name

  • –set 的格式和限制

    • –set name=value等价yaml格式name: vaule

    • 多个值逗号隔开 --set a=b,c=d等价yaml格式a: bc: d

    • –set outer.inner=value等价yaml格式outer:inner: value

    • 列表使用{}表示,–set name={a,b,c}等价yaml格式name: - a - b - c

  • 查看当前集群安装的release

    helm ls

  • 升级release

    #升级 nginx-01 ,变更它的 Root 密码
    helm upgrade nginx-01 bitnami/nginx --set containerPorts.http=‘80’

  • 回滚版本

查看配置更新是否生效

helm get values release-revision

回滚版本(未加参数默认回滚到上一个版本)

helm rollback release-name
  • 查看特定release的修订版本历史

    [root@master-01 18-helm]# helm history test
    REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
    1 Sat Apr 13 14:18:42 2024 superseded nginx-15.4.3 1.25.3 Install complete
    2 Sat Apr 13 14:24:33 2024 superseded nginx-15.4.3 1.25.3 Upgrade complete
    3 Sat Apr 13 14:33:08 2024 deployed nginx-15.4.3 1.25.3 Rollback to 1

  • 卸载release

    helm uninstall release-name
    helm delete release-name

会删除和该版本关联的所有资源(service、deployment、pod、configmap等),包括该release所有版本历史

(4)helm常用命令
  • helm create 在本地创建新的的chart

  • helm install 安装chart

  • helm list 列出所有release

  • helm repo 列出(list)、增加(add)、更新(update)、删除(remove)chart仓库

  • helm rollback 回滚release到历史版本

  • helm pull 拉取远程chart到本地

  • helm search 使用关键词搜索chart

  • helm uninstall 卸载release

  • helm upgrade 升级release

三、chart仓库

1、使用本地存储
Make sure you have read-write access to ./chartstorage (will create if doesn’t exist on first upload)

./chartmuseum --debug --port=8080 \
  --storage="local" \
  --storage-local-rootdir="./chartstorage"

helm repo add my-repo http://127.0.0.1:8080 

helm plugin install https://github.com/chartmuseum/helm-push
helm cm-push nginx-15.4.3.tgz  my-repo
2、上传chart包到仓库
# 下载 插件
wget https://github.com/chartmuseum/helm-push/releases/download/v0.10.4/helm-push_0.10.4_linux_amd64.tar.gz
mkdir /root/.local/share/helm/plugins/helm-push -p
tar xvf helm-push_0.10.4_linux_amd64.tar.gz  -C /root/.local/share/helm/plugins/helm-push
# 上传 chart 包
helm cm-push nginx-15.4.3.tgz  my-repo
# 更新仓库 
helm repo update my-repo
[root@node-01 18-helm]# helm search repo my-repo
NAME                 CHART VERSION        APP VERSION        DESCRIPTION                                       
my-repo/nginx        15.4.3               1.25.3             NGINX Open Source is a web server that can be a...
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐