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


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
365 10
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
|
Kubernetes 应用服务中间件 Linux
helm安装和使用-通过helm部署k8s应用
helm安装和使用-通过helm部署k8s应用
|
存储 Kubernetes 关系型数据库
在Kubernetes中,helm是什么?如何使用?
【4月更文挑战第9天】在Kubernetes中,helm是什么?如何使用?
1206 5
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
473 0
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
451 0
k8s学习--helm的详细解释及安装和常用命令
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
1075 0
|
存储 Kubernetes 关系型数据库
Helm 简介:Kubernetes 的包管理器
Helm 简介:Kubernetes 的包管理器
323 2
|
Kubernetes 容器
Kubernetes(K8S) helm chart
Kubernetes(K8S) helm chart
147 1
|
Kubernetes Linux Docker
Kubernetes(K8S) helm 安装
Kubernetes(K8S) helm 安装
525 1

推荐镜像

更多