chart文件结构

在 Helm 中,Chart 是一个用于定义、安装和升级 Kubernetes 应用程序的包。Chart 文件结构遵循一定的目录和文件组织方式,以下是典型的 Helm Chart 文件结构:

1. Chart 文件结构示例

复制代码
mychart/
├── Chart.yaml          # 描述 Chart 的基本信息
├── values.yaml         # 默认配置值
├── charts/             # 依赖的其他 Chart
├── templates/          # Kubernetes 资源模板
│   ├── deployment.yaml # Deployment 模板
│   ├── service.yaml    # Service 模板
│   ├── ingress.yaml    # Ingress 模板
│   ├── _helpers.tpl    # 模板助手函数
│   └── NOTES.txt       # 安装后的提示信息
└── templates/tests/    # 测试文件
    └── test-connection.yaml

2. 主要文件和目录详解

2.1 Chart.yaml

Chart.yaml 文件包含了 Chart 的基本信息,如名称、版本、描述等。

yaml 复制代码
apiVersion: v2
name: mychart
version: 0.1.0
description: A Helm chart for Kubernetes
type: application
keywords:
  - example
home: https://example.com
sources:
  - https://github.com/example/mychart
maintainers:
  - name: John Doe
    email: john.doe@example.com
dependencies:
  - name: postgresql
    version: "10.9.4"
    repository: "https://charts.helm.sh/stable"
2.2 values.yaml

values.yaml 文件包含了 Chart 的默认配置值,这些值可以在安装或升级 Chart 时被覆盖。

yaml 复制代码
replicaCount: 1
image:
  repository: nginx
  tag: "1.16.0"
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80
ingress:
  enabled: false
  annotations: {}
  hosts:
    - host: chart-example.local
      paths:
        - /
  tls: []
2.3 charts/

charts/ 目录包含了当前 Chart 依赖的其他 Chart。Helm 会自动解析这些依赖并在安装时一并处理。

复制代码
charts/
├── postgresql/
│   ├── Chart.yaml
│   ├── values.yaml
│   ├── templates/
│   └── ...
└── redis/
    ├── Chart.yaml
    ├── values.yaml
    ├── templates/
    └── ...
2.4 templates/

templates/ 目录包含了 Kubernetes 资源模板文件。这些模板文件使用 Go 模板语言编写,并根据 values.yaml 中的值动态生成 Kubernetes 资源配置。

  • deployment.yaml: 定义 Deployment 资源。
  • service.yaml: 定义 Service 资源。
  • ingress.yaml: 定义 Ingress 资源。
  • _helpers.tpl: 包含模板助手函数,用于在多个模板文件中复用代码。
  • NOTES.txt: 安装后显示的提示信息。
2.5 templates/tests/

templates/tests/ 目录包含测试文件,用于验证 Chart 的安装是否成功。

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: "{{ .Release.Name }}-test-connection"
  labels:
    helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    app.kubernetes.io/name: "{{ .Values.name }}"
    app.kubernetes.io/instance: "{{ .Release.Name }}"
  annotations:
    "helm.sh/hook": test
spec:
  containers:
    - name: wget
      image: busybox
      command: ['wget']
      args: ['{{ .Release.Name }}:{{ .Values.service.port }}']
  restartPolicy: Never

3. 常用命令

  • helm create <chart-name>: 创建一个新的 Chart。
  • helm install <release-name> <chart-name>: 安装一个 Chart。
  • helm upgrade <release-name> <chart-name>: 升级一个已安装的 Chart。
  • helm template <chart-name>: 渲染 Chart 模板并输出 Kubernetes 资源配置。
  • helm lint <chart-name>: 检查 Chart 的语法和结构是否正确。

4. 模板语法示例

templates/ 目录中的文件可以使用 Go 模板语言来动态生成 Kubernetes 资源配置。以下是一个简单的 deployment.yaml 示例:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-deployment
  labels:
    app: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
        - name: {{ .Values.name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}
相关推荐
爱喝水的鱼丶几秒前
SAP-ABAP:数据类型与数据对象 第二篇:底层逻辑篇——数据类型的分类体系与底层存储原理
运维·开发语言·学习·sap·abap
志栋智能2 分钟前
效率革命:超自动化巡检如何将小时压缩为分钟?
运维·数据库·自动化
MilesShi11 分钟前
UI 自动化的基本功:元素定位的原则、策略与实战经验
运维·ui·自动化
wanhengidc20 分钟前
虚拟主机与服务器的区别
运维·服务器·安全·web安全·智能手机
东北甜妹21 分钟前
K8s etdc备份恢复 和 集群升级 证书更新
云原生·容器·kubernetes
optimistic_chen23 分钟前
【AI Agent 全栈开发】RAG(检索增强生成)
java·linux·运维·人工智能·ai编程·rag
毕小宝23 分钟前
Claude Code 模型切换脚本 switch.sh 编写
linux·运维·服务器
乐维_lwops27 分钟前
【无标题】
运维·人工智能
2601_9547064934 分钟前
2026 年 5 月云手机实测:傲晨云、川川云、多多云深度对比
运维·服务器·智能手机
念恒123061 小时前
Docker基础--CGroups资源控制实战(包含部分指令)
运维·docker·容器