当前位置: 首页 > news >正文

Herm详解

Helm 是 Kubernetes 的包管理工具,类似 Linux 中的 apt 或 yum,用于简化 Kubernetes 应用的部署、升级、回滚和管理

核心概念:
  1. Chart(图表):一个 Helm 包,包含 Kubernetes 资源清单(Deployment、Service 等)的模板文件和配置文件,用于定义一个完整的应用。结构类似:

    plaintext

    my-chart/
    ├── Chart.yaml       # Chart 元数据(名称、版本等)
    ├── values.yaml      # 默认配置值(可被用户覆盖)
    ├── templates/       # 资源模板文件(使用 Go 模板语法)
    │   ├── deployment.yaml
    │   ├── service.yaml
    │   └── ingress.yaml
    └── charts/          # 依赖的子 Chart
    
  2. Release(发布):Chart 部署到 Kubernetes 集群后的实例。同一个 Chart 可以部署多次,生成多个独立的 Release(如 myapp-prodmyapp-test)。

  3. Repository(仓库):存储和共享 Chart 的地方(类似 Docker Hub),官方仓库为 Artifact Hub。

二、Helm 的作用

  • 简化部署:将复杂的 Kubernetes 资源(Deployment、Service、Ingress 等)打包成一个 Chart,一键部署。
  • 配置分离:通过 values.yaml 分离固定模板和可变配置(如环境变量、副本数),支持多环境复用。
  • 版本管理:跟踪 Release 的版本,支持一键升级和回滚。
  • 依赖管理:自动处理应用依赖的其他服务(如数据库)。

三、具体应用实例:用 Helm 部署一个 Nginx 应用

下面通过一个完整流程,演示如何使用 Helm 创建、配置、部署和管理一个 Nginx 应用。

步骤 1:安装 Helm
  • 参考 官方文档 安装 Helm 客户端(helm 命令)。
  • 验证安装:

    bash

    helm version  # 输出客户端和服务端(Tiller,Helm 3 已移除 Tiller)版本
    
步骤 2:创建自定义 Chart

我们创建一个名为 my-nginx-chart 的 Chart,用于部署 Nginx。

bash

# 创建 Chart 骨架
helm create my-nginx-chart
cd my-nginx-chart

生成的目录结构如下(核心文件):

plaintext

my-nginx-chart/
├── Chart.yaml       # 元数据(名称、版本等)
├── values.yaml      # 默认配置
└── templates/       # 资源模板├── deployment.yaml  # 部署 Nginx 的 Deployment 模板├── service.yaml     # 暴露服务的 Service 模板└── ingress.yaml     # 外部访问的 Ingress 模板(默认未启用)
步骤 3:配置 Chart

修改默认配置,自定义 Nginx 的部署参数。

  1. 修改 values.yaml(核心配置):该文件定义了可定制的参数,如镜像版本、副本数、端口等:

    yaml

    # values.yaml
    replicaCount: 2  # 部署 2 个 Nginx 副本image:repository: nginx  # 镜像名称tag: "1.23"        # 镜像版本(而非 latest,更稳定)pullPolicy: IfNotPresent  # 镜像拉取策略service:type: ClusterIP  # 服务类型(集群内部访问)port: 80         # 服务端口ingress:enabled: true    # 启用 Ingress(外部访问)className: nginx  # 使用 nginx 控制器hosts:- host: nginx.example.com  # 访问域名(需在本地 hosts 绑定集群 IP)paths:- path: /pathType: Prefixannotations:# 配置 Nginx 代理超时(可选)nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    
  2. 查看模板文件(无需修改,了解即可)templates/deployment.yaml 中使用 Go 模板语法引用 values.yaml 的配置,例如:

    yaml

    # templates/deployment.yaml(片段)
    spec:replicas: {{ .Values.replicaCount }}  # 引用副本数template:spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"  # 引用镜像
    
步骤 4:部署 Release

将 Chart 部署到 Kubernetes 集群,生成一个名为 my-nginx-release 的 Release。

bash

# 部署前检查模板渲染结果(可选,验证配置是否正确)
helm template my-nginx-release ./my-nginx-chart --dry-run# 部署 Release(指定命名空间,不存在则自动创建)
helm install my-nginx-release ./my-nginx-chart -n nginx-demo --create-namespace

输出类似:

plaintext

