首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes 使用Helmify将K8s YAML转换成Helm Chart

Kubernetes 使用Helmify将K8s YAML转换成Helm Chart

作者头像
用户11081884
发布2026-07-20 20:24:45
发布2026-07-20 20:24:45
300
举报

手里有一堆跑得好好的 K8s YAML 文件,想迁移到 Helm Chart 管理但又不想手写模板,Helmify 就是干这个的——一行命令把 YAML 转成符合 Helm 3 规范的 Chart 结构。


Helmify 是什么

Helmify 是一个 Go 写的命令行工具,解析 K8s YAML 后自动生成 Chart。它主要做三件事:

  • 把镜像标签、副本数、端口等字段提取为 Helm 模板变量
  • 自动生成 Chart.yamlvalues.yamltemplates/ 目录
  • 正确处理 Deployment、Service、ConfigMap 等资源之间的引用关系

安装

macOS

代码语言:javascript
复制
brew install helmify

Linux

代码语言:javascript
复制
# Snap
sudo snap install helmify

# 或者从 GitHub Releases 下载二进制
wget https://github.com/arttor/helmify/releases/download/v0.4.2/helmify_0.4.2_linux_amd64.tar.gz
tar -xzf helmify_0.4.2_linux_amd64.tar.gz
sudomv helmify /usr/local/bin/

Windows

从 Helmify Releases 下载对应的 .exe,加到系统 PATH 里。

验证安装

代码语言:javascript
复制
helmify --version
# 输出类似: helmify version 0.4.2

完整转换示例

下面用一个 Web 应用来演示整个流程。

步骤 1:准备原始 YAML

假设有一个包含 Deployment 和 Service 的 webapp.yaml

代码语言:javascript
复制
# webapp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp-container
        image: nginx:1.21-alpine
        ports:
        - containerPort: 80
        env:
        - name: ENVIRONMENT
          value: "production"
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

步骤 2:执行转换

代码语言:javascript
复制
# 管道方式(推荐)
cat webapp.yaml | helmify webapp-chart

# 或者用 -f 指定文件
helmify -f webapp.yaml webapp-chart

步骤 3:查看生成的 Chart 结构

代码语言:javascript
复制
webapp-chart/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── deployment.yaml
    └── service.yaml

生成的 Chart.yaml

代码语言:javascript
复制
apiVersion: v2
name: webapp-chart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.0"

生成的 values.yaml(自动从原始 YAML 中提取):

代码语言:javascript
复制
replicaCount: 2

image:
  repository: nginx
  tag: 1.21-alpine
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 128Mi

env:
  ENVIRONMENT: production

生成的 templates/deployment.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "webapp-chart.fullname" . }}-deployment
  labels:
    {{- include "webapp-chart.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "webapp-chart.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "webapp-chart.labels" . | nindent 8 }}
    spec:
      containers:
        - name: webapp-container
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: 80
          env:
            - name: ENVIRONMENT
              value: {{ .Values.env.ENVIRONMENT | quote }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

高级用法

批量转换多个 YAML

代码语言:javascript
复制
# k8s 配置都在 manifests/ 目录下
helmify -f ./manifests -r my-microservice

# 查看生成的所有模板文件
ls-la my-microservice/templates/
# 可能包含: deployment.yaml, service.yaml, configmap.yaml, ingress.yaml 等

处理 ConfigMap 和 Secret

ConfigMap 的数据会被提取到 values.yaml 中。比如原始 ConfigMap:

代码语言:javascript
复制
# config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.properties: |
    server.port=8080
    logging.level=INFO

转换后 values.yaml 会新增:

代码语言:javascript
复制
configmap:
  app-config:
    data:
      app.properties: |
        server.port=8080
        logging.level=INFO

模板中会生成对应的 ConfigMap 资源。

常用参数

代码语言:javascript
复制
# 保留原始命名空间
helmify -f ./manifests --preserve-ns myapp

# CRD 放到独立文件夹
helmify -f ./manifests --crd-dir myapp-with-crds
# CRD 会放在: myapp-with-crds/crds/ 目录下

# 添加 imagePullSecrets 引用
helmify -f ./manifests --image-pull-secrets myapp

转换后验证与部署

代码语言:javascript
复制
# 检查 Chart 语法
helm lint webapp-chart/

# 模板渲染测试(查看实际生成的 YAML)
helm template webapp-chart/ --debug

# 用自定义值覆盖测试
helm template webapp-chart/ --setreplicaCount=3--set image.tag=1.22-alpine

# 安装到 K8s 集群
helm install my-webapp webapp-chart/
# 或使用自定义值文件
helm install my-webapp webapp-chart/ -f my-values.yaml

几点建议

  • Helmify 不会修改原始 YAML,但转换前备份一份还是稳妥
  • 自动生成的 Chart 是个起点,后续建议手动完善:补充 values.yaml 参数、补全 Chart.yaml 描述、添加 NOTES.txt
  • 转出来的 Chart 直接纳 Git 管理,建立版本流程
  • 上生产之前在测试环境跑一遍 helm lint + helm template,确认没问题再部署

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Helmify 是什么
  • 安装
    • macOS
    • Linux
    • Windows
    • 验证安装
  • 完整转换示例
    • 步骤 1:准备原始 YAML
    • 步骤 2:执行转换
    • 步骤 3:查看生成的 Chart 结构
  • 高级用法
    • 批量转换多个 YAML
    • 处理 ConfigMap 和 Secret
    • 常用参数
  • 转换后验证与部署
  • 几点建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档