Kubernetes Helm

简介: Kubernetes Helm

什么是 Helm

官网: https://helm.sh/zh/

Helm 是一个 Kubernetes 应用程序包管理工具,它允许你轻松管理和部署 Kubernetes 应用程序。Helm 通过使用称为 Charts 的预定义模板来简化 Kubernetes 应用程序的部署和管理。Chart 包含了一组 Kubernetes 对象定义,可以描述一个应用程序的完整部署和资源需求,包括 Deployment、Service、ConfigMap、Secret 等。使用 Helm,你可以轻松地安装、升级、卸载和回滚 Kubernetes 应用程序。

同时,Helm 还提供了一些便捷的功能,如依赖管理、全局变量、条件渲染等,可以帮助你更好地管理应用程序的部署。Helm 有两个主要的组件:Helm 客户端(helm)和 Helm 服务器(Tiller)。Helm 客户端可以在本地运行,而 Tiller 则运行在 Kubernetes 集群中,并负责将 Charts 转换为 Kubernetes 对象。

安装 Helm

下载地址: https://github.com/helm/helm/releases

每个 Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。

  1. 下载 需要的版本
  2. 解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
  3. 在解压目录中找到 helm 程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm
  4. 添加仓库: helm repo add bitnami https://charts.bitnami.com/bitnami
  5. 验证安装: helm help

重要概念

  1. Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula、Apt dpkg或 Yum RPM 在 Kubernetes 中的等价物。
  2. Repository(仓库)是用来存放和共享 Charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
  3. Release 是运行在 Kubernetes 集群中的 Chart 的实例。一个 Chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 Release。以 MySQL Chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 Chart 两次。每一个数据库都会拥有它自己的 Release 和 Release Name。

使用 Helm

搜索 Charts

helm search hub <ChartName>
helm search repo <ChartName>

Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:

  1. helm search hubArtifact Hub 中查找并列出 helm charts。 Artifact Hub 中存放了大量不同的仓库。
  2. helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

安装 Chart

helm install <ReleaseName> <ChartName>

使用 helm install 命令来安装一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的 release 名字和你想安装的 chart 的名称。

注意:安装 Chart 时创建了一个新的 Release 对象。上述发布被命名为 nginx。(如果想让 Helm 生成一个名称,删除发布名称并使用 --generate-name。)

Helm 安装顺序:https://helm.sh/zh/docs/intro/using_helm/

查看列表

helm list

你可以通过 helm list 命令看到当前部署的所有 Release:

查看状态

helm status <ReleaseName>

你可以使用 helm status 来追踪 Release 的状态,或是重新读取配置信息:

卸载

helm uninstall <ReleaseName>

安装自定义 Chart

上述安装方式只会使用 Chart 的默认配置选项。很多时候,我们需要自定义 Chart 来指定我们想要的配置。

创建自定义的 Chart

helm create app

创建 Chart 的时候会在当前目录生成一个文件夹,名称便是创建的 Chart 名。

查看 Chart 目录结构

app/
  Chart.yaml
  values.yaml
  charts/
  templates/
  ...

  • templates 目录包括了模板文件。当 Helm 评估 Chart 时,会通过模板渲染引擎将所有文件发送到 templates/ 目录中。 然后收集模板的结果并发送给 Kubernetes。
  • values.yaml 文件也导入到了模板。这个文件包含了 Chart 的默认值。这些值会在用户执行 helm installhelm upgrade 时被覆盖。
  • Chart.yaml 文件包含了该 Chart 的描述。你可以从模板中访问它。charts/ 目录可以包含其他的 Chart(称之为 子 Chart)。

自定义模板

rm -rf mychart/templates/*

编写 namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.namespace }}

编写 deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Chart.Name}}
  namespace: {{.Values.namespace}}
  labels:
    app: {{ .Chart.Name}}
spec:
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      name: {{ .Chart.Name}}
      labels:
        app: {{ .Chart.Name}}
    spec:
      containers:
        - name: {{ .Chart.Name}}
          image: {{ .Values.image}}
          imagePullPolicy: {{.Values.imagePullPolicy}}
          ports:
            - containerPort: {{.Values.containerPort}}
      restartPolicy: {{ .Values.restartPolicy }}
  selector:
    matchLabels:
      app: {{ .Chart.Name}}

编写 service.yml

apiVersion: v1
kind: Service
metadata:
  name: {{.Chart.Name}}
  namespace: {{.Values.namespace}}
spec:
  selector:
    app: {{.Chart.Name}}
  ports:
    - port: {{.Values.service.port}}
      targetPort: {{.Values.containerPort}}
  type: {{ .Values.service.type }}

编写 Chart.yml

apiVersion: v2
name: app
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

编写 values.yaml

replicas: 1
namespace: app
image: nginx:1.19
imagePullPolicy: IfNotPresent
restartPolicy: Always
containerPort: 80
service:
  port: 80
  type: ClusterIP

验证是否存在错误

helm lint app

打包自定义 Chart

helm package app

安装 Chart

helm install app myapp-1.tgz


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
|
7月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
209 10
|
7月前
|
存储 Kubernetes 关系型数据库
在Kubernetes中,helm是什么?如何使用?
【4月更文挑战第9天】在Kubernetes中,helm是什么?如何使用?
530 5
|
Kubernetes 应用服务中间件 Linux
helm安装和使用-通过helm部署k8s应用
helm安装和使用-通过helm部署k8s应用
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
278 0
|
2月前
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
263 0
|
4月前
|
存储 Kubernetes 关系型数据库
Helm 简介:Kubernetes 的包管理器
Helm 简介:Kubernetes 的包管理器
125 2
|
4月前
|
Kubernetes 容器
Kubernetes(K8S) helm chart
Kubernetes(K8S) helm chart
37 1
|
4月前
|
Kubernetes Linux Docker
Kubernetes(K8S) helm 安装
Kubernetes(K8S) helm 安装
107 1