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 }}
相关推荐
the丶only9 分钟前
单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
linux·运维·服务器·docker·gitlab
ccubee38 分钟前
docker 安装 ftp
运维·docker·容器
枫叶红花1 小时前
【Linux系统编程】:信号(2)——信号的产生
linux·运维·服务器
yaosheng_VALVE1 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king1 小时前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
探索云原生1 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳1 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
苹果醋31 小时前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
TsengOnce2 小时前
Docker 安装 禅道-21.2版本-外部数据库模式
运维·docker·容器
永卿0012 小时前
nginx学习总结(不包含安装过程)
运维·nginx·负载均衡