Helm

课程目标

  1. 掌握Helm的使用

课程实验

  1. Helm搭建及使用

课堂引入

  1. Helm包管理器能够让我们快速的部署k8s应用

授课进程

一、概述
0、引入

之前部署应用的基本过程,编写yaml文件 (deployment,Service,Ingress)

如果之前的方式部署单一应用,少数服务的应用,比较合适,如部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量yaml文件,版本管理也是特别不方便

使用helm可以解决哪些问题

  • 可以把这些yaml文件作为一个整体管理

  • 实现yaml文件高效复用

  • 实现应用级别的版本管理

1、简介

在 Kubernetes 中部署容器云的应用也是一项有挑战性的工作,Helm 就是为了简化在 Kubernetes 中安装部署容器云应用的一个客户端工具。通过 helm 能够帮助开发者定义、安装和升级 Kubernetes 中的容器云应用,同时也可以通过 helm 进行容器云应用的分享。在 Kubeapps Hub 中提供了包括 Redis、MySQL 和 Jenkins 等常见的应用,通过 helm 可以使用一条命令就能够将其部署安装在自己的 Kubernetes 集群中。

Helm 是管理 Kubernetes 包的工具,Helm 能提供下面的能力:

  • 创建新的 charts(图表)

  • 将 charts 打包成 tgz 文件

  • 与 chart 仓库交互

  • 安装和卸载 Kubernetes 的应用

  • 管理使用 Helm 安装的 charts 的生命周期

Helm本质就是一个k8s的包管理器

  • 简化部署 :Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程;

  • 高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置;

  • 版本控制 :Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚;

  • 模板化:Helm Charts使用YAML模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性;

  • 应用程序库:Helm具有应用程序库的概念,可以轻松地共享和重用Helm Charts,从而简化了多个应用程序的部署和管理;

  • 插件系统:Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。

2、架构

以下是Helm的工作流程(注意:这里使用的是Helm的v3版本,该版本没有了tiller并并使用更加简单和灵活的架构,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒)

image-20240617220726278

3、名词概述

Charts:是创建 Kubernetes 应用实例的信息集合,也就是一个 helm 的程序包,它包含了运行一个 k8s 应用所有需要的镜像、依赖关系和资源定义等,必要时还会包含 Service 资源定义,它类似于 yum 的 rpm 文件

Repository:Chart 仓库,用于集中存储和分发 Charts

Config:应用程序实例化安装时运行使用的配置信息

Release:chart 的运行实例,包含特定的 config

image-20240617220809355

二、部署

首先需要在本地机器或Kubernetes集群上安装Helm。可以从Helm官方网站下载适合自己平台的二进制文件,或使用包管理器安装Helm,安装教程参考https://helm.sh

https://helm.sh/zh/docs/intro/install/

1、安装客户端
[root@master ~]# wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz
[root@master ~]# tar zxvf helm-v3.2.3-linux-amd64.tar.gz    
[root@master ~]# mv linux-amd64/helm /usr/local/bin/
[root@master ~]# helm version

image-20240618184604754

2、配置仓库
# 添加阿里云仓库及bitnami仓库
[root@master01 helm]# helm repo add alicloud https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master01 helm]# helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看本地仓库列表
[root@master01 helm]# helm repo list

image-20240618184943672

3、测试验证
# 搜索MySQL的Charts包的版本
[root@master01 helm]# helm search repo mysql
# 下载到本地
[root@master01 helm]# helm pull alicloud/mysql

image-20240618185358188

三、仓库操作
1、应用部署
第一步:使用搜索命令搜索应用
第二步:根据搜索内容选择安装
第三步:查看安装之后的状态

第一步: 使用搜索命令搜索应用

[root@master1 k8s]# helm search repo nginx
NAME                  CHART VERSION    APP VERSION    DESCRIPTION                                       
aliyun/weave-cloud    0.1.2                           Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope    0.9.2            1.6.5          A Helm chart for the Weave Scope cluster visual...

第二步:根据搜索内容选择安装

helm install myapp alicloud/weave-cloud

image-20240619002736112

第三步:拉取到本地

helm pull alicloud/weave-scope

第四步:修改之后再进行安装

[root@master01 helm]# tar -xvf weave-scope-0.9.2.tgz
# 根据错误提示进行修改

