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 }}
相关推荐
阿里云云原生14 小时前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
大树8815 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠15 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质15 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工16 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智16 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_17 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉17 小时前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦18 小时前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj18 小时前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes