目录

1、为什么需要helm?

2、helm介绍

3、helm工作流程

4、使用helm

Helm管理应用生命周期:

helm模板功能试用

helm动态传参使用

helm动态文件传参

helm版本管理

回滚

拓展命令

卸载应用:

附属

服务打包

1、为什么需要helm?

由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应

用维护和更新等面临诸多的挑战,主要面临以下问题:

• 如何将这些服务作为一个整体管理?

• 这些资源文件如何高效复用?

• 不支持应用级别的版本管理

2、helm介绍

Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前

打包好的yaml文件部署到kubernetes上。

Helm有3个重要概念:

• helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。

• Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。

• Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在

k8s中创建出真实运行的资源对象。

3、helm工作流程

4、使用helm

使用helm很简单,你只需要下载一个二进制客户端包即可,会通过kubeconfig配置(通常

$HOME/.kube/config)来连接Kubernetes。

下载Helm客户端:里面包含helm官网

wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz

tar zxvf helm-v3.2.4-linux-amd64.tar.gz

mv linux-amd64/helm /usr/bin/

即可安装成功

Helm管理应用生命周期:

• helm create 制作Chart

• helm install 部署

• helm upgrade 更新

• helm rollback 回滚

• helm uninstall 卸载

创建chart:

helm create mychart

打包chart:

helm package mychart

    • Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及

版本等。

    • values.yaml :用于存储 templates 目录中模板文件中用到变量的值。

    • charts:目录里存放这个chart依赖的所有子chart。

    • templates: 目录里面存放所有yaml模板文件。

        • NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给

用户。例如:如何使用这个 Chart、列出缺省的设置等。

        • _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。

Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改

动的字段进行模板化,可动态传入

示例

创建一个chart

helm create my-chart

进入这个chart

cd my-chart/

结构如下

创建一个测试chart文件夹

mkdir chart-demo

cd chart-demo

新建一个Chart文件

vi Chart.yaml

apiVersion: v2

name: chart-demo

description: A Helm chart for Kubernetes

type: application

version: 0.1.0 # chart的版本号

appVersion: 1.0.0 #chart应用默认的版本

保存

新建一个values.yaml

touch values.yaml

新建一个templates目录

mkdir templates

进入templates目录

cd templates

新建一个deployment.yaml

vi deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: web

  name: web

spec:

  replicas: 1

  selector:

    matchLabels:

      app: web

  strategy: {}

  template:

    metadata:

      labels:

        app: web

    spec:

      containers:

      - image: nginx

        name: nginx

        resources: {}

保存

新建一个service.yaml

vi service.yaml

apiVersion: v1

kind: Service

metadata:

  labels:

    app: web

  name: web

spec:

  ports:

  - name: 80-80

    port: 80

    protocol: TCP

    targetPort: 80

  selector:

    app: web

  type: NodePort

保存

新建一个NOTES.txt

vi NOTES.txt

随便写入一些内容,保存

新建一个_helpers.tpl

touch _helpers.tpl

新建一个templates目录

mkdir templates

此时chart_demo目录结构如下

安装tree工具查看目录结构

yum install tree -y

tree .

部署这个chart

helm install web /root/chart-demo/

命令查看可以看到已经部署成功

helm list

helm模板功能试用

Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改

动的字段进行模板化,可动态传入 

例如,现在要部署一个普通应用,它包含deployment.yaml与service.yaml

可以先将他的变量单独存入values文件中

vi values.yaml

#这里定义默认变量

name: "web2"

replicas: 1

labels:

  project: demo

  app: nginx

image:

  repository: nginx

  tag: "latest"

service:

  port: 80

  targetport: 80

  type: ClusterIP

这样,将常用参数存入values

在deployment.yaml和service.yaml中只需要引用这些参数即可,如下

引用方式如下

vi deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: {{ .Values.name }}

spec:

  replicas: {{ .Values.replicas }}

  selector:

    matchLabels:

      project: {{ .Values.labels.project }}

      app: {{ .Values.labels.app }}

  strategy: {}

  template:

    metadata:

      labels:

        project: {{ .Values.labels.project }}

        app: {{ .Values.labels.app }}

    spec:

      containers:

      - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}

        name: web

        resources: {}

vi service.yaml

apiVersion: v1

kind: Service

metadata:

  name: {{ .Values.name }}

spec:

  ports:

  - name: 80-80

    port: {{ .Values.service.port }}

    protocol: TCP

    targetPort: {{ .Values.service.targetport }}

  selector:

    project: {{ .Values.labels.project }}

    app: {{ .Values.labels.app }}

  type: {{ .Values.service.type }}

执行可以创建成功

helm install web2 /root/chart-demo/

注意:在执行部署命令后面加--dry-run即可看到渲染效果而不执行部署,如下

helm install web2 /root/chart-demo/ --dry-run

helm动态传参使用

helm除了支持参数在values传递,还支持动态传参,如下

这个命令即可动态覆盖传输,修改原chart里面的值

helm install web3 /root/chart-demo/ --set name="web3" --set image.repository=httpd --set labels.app=httpd

对应的都动态渲染了

helm动态文件传参

heml在执行时会默认读取values里面的参数,可以直接引用valus里面的参数部署项目。同时,也可以在执行命令后加--set来动态渲染,覆盖values的参数,,,同时,helm也支持将动态参数都写入一个新的文件,在执行helm时指向这个文件,他会覆盖values内的参数,如下

新建一个abc.yaml的demo

vi abc.yaml

name: "web5"

replicas: 3

labels:

  app: nginx

image:

  repository: nginx

  tag: "1.16"

service:

  type: NodePort

保存

在执行helm部署的时候引用这个文件

helm install web5 /root/chart-demo/ --set name="web4" -f abc.yaml

成功

helm版本管理

升级

更新,例如将abc.yaml中的镜像版本由1.16升级为1.17

vi abc.yaml

name: "web6"

replicas: 3

labels:

  project: ms

  app: nginx

image:

  repository: nginx

  tag: "1.17"

service:

  type: NodePort

将先前的install换成upgrade就是升级操作,

他要对已经存在的chart进行升级

helm upgrade web6 /root/chart-demo/ -f abc.yaml

通过

helm list

可以看到web6现在有两个版本

通过

helm history web6

可以看到web6过去的版本

回滚

helm与普通的deployment回滚最大区别是,helm是应用级别的,他是对整个应用的yaml进行操作,

拓展命令

回滚到上一个版本:

helm rollback web

查看历史版本:

helm history web

回滚到指定版本:

helm rollback web 2

卸载应用:

helm uninstall web

如例,这就是回滚到最开始的版本,服务名后面跟的数字就是版本号

可以看到。再看web6的历史版本后,会新出一个版本,后面显示是回滚到1版本

卸载应用:

和回滚一样,helm卸载也是应用级别的,不需要一个个服务删除,

卸载命令 

helm uninstall xxx

例如,这就是将其他pod删除

附属

helm更新时可以添加description来备注信息,如例

查看详细信息的时候可以看到description变成了我们自定义的信息,如下

helm install web7 /root/chart-demo/ --description="nginx:1.17"

服务打包

helm的chart可以直接打包并复用,如下

chart-demo是我自建的chart

通过命令将其打包

helm package chart-demo/

且这个包可以直接使用不需要解压(

此处加了set变量是因为原chart在这个环境已经运行中,name冲突)

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。