Kubernetes Helm

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 Kubernetes 关系型数据库
在Kubernetes中,helm是什么?如何使用?
【4月更文挑战第9天】在Kubernetes中,helm是什么?如何使用?
78 5
|
2月前
|
Kubernetes Linux Docker
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
86 2
|
2月前
|
运维 Kubernetes API
kubernetes 安装 kubernetes-dashboard 7.x
kubernetes 安装 kubernetes-dashboard 7.x
128 0
|
2月前
|
存储 Kubernetes API
Kubernetes
在 Kubernetes 环境中,Fluid 是一个用于简化数据访问和管理的数据服务平台。它提供了一种简单、高效的方式来访问和管理数据,同时支持多种数据存储和计算引擎。在 Fluid 中,Dataset 是用于表示数据存储和管理的基本单位。下面是一个典型的 Dataset 资源配置示例:
43 3
|
12月前
|
运维 Kubernetes 监控
kubernetes(k8s)应用篇之 kubesphere
kubesphere在公司使用的介绍
577 1
|
12月前
|
运维 Kubernetes 安全
Kubernetes 之 Egress 思考
“网络周边安全”是任何一个企业运维团队所必须关注的重点。当我们谈到网络界面控制时,我们往往潜意识地先会想到入站安全(入口)。然而,基于流量的运作,例如,何时可以离开网络(出口)以及流向哪里同样至关重要。在这篇文章中,我们将不深入讨论为什么控制出口流量如此重要的理论细节,毕竟,前人已经说的口都干了。因此,本文仅从技术演进层面来探讨关于在云原生生态中“出口”的选型及实现场景。
127 0
|
弹性计算 Kubernetes 负载均衡
k8s初探-安装kubernetes
k8s初探-安装kubernetes
299 0
|
Kubernetes 安全 Linux
kubespray2.11安装kubernetes1.15
实战kubespray2.11安装kubernetes1.15
116 0
kubespray2.11安装kubernetes1.15
|
存储 Kubernetes 安全
Kubernetes 你不知道的事
Kubernetes 你不知道的事
123 1
|
Kubernetes 容器
Kubernetes helm介绍
Kubernetes helm介绍