【架构实战】Helm Chart应用部署最佳实践

简介: Helm是Kubernetes的包管理器:核心概念:Chart:应用包Repository:Chart仓库Release:部署实例

一、Helm 概述

Helm是Kubernetes的包管理器:

核心概念:

  • Chart:应用包
  • Repository:Chart仓库
  • Release:部署实例

二、Chart结构

mychart/
├── Chart.yaml          # 元数据
├── values.yaml         # 默认配置
├── values.schema.json  # 配置校验
├── templates/          # K8s资源模板
│   ├── deployment.yaml
│   ├── service.yaml
│   └── _helpers.tpl    # 辅助函数
└── charts/             # 依赖Chart

1. Chart.yaml

apiVersion: v2
name: myapp
description: My Application
type: application
version: 1.0.0
appVersion: "1.0"
keywords:
  - myapp
  - web
maintainers:
  - name: developer
    email: dev@example.com
dependencies:
  - name: redis
    version: "17.1.0"
    repository: "https://charts.bitnami.com/bitnami"

2. values.yaml

replicaCount: 3

image:
  repository: myapp/web
  tag: latest
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 200m
    memory: 256Mi

ingress:
  enabled: true
  className: nginx
  hosts:
    - host: myapp.example.com
      paths:
        - path: /
          pathType: Prefix

三、 模板 语法

1. 变量引用

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {
   {
    .Release.Name }}-{
   {
    .Chart.Name }}
spec:
  replicas: {
   {
    .Values.replicaCount }}
  selector:
    matchLabels:
      app: {
   {
    .Chart.Name }}

2. 条件判断