NAME: my-nginx-release
LAST DEPLOYED: Tue Oct 21 10:00:00 2025
NAMESPACE: nginx-demo
STATUS: deployed
REVISION: 1
TEST SUITE: None
步骤 5:验证部署

bash

# 查看 Release 状态
helm list -n nginx-demo# 查看 Kubernetes 资源(Deployment、Service、Ingress)
kubectl get all -n nginx-demo
kubectl get ingress -n nginx-demo

此时,Nginx 已部署成功:

  • 2 个 Pod 运行 Nginx 1.23 版本;
  • Service 暴露 80 端口,供集群内部访问;
  • Ingress 绑定域名 nginx.example.com,外部可通过该域名访问(需确保集群有 Nginx Ingress 控制器,且域名解析到集群入口 IP)。
步骤 6:升级 Release

如果需要修改配置(如增加副本数),无需重新部署,直接升级即可。

bash

# 方式 1:直接修改 values 并升级(临时生效)
helm upgrade my-nginx-release ./my-nginx-chart -n nginx-demo --set replicaCount=3# 方式 2:通过自定义 values 文件升级(推荐,持久化配置)
# 创建 custom-values.yaml,覆盖默认配置
echo "replicaCount: 3" > custom-values.yaml
helm upgrade my-nginx-release ./my-nginx-chart -n nginx-demo -f custom-values.yaml

验证升级结果:

bash

kubectl get deployment -n nginx-demo  # 查看副本数是否变为 3
步骤 7:回滚 Release

如果升级后出现问题,可回滚到历史版本。

bash

# 查看 Release 历史版本
helm history my-nginx-release -n nginx-demo# 回滚到版本 1(初始部署版本)
helm rollback my-nginx-release 1 -n nginx-demo
步骤 8:卸载 Release

bash

helm uninstall my-nginx-release -n nginx-demo

四、使用公共仓库的 Chart(快速部署)

除了自定义 Chart,还可以直接使用官方仓库中的 Chart(如 MySQL、Redis 等)。

例如,部署官方 MySQL:

bash

# 添加官方仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update  # 拉取仓库最新信息# 部署 MySQL(设置 root 密码)
helm install my-mysql bitnami/mysql -n mysql-demo --create-namespace \--set auth.rootPassword=myrootpass
http://www.dtcms.com/a/511568.html

相关文章:

  • 重庆网站建设哪家公司那家好winserver2008上用iis发布网站
  • HTML-CSS项目练习
  • 如何编写自动化测试用例?
  • 【Vibe Coding】001-前端界面常用布局
  • webview 中 cursor:pointer无效是由于-webkit-app-region导致的
  • 【C++】哈希表的实现【开放定址法vs链地址法】
  • 【业务逻辑漏洞】认证漏洞
  • 做网站在哪深圳做网站 汉狮网络
  • 修改k8s的镜像源为国内镜像源
  • Arbess从入门到实战(15) - 使用Arbess+GitHub实现Docker项目自动化构建部署
  • 【MySQL】从零开始了解数据库开发 ---mysql事务机制(一)
  • 网站建设明细盐都建设局网站
  • 基于单片机的气象站labview上位机监测系统
  • Chainlit+LlamaIndex 多模态 RAG 开发实战7:从系统架构到功能落地,搞定 PDF/PPT/ 图片全类型文件处理
  • 在VScode中将一个分支的某一次提交合并到另一个分支中
  • MAC M芯片安装配置VMware+Ubuntu
  • 免费seo推广软件网站排名优化软件联系方式
  • Nebula全球私有云网络部署与配置综合指南
  • LeetCode刷题总结
  • 阿里云代理商:如何开通阿里云文件存储?
  • gitee与github远程仓库
  • C语言需要掌握的基础知识点之字符串
  • 网站子页面如何做seo国家高新技术企业管理工作网
  • vs2010 iis 网站开发有没有什么需要推广的平台
  • 第六章 图——课后习题解练【数据结构(c语言版 第2版)】
  • 小米 C++ 校招二面:epoll/poll/select 区别与底层实现解析
  • 《安富莱嵌入式周报》第359期: 承包80KW水坝并自制控制系统,开源高端智能无线蓝牙耳机V2.0版发布,开源USB-C便携式台式电源
  • 机器人的通用驱动板
  • 浅谈需求分析与管理
  • MLE, MAP, Full Bayes