第五步:查看安装之后的状态

    helm list
helm status 安装之后应用的名称
[root@master1 k8s]# helm list   #也可以使用helm ls   
NAME       NAMESPACE    REVISION    UPDATED                                    STATUS      CHART                APP VERSION
ui-test    default      1           2023-03-13 15:00:00.561399142 +0800 CST    deployed    weave-scope-0.9.2    1.6.5      
[root@master1 k8s]#

当然我们也可以通过kubectl命令查看相关的pod是否创建成功

四、自定义chart

自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境 依赖,例如 PV。 所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:

  • —values(或-f):指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件 优先

  • —set:在命令行上指定替代。如果两者都用,—set 优先级高

1、自定义chart使用
第一步:使用命令创建chart
第二步:在templates文件夹中创建两个yaml文件 
第三步:开始安装wordpress
第四步:更新应用
第五步:删除应用

第一步:使用命令创建chart

使用helm create命令创建一个新的Chart,Chart目录包含描述应用程序的文件和目录,包括Chart.yaml、values.yaml、templates目录等;

例如:在本地机器上使用helm create命令创建一个名为wordpress的Chart:

[root@master1 k8s]# helm create wordpress
Creating wordpress

在当前文件夹,可以看到创建了一个wordpress的目录,且里面的内容如下:

├── charts                #普通文件夹,刚开始创建为空
├── Chart.yaml            #用于配置当前chart的属性信息,可以作为全局变量提供给模板文件使用
├── templates             #目标信息文件,里面有很多的yaml模板文件,我们使用helm创建应用相当于helm帮我去执行这些yaml文件了
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests                      #测试目录,先执行测试,测试通过再执行templates
│       └── test-connection.yaml
└── values.yaml                    #全局变量文件,提供给templates里面的yaml文件用

第二步: 创建/编辑Chart配置

使用编辑器编辑Chart配置文件,包括Chart.yaml和values.yaml

1)Chart.yaml

apiVersion: chart API 版本 (必需)  #必须有
name: chart名称 (必需)     # 必须有 
version: 语义化2 版本(必需) # 必须有
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)
keywords:
  - 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
  - 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
  - name: chart名称 (nginx)
    version: chart版本 ("1.2.3")
    repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
    condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
    tags: # (可选)
      - 用于一次启用/禁用 一组chart的tag
    import-values: # (可选)
      - ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
    alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选) # 可能用到
  - name: 维护者名字 (每个维护者都需要)
    email: 维护者邮箱 (每个维护者可选)
    url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
  example: 按名称输入的批注列表 (可选).

示例

name: nginx-helm
apiVersion: v1
version: 1.0.0

2)values.yaml

values.yaml包含应用程序的默认配置值,举例:

image:
  repository: nginx
  tag: '1.17.1'

3)templates

在模板中引入values.yaml里的配置,在模板文件中可以通过 .VAlues对象访问到,例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-helm-{{ .Values.image.repository }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-helm
  template:
    metadata:
      labels:
        app: nginx-helm
    spec:
      containers:
      - name: nginx-helm
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 80
          protocol: TCP

第三步:打包Chart

使用helm package命令将Chart打包为一个tarball文件,例如在wordpress目录中使用helm package命令将Chart打包为一个tarball文件:

helm package wordpress/

image-20240619001128853

第四步:发布Chart

将打包好的Chart发布到一个Helm Repository中。可以使用helm repo add命令添加一个Repository,然后使用helm push命令将Chart推送到Repository中,例如:

# helm repo add myrepo https://example.com/charts
helm push nginx-helm-1.0.0.tgz  alicloud

第五步:安装Release

使用helm install命令安装Chart的Release,可以通过命令行选项或指定values.yaml文件来配置Release,例如:

helm install mywordpress ./wordpress

第六步:删除应用

helm uninstall mywordpress

第七步:管理Release

使用helm ls命令查看当前运行的Release列表,例如:

helm upgrade mywordpress myrepo/wordpress --set image.tag=5.7.3-php8.0-fpm-alpine

这将升级 mywordpress 的WordPress应用程序镜像版本为5.7.3-php8.0-fpm-alpine

五、随堂作业

1、完成全部课堂实验

六、扩展内容
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