{
   {
   - if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {
   {
    .Release.Name }}
spec:
  {
   {
   - end }}

3. 循环

{
   {
   - range .Values.ingress.hosts }}
- host: {
   {
    .host }}
  http:
    paths:
      {
   {
   - range .paths }}
      - path: {
   {
    .path }}
        pathType: {
   {
    .pathType }}
        backend:
          service:
            name: {
   {
    $.Release.Name }}
            port:
              number: 80
      {
   {
   - end }}
{
   {
   - end }}

4. 辅助函数

# _helpers.tpl
{
   {
   /*
Expand the name of the chart.
*/}}
{
   {
   - define "myapp.name" -}}
{
   {
   - default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{
   {
   - end }}

{
   {
   /*
Create a default fully qualified app name.
*/}}
{
   {
   - define "myapp.fullname" -}}
{
   {
   - if .Values.fullnameOverride }}
{
   {
   - .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{
   {
   - else }}
{
   {
   - $name := default .Chart.Name .Values.nameOverride }}
{
   {
   - if contains $name .Release.Name }}
{
   {
   - .Release.Name | trunc 63 | trimSuffix "-" }}
{
   {
   - else }}
{
   {
   - printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{
   {
   - end }}
{
   {
   - end }}
{
   {
   - end }}

四、Helm 命令

1. 基础命令

# 创建Chart
helm create mychart

# 打包Chart
helm package mychart

# 安装Chart
helm install myapp ./mychart

# 升级
helm upgrade myapp ./mychart

# 回滚
helm rollback myapp 1

# 卸载
helm uninstall myapp

2. 调试和验证

# 渲染模板
helm template myapp ./mychart

# 本地调试
helm install --dry-run --debug myapp ./mychart

# 验证Chart
helm lint ./mychart

3. 仓库管理

# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 更新仓库
helm repo update

# 搜索Chart
helm search repo nginx

# 列出已安装
helm list

五、最佳实践

1. 版本管理

# Chart.yaml
apiVersion: v2
name: myapp
version: 1.0.0      # Semantic Versioning
appVersion: "1.0"   # 应用版本

2. 配置 分离

# 生产环境配置
helm install myapp ./mychart -f production-values.yaml

# 开发环境配置
helm install myapp ./mychart -f dev-values.yaml

3. 密钥管理

# 使用SealedSecret或ExternalSecrets
apiVersion: v1
kind: Secret
metadata:
  name: {
   {
    include "myapp.fullname" . }}-secret
type: Opaque
stringData:
  password: {
   {
    .Values.db.password | b64enc }}

六、总结

Helm Chart最佳实践:

  • 结构清晰:合理组织Chart
  • 模板化:使用辅助函数
  • 版本管理:遵循语义化版本
  • 配置分离:环境差异化配置

个人观点,仅供参考

目录
相关文章
|
2月前
|
数据采集 人工智能 数据挖掘
一个人如何完成一个部门的工作?AI智能体工作流搭建教程
本文详解如何用AI智能体搭建“一人部门”工作流:将运营、客服、销售等岗位工作拆解为五层流程(目标→输入→处理→审核→输出→复盘),结合知识库、4类核心智能体、低代码编排工具与人工审核机制,实现可复用、可迭代的自动化协作。零基础也能3天跑通。
|
3月前
|
人工智能 Rust 运维
qwen3.6-27b批处理掉Token后,​D​М‌X​Α‌РΙ补偿重试
Qwen3.6-27B是270亿参数稠密多模态模型,兼顾强大智能体编程能力与工程落地性:百万上下文、原生多模态、家用显卡可跑,API友好,稳定可控,完美平衡性能、成本与可运维性,成为中文业务场景首选生产级大模型。(239字)
|
3月前
|
机器学习/深度学习 人工智能 算法
用好 Codex Goal,关键就这三步
Codex 新增 /goal 命令,支持目标驱动的Agent式循环:设定可量化目标(如“运行时间降20%且测试全通过”)、构建短反馈闭环、用PLAN/EXPERIMENTS等Markdown文件持久化记忆。三要素缺一不可,方能真正释放长任务自动化潜力。
1297 1
用好 Codex Goal,关键就这三步
|
3月前
|
人工智能 缓存 自然语言处理
阿里云百炼平台提供Token Plan团队版订阅是否值得选,有哪些优势?
阿里云百炼Token Plan团队版是面向企业/团队的AI大模型订阅服务,以统一Credits计量,支持Qwen、Kimi、GLM等十余款多模态模型及Cursor等主流工具;提供标准/高级/尊享三档坐席,预算可控、多租户隔离、数据安全,仅限华北2地域。(239字)
|
3月前
|
人工智能 API Python
办公Agent如何真正提效?用数据对比说明:介入前后团队时间消耗变化
这是一份真实办公提效实验报告:20人团队引入办公Agent后,事务与沟通时间骤降56%,人均每周多出9小时有效工作时间。数据揭示——AI不替代人,而是接管填表、催办、写纪要等低价值衔接工作,让人回归核心创造。(239字)
329 7
|
4月前
|
存储 运维 监控
互成软件终端智能告警体系(SIEM)设计与实施:从多源采集到多渠道通知的闭环方案
互成软件终端智能告警体系,覆盖违规外联、设备使用、安全风险、硬件/软件/配置/磁盘/性能等八大风险维度;支持动态模板通知、邮件短信双通道触达、多级关联聚合与降噪,并兼顾合规隐私。实现从事件检测到闭环处置的全链路安全运营。(239字)
|
4月前
|
人工智能 自然语言处理 小程序
AI真人数字人小程序开发需要哪些技术?哪些功能?新手也能看懂
本文围绕“AI真人数字人小程序开发”展开,从技术实现与产品功能两个维度进行系统讲解。内容涵盖数字人建模、语音合成、大模型对话、音视频同步及小程序开发等核心技术,同时梳理了基础与进阶功能模块,并给出新手入局的实操建议。适合企业决策者与开发者快速了解数字人项目的落地路径,助力AI产品商业化应用。
|
3月前
|
运维 Ubuntu Linux
Linux 多发行版 远程桌面踩坑总结:Deepin / openKylin / Ubuntu 实战记录
本文详述TigerVNC在Ubuntu 26.04、Deepin 20.9/23.9及openKylin 2.0 SP2四大发行版的适配实践,重点解决Wayland/X11冲突、DBus、输入法、DDE兼容等痛点,最终推荐「deepin」为最稳定方案。(239字)
861 4
|
3月前
|
运维 持续交付 API
【架构实战】GitOps持续交付架构(ArgoCD/Flux)
单一事实来源:Git仓库 自动同步:声明式配置 ArgoCD:功能丰富,有UI Flux:轻量,CLI友好
203 3
|
3月前
|
数据可视化 机器人
动态四足机器人的自由模型预测控制(FMPC)MATLAB实现
动态四足机器人自由模型预测控制(Free-Model Predictive Control, FMPC)MATLAB实现,包含机器人动力学模型、FMPC控制器设计、步态生成和三维可视化仿真。
202 1

热门文章

最新文章