【架构实战】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
  • 模板化:使用辅助函数
  • 版本管理:遵循语义化版本
  • 配置分离:环境差异化配置

个人观点,仅供参考

目录
相关文章
|
19天前
|
数据采集 人工智能 数据挖掘
一个人如何完成一个部门的工作?AI智能体工作流搭建教程
本文详解如何用AI智能体搭建“一人部门”工作流:将运营、客服、销售等岗位工作拆解为五层流程(目标→输入→处理→审核→输出→复盘),结合知识库、4类核心智能体、低代码编排工具与人工审核机制,实现可复用、可迭代的自动化协作。零基础也能3天跑通。
|
1月前
|
机器学习/深度学习 人工智能 算法
用好 Codex Goal,关键就这三步
Codex 新增 /goal 命令,支持目标驱动的Agent式循环:设定可量化目标(如“运行时间降20%且测试全通过”)、构建短反馈闭环、用PLAN/EXPERIMENTS等Markdown文件持久化记忆。三要素缺一不可,方能真正释放长任务自动化潜力。
892 1
用好 Codex Goal,关键就这三步
|
1月前
|
人工智能 缓存 自然语言处理
阿里云百炼平台提供Token Plan团队版订阅是否值得选,有哪些优势?
阿里云百炼Token Plan团队版是面向企业/团队的AI大模型订阅服务,以统一Credits计量,支持Qwen、Kimi、GLM等十余款多模态模型及Cursor等主流工具;提供标准/高级/尊享三档坐席,预算可控、多租户隔离、数据安全,仅限华北2地域。(239字)
|
1月前
|
人工智能 API Python
办公Agent如何真正提效?用数据对比说明:介入前后团队时间消耗变化
这是一份真实办公提效实验报告:20人团队引入办公Agent后,事务与沟通时间骤降56%,人均每周多出9小时有效工作时间。数据揭示——AI不替代人,而是接管填表、催办、写纪要等低价值衔接工作,让人回归核心创造。(239字)
188 7
|
2月前
|
人工智能 自然语言处理 小程序
AI真人数字人小程序开发需要哪些技术?哪些功能?新手也能看懂
本文围绕“AI真人数字人小程序开发”展开,从技术实现与产品功能两个维度进行系统讲解。内容涵盖数字人建模、语音合成、大模型对话、音视频同步及小程序开发等核心技术,同时梳理了基础与进阶功能模块,并给出新手入局的实操建议。适合企业决策者与开发者快速了解数字人项目的落地路径,助力AI产品商业化应用。
|
19天前
|
数据采集 JSON API
Python爬虫实战:多协议适配的图书网站多源数据采集方案
Python爬虫实战:多协议适配的图书网站多源数据采集方案
|
1月前
|
运维 持续交付 API
【架构实战】GitOps持续交付架构(ArgoCD/Flux)
单一事实来源:Git仓库 自动同步:声明式配置 ArgoCD:功能丰富,有UI Flux:轻量,CLI友好
144 3
|
1月前
|
数据可视化 机器人
动态四足机器人的自由模型预测控制(FMPC)MATLAB实现
动态四足机器人自由模型预测控制(Free-Model Predictive Control, FMPC)MATLAB实现,包含机器人动力学模型、FMPC控制器设计、步态生成和三维可视化仿真。
129 1
|
1月前
|
供应链 安全 测试技术
如何选择CNAS与CMA双资质渗透测试机构?
数字化转型下,企业需通过专业渗透测试应对复杂网络威胁。选择具备CNAS与CMA双资质的机构,可满足等保测评、合规审查及平台入驻要求,其报告具法律效力。服务覆盖Web、移动APP、PC软件及API,融合自动化与人工深度测试,严格遵循OWASP、PTES等国际标准,提供漏洞诊断、风险还原与闭环修复。
|
1月前
|
存储 安全 Java
【Java基础】String不可变性、String vs StringBuffer vs StringBuilder、常量池、intern()方法(附《思维导图》+《面试考点背诵版》)
本文系统解析Java字符串核心机制:String不可变性(`final char[]`实现)、String/StringBuffer/StringBuilder三者对比(可变性/线程安全/性能)、字符串常量池(JDK7+移至堆)及`intern()`方法(JDK7+直接存堆引用)。