青冥 青冥
首页
  • Java 基础
  • Java 进阶
  • Java Java 版本新特性
  • JVM
  • MySQL
  • Tomcat
  • Nginx
  • Spring 系列

    • Spring
    • Spring IOC
    • Spring AOP
    • Spring MVC
  • ORM

    • Mybatis
  • 设计模式

    • 23 种设计模式
  • 操作系统内核
  • JVM 内存模型
  • 并发同步处理
  • Atomic 原子操作
  • 队列(Queue)
  • 线程池(Thread Pool)
  • 分布式 - 消息中间件

    • 消息中间件
  • 分布式 - 存储中间件

    • 存储中间件
  • 分布式 - RPC 框架

    • RPC 框架
  • Spring Boot
  • Spring Cloud Alibaba
  • Spring Cloud Netflix
  • Git
  • Maven
  • Jenkins
  • Linux
  • 容器化

    • Docker
    • Kubernetes
  • 面试合集

    • 缓存
  • 实战项目
  • 数据结构与算法
  • 计算机原理
  • 大数据
  • 人工智能(AI)
  • 前端
  • 留言区
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 关于
  • 友情链接
🍊Gitlab (opens new window)

iByte Horizon

好记性不如烂笔头
首页
  • Java 基础
  • Java 进阶
  • Java Java 版本新特性
  • JVM
  • MySQL
  • Tomcat
  • Nginx
  • Spring 系列

    • Spring
    • Spring IOC
    • Spring AOP
    • Spring MVC
  • ORM

    • Mybatis
  • 设计模式

    • 23 种设计模式
  • 操作系统内核
  • JVM 内存模型
  • 并发同步处理
  • Atomic 原子操作
  • 队列(Queue)
  • 线程池(Thread Pool)
  • 分布式 - 消息中间件

    • 消息中间件
  • 分布式 - 存储中间件

    • 存储中间件
  • 分布式 - RPC 框架

    • RPC 框架
  • Spring Boot
  • Spring Cloud Alibaba
  • Spring Cloud Netflix
  • Git
  • Maven
  • Jenkins
  • Linux
  • 容器化

    • Docker
    • Kubernetes
  • 面试合集

    • 缓存
  • 实战项目
  • 数据结构与算法
  • 计算机原理
  • 大数据
  • 人工智能(AI)
  • 前端
  • 留言区
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 关于
  • 友情链接
🍊Gitlab (opens new window)
  • Git

  • Maven

  • Jenkins

  • Linux

  • 虚拟容器

    • Docker

    • Kubernetes

      • 初识 Kubernetes
      • Kubernetes 组件&架构
      • Kubernetes Pod & Container
      • Kubernetes Controller 控制器
      • Kubernetes Service
      • Kubernetes Volumes
      • ConfigMap & Secret
      • Kubernetes Ingress
      • Kubernetets Namespace
      • Kubernetes Helm
        • 1. Helm 简介
        • 2. Helm 安装
        • 3. Helm 核心概念
        • 4. Helm 使用
          • 4.1 搜索 charts
          • 4.2 安装 Chart
          • 4.3 查看列表
          • 4.3 查看状态
          • 4.4 卸载
        • 5. 安装自定义 Chart
          • 5.1 拉取自定义的 chart
          • 5.2 查看 chart 目录结构
          • 5.3 自定义模板
          • 5.4 验证是否存在错误
          • 5.5 打包自定义 chart
          • 5.6 安装 chart
  • 互联网工具 - 专题
  • 虚拟容器
  • Kubernetes
沉梦昂志
2025-04-11
目录

Kubernetes Helm

内容概述

官方文档:https://helm.sh/zh/ (opens new window)

  • 1. Helm 简介
  • 2. Helm 安装
  • 3. Helm 核心概念
  • 4. Helm 使用
    • 4.1 搜索 charts
    • 4.2 安装 Chart
    • 4.3 查看列表
    • 4.3 查看状态
    • 4.4 卸载
  • 5. 安装自定义 Chart
    • 5.1 拉取自定义的 chart
    • 5.2 查看 chart 目录结构
    • 5.3 自定义模板
    • 5.4 验证是否存在错误
    • 5.5 打包自定义 chart
    • 5.6 安装 chart

# 1. Helm 简介

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 对象。

# 2. Helm 安装

下载地址: https://github.com/helm/helm/releases (opens new window)

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

Linux 具体安装步骤如下:

  1. 下载 需要的版本 (opens new window)
  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

更多安装教程,请参考官方安装教程:https://helm.sh/zh/docs/intro/install/ (opens new window)

# 3. Helm 核心概念

  • Chart:代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。 你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

  • Repository(仓库):是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 (opens new window) 或是 Fedora 的 软件包仓库 (opens new window),只不过它是供 Kubernetes 包所使用的。

  • Release:是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

# 4. Helm 使用

# 4.1 搜索 charts

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

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

# 4.2 安装 Chart

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

$ helm install nginx bitnami/nginx

NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    nginx.kube-system.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'

    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

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

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

# 4.3 查看列表

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

$ helm list

NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
nginx   kube-system     1               2023-04-05 07:34:48.421708425 -0400 EDT deployed        nginx-13.2.34   1.23.4 
1
2
3
4

# 4.3 查看状态

Helm 客户端不会等到所有资源都运行才退出。许多 charts 需要大小超过 600M 的 Docker 镜像,可能需要很长时间才能安装到集群中。

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

$ helm status nginx

NAME: nginx
LAST DEPLOYED: Wed Apr  5 07:18:04 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.34
APP VERSION: 1.23.4

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    nginx.kube-system.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace kube-system -w nginx'

    export SERVICE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace kube-system nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 4.4 卸载

$ helm uninstall nginx

release "nginx" uninstalled
1
2
3

# 5. 安装自定义 Chart

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

使用 helm show values 可以查看 chart 中的可配置选项:

$  helm show values bitnami/wordpress
1

# 5.1 拉取自定义的 chart

$ helm create app
1

注意: 当前目录中会出现一个 nginx-xxx.tgz 文件 这个文件就是 charts 的包。

# 5.2 查看 chart 目录结构

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

# 5.3 自定义模板

$ rm -rf mychart/templates/*
1

编写 namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: { { .Chart.Name } }
  namespace: { { .Values.namespace } }
1
2
3
4
5

编写 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 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

编写 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 } }
1
2
3
4
5
6
7
8
9
10
11
12

编写 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"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

编写 values.yaml

replicas: 1
namespace: app
image: nginx:1.19
imagePullPolicy: IfNotPresent
restartPolicy: Always
containerPort: 80

service:
  port: 80
  type: ClusterIP
1
2
3
4
5
6
7
8
9
10

# 5.4 验证是否存在错误

$ helm lint app
1

# 5.5 打包自定义 chart

$ helm package app
1

# 5.6 安装 chart

$ helm install app myapp-1.tgz
1
#K8s#Helm#包管理工具
最近更新: 2025/04/11, 14:29:15
Kubernetets Namespace

← Kubernetets Namespace

最近更新
01
Kubernetets Namespace
04-11
02
Kubernetes Ingress
04-11
03
ConfigMap & Secret
04-11
更多文章>
Theme by Vdoing | Copyright © 2021-2025 光年矩阵科技有限公司 | All Rights Reserved. |
渝ICP备2021888888号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×