Helm-K8s包管理(三)新建、编辑一个Chart

发布于:2025-08-15 ⋅ 阅读:(11) ⋅ 点赞:(0)

在这里插入图片描述

新建一个Chart步骤

在这里插入图片描述

一、前提准备:环境准备

安装Helm

  • 在线安装方式
$ curl -fsSL -o get_helm.sh  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
  • 离线安装
    • 需要提前下载helm安装包,离线下载

可正常连接K8s集群

kubectl cluster-info  # 查看k8s集群信息,可以查看即说明已经连接到k8s api server

二、创建Chart工作目录

  • 创建出Chart工作目录,一般有两种方式
    • 从0到1,自行创建
    • 拉取现有Chart,在已有Chart基础上做修改

自行创建

  • 使用helm提供的命令创建Chart工作目录
    helm create nginx-chart        # 生成目录 nginx-chart/
    cd nginx-chart
    

在现有Chart基础上做修改

  • 拉取目标chart
    # 添加helm chart仓库
    helm repo add bitnami "https://helm-charts.itboon.top/bitnami" --force-update 
    # 查询目标Chart
    helm search repo <chart-name>  
    # helm pull 的作用是把一个已经发布的 Helm Chart 从远程仓库(或本地仓库)拉取到本地文件系统,变成 可解压的 .tgz 包 或直接 解压后的目录,方便离线查看、修改、重新打包或调试。
    helm pull bitnami/nginx --version 15.2.0 --untar # --version指定版本;--untar自动解压
    

生成的工作目录示意

nginx-chart/
├── Chart.yaml          # Chart 元数据
├── values.yaml         # 默认变量值
├── charts/             # 子 Chart 目录(空)
├── templates/          # K8s YAML 模板
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── _helpers.tpl
│   └── NOTES.txt
└── .helmignore         # 打包忽略规则

三、编辑Chart元数据-Chart.yml

  • 按照需求编辑Chart.yml,即Chart元数据信息,Chart元数据包含这个chart的名称、版本号

Chart.yml元数据-必填字段

字段 类型 说明
apiVersion string Chart API 版本(v2 为 Helm 3)
name string Chart 名称(只能小写字母、数字、-)
version string Chart 自身的版本号(遵循 SemVer)
appVersion string 所封装“应用”的版本号,仅做展示

Chart.yml元数据-描述、维护字段

字段 示例 作用
description "Bitnami nginx chart" 一句话描述
home https://bitnami.com 项目主页
sources ["https://github.com/bitnami/bitnami-docker-nginx"] 源码仓库
maintainers [{name: "Bitnami", email: "containers@bitnami.com"}] 维护者列表
keywords ["nginx", "web server"] 关键字,方便搜索
icon "https://example.com/icon.png" 图标 URL

Chart.yml元数据-依赖和兼容性字段

字段 示例 作用
dependencies [{name: "mysql", version: "~9.0.0", repository: "oci://..."}] 声明子 Chart
type "application""library" 应用 Chart vs 库 Chart
kubeVersion ">=1.22-0" 兼容的 K8s 版本
annotations {"category": "Infrastructure"} 额外元数据
deprecated true 标记弃用

Chart.yml-完整样例

apiVersion: v2
name: nginx
description: "Bitnami nginx chart"
type: application
version: 15.4.2          # Chart 版本
appVersion: "1.25.3"     # 应用版本
home: https://bitnami.com
sources:
  - https://github.com/bitnami/charts
maintainers:
  - name: Bitnami
    email: containers@bitnami.com
keywords:
  - nginx
  - web server
kubeVersion: ">=1.22-0"
dependencies:
  - name: common
    version: 2.x.x
    repository: oci://registry-1.docker.io/bitnamicharts

四、编辑自定义变量values.yml

values.yml作用

  • values.yml作用是提供所有模板(templates/*.yaml)里的变量的默认值
  • 所有镜像、资源、副本、网络、存储、安全变量参数都可以在这里一键调节无需改模板

values.yml示例

  • 以下为一个values.yml示例
    # values.yaml
    replicaCount: 2
    
    image:
      repository: nginx
      tag: "1.25.3"
      pullPolicy: IfNotPresent
    
    service:
      type: ClusterIP
      port: 80
    
    ingress:
      enabled: false            # 先关闭 ingress
    
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 100m
        memory: 128Mi
    

五、编辑template文件

template文件作用

  • templates/ 目录下的所有 .yaml 文件(以及 _*.yaml 辅助文件)统称为 template 文件
  • template本身代表了k8s资源的定义,比如deployment、service等
  • template可以设置占位符,和values.yml结合使用
    • 占位符比如{{ .Values.xxx }}

template示例

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }} #占位符
spec:
  replicas: {{ .Values.replicaCount }} #占位符
  template:
    spec:
      containers:
      - name: nginx
        image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" #占位符,结合values.yml渲染后变成如 image: "registry.cn-hangzhou.aliyuncs.com/bitnami/nginx:1.25.3"
        resources:
{{ toYaml .Values.resources | indent 10 }} #占位符

六、本地验证

Lint语法检查

helm lint .                       # 语法/风格检查

Dry-Run

helm template myrel .             # 渲染出最终 YAML,不真正部署

七、打包发布到仓库

  • 多人协作场景下,本地的Chart工作目录,需要先打包成一个压缩包再上传到仓库后使用
  • 若只是单人使用,也可以直接在本地工作目录进行install安装
# 本地打包
helm package .
# 生成 nginx-chart-0.1.0.tgz

# 发布到自建 chartmuseum 仓库(可选)
helm repo add myrepo https://charts.example.com
curl --data-binary "@nginx-chart-0.1.0.tgz" https://charts.example.com/api/charts

八、安装到集群

# 安装 release 名称为 web;./nginx-chart为本地chart工作目录地址
helm install web ./nginx-chart

# 若nginx-chart 已经上传至仓库,且本地已经添加了该仓库,也可以指定仓库已提交的chart名称来install
helm install web-release nginx-chart 

# 查看realese状态
helm list
# 查看pod状态
kubectl get pods -l app.kubernetes.io/name=nginx-chart

九、升级(更新配置后)

helm upgrade web ./nginx-chart      # 热更新,./nginx-chart为本地chart工作目录地址,也可以指定仓库已提交的chart名称

十、卸载

helm uninstall web

网站公告

今日签到

点亮在社区的每一天
去签到