前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日一个云原生小技巧 #19】Helm Chart 结构

【每日一个云原生小技巧 #19】Helm Chart 结构

作者头像
郭旭东
发布2023-11-09 13:08:15
3040
发布2023-11-09 13:08:15
举报
文章被收录于专栏:云原生工具箱

Helm Chart 是 Helm 的包格式,它是一个预配置的资源集合,用于在 Kubernetes 上部署和管理应用程序。一个 Chart 可以被认为是 Kubernetes 资源的“配方”,它包含了部署应用所需的所有资源定义,如 Deployments、Services、PersistentVolumeClaims 等。

Chart 结构通常包括以下文件和目录:

  • Chart.yaml:Chart 的描述文件,包含了 Chart 的名称、版本、描述等信息。
  • values.yaml:配置文件,默认值的集合,用户可以在这里设置用来覆盖 Chart 中默认配置的参数。
  • templates/:模板目录,包含 Kubernetes 资源的模板文件,这些文件描述了如何生成 Kubernetes 清单文件(YAML)。
  • charts/:依赖目录,可以存放 Chart 所依赖的其他 Charts。
  • templates/NOTES.txt:安装说明文件,可以包含 Chart 安装后的使用说明。
  • templates/tests/:测试文件目录,包含 Helm Chart 安装后可以运行的测试。

使用场景:

  • 快速部署: 使用 Helm Chart 快速部署复杂的应用到 Kubernetes。
  • 版本管理和共享: 管理不同版本的应用配置,并共享给其他用户或团队。
  • 复用配置: 对相似的部署配置进行抽象和参数化,达到复用配置的目的。

使用技巧

  1. 使用参数化: 在模板中使用参数来保持配置的灵活性。
  2. 利用 values 文件: 为不同环境(开发、测试、生产)创建不同的 values 文件。
  3. 封装依赖: 把应用的依赖封装到 Chart 中,确保一致性。
  4. 测试 Chart: 使用 helm test 命令来测试 Chart 是否按预期工作。
  5. 利用 Hooks: 使用 Helm 的生命周期钩子(hooks)来管理复杂的部署逻辑,比如数据库迁移。
  6. 版本控制: 将 Chart 存储在版本控制系统中,跟踪配置的变化。
  7. 安全性: 遵循最佳实践,如不在 Chart 中硬编码敏感信息,使用 Secret 管理。

使用案例

假设你正在创建一个 Web 应用的 Helm Chart。

Chart.yaml 示例:

代码语言:javascript
复制
apiVersion: v2
name: my-web-app
description: A Helm chart for Kubernetes
version: 0.1.0
appVersion: "1.16.0"

values.yaml 示例:

代码语言:javascript
复制
replicaCount: 2

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: "stable"

service:
  type: LoadBalancer
  port: 80

templates/deployment.yaml 示例:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.nameOverride | default .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.nameOverride | default .Chart.Name }}
  template:
    metadata:
      labels:
        app: {{ .Values.nameOverride | default .Chart.Name }}
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: 80

templates/service.yaml 示例:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.nameOverride | default .Chart.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: 80
  selector:
    app: {{ .Values.nameOverride | default .Chart.Name }}

在这个简单的例子中,我们创建了一个 Chart,其中包含了一个部署和一个服务。在 values.yaml 中定义了默认值,这些值在 templates/deployment.yaml 和 `templates/service

.yaml中被引用。用户可以轻松更改values.yaml` 文件中的值,或者在安装 Chart 时通过命令行参数覆盖这些值。

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

本文分享自 云原生之路 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用技巧
  • 使用案例
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档