前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >helm中的依赖关系

helm中的依赖关系

原创
作者头像
用户8851924
发布2022-11-15 23:00:01
2.5K0
发布2022-11-15 23:00:01
举报
文章被收录于专栏:lilizi

Helm是一个作用于k8s的包管理工具。类似于其它的包管理工具如apt/yum ,应用开发者可以管理应用包chart之间的依赖关系,以便于部署复杂的k8s应用。

定义依赖关系

在 helm中,一个 chart 可以依赖于任何数量的其他 chart。这些依赖关系可以在chart.yaml中的 dependencies字段定义。(helm2中是在requirements.yaml文件中定义)

代码语言:yaml
复制
dependencies:
  - name: subchart1
    version: ~1.2.3
    repository: http://example.com/charts
  - name: subchart2
    version: 3.2.1
    repository: http://another.example.com/charts

name 字段是 chart 的名称。version 字段是 chart可接受的版本,关于版本定义的语法,可以参考semver document。repository 字段是该 chart所在的repo 的完整 URL,该 repo须使用 helm repo add 添加到repo list中。

除上述必要字段外,每个dependencies的条目还可包含字段 tagscondition

代码语言:yaml
复制
dependencies:
  - name: subchart1
    repository: http://example.com/charts
    version: 0.1.0
    condition: subchart1.enabled, global.subchart1.enabled
    tags:
      - frontend
      - subchart1
  - name: subchart2
    repository: http://example.com/charts
    version: 0.1.0
    condition: subchart2.enabled,global.subchart2.enabled
    tags:
      - backend
      - subchart2

默认情况下所有 charts 都会加载。如果存在 tagscondition 字段,将根据它们的值控制 chart 的加载。

Condition - condition 字段包含一个或多个 YAML 路径,如果此路径存在于父级的values.yaml中并且解析为布尔值,则将根据该布尔值启用或禁用 chart。只有在列表中找到的第一个有效路径才被评估,如果没有路径存在,那么该条件不起作用。

Tags - 标签字段是与此 chart 关联的 YAML 标签列表。在顶级父级的值中,可以通过指定标签和布尔值来启用或禁用所有带有标签的 chart。

定义好dependencies字段后,通过运行 helm dependency update ,你的依赖中所有指定的 chart 将下载到你的 charts/ 目录中。该命令会检查依赖中的chart是否存在于charts/中并且处于可接受的版本,否则将拉取满足依赖关系的最新chart,并清理旧的依赖关系。

成功执行该命令后,将生成 Chart.lock文件,用于将依赖关系重构为确切的版本。

管理子chart值

子chart将以压缩包的形式存在于charts目录下。我们可以在父chart的values.yaml中定义相应的字段来管理子chart的值。

以kafka为子chart为例,假设我们的目录如下:

代码语言:txt
复制
support/
├── Chart.lock
├── Chart.yaml
├── README.md
├── charts
│   └── kafka-0.21.2.tgz
├── templates
│   ├── init-kafka.job.yaml
│   └── testclient.yaml
└── values.yaml

kafka的chart中原本的values.yaml有如下字段:

代码语言:yaml
复制
topics: []
  # - name: myExistingTopicConfig
  #   config: "cleanup.policy=compact,delete.retention.ms=604800000"
  # - name: myExistingTopicReassignPartitions
  #   partitions: 8
  #   replicationFactor: 5
  #   reassignPartitions: true

当我们在values.yaml中如下配置时:

代码语言:yaml
复制
kafka:
  topics:
    - name: test1
      partitions: 1
      replicationFactor: 1
    - name: test2
      partitions: 1
      replicationFactor: 1

topics会自动替换kafka子chart中的该字段,并在安装时配置test1和test2两个topic。

高级别的 chart 可以访问下面定义的所有变量。

安装顺序说明

值得注意的是,虽然我们可以在helm中定义依赖关系,但在安装过程中,并不会根据依赖关系顺序进行安装。

关于helm3的安装顺序可以参考helm-kind_sorter,helm的安装和卸载顺序都根据kind来决定,部分常见的kind的安装顺序如下:

<ol>

<li>Namespace</li>

<li>Secret</li>

<li>ConfigMap</li>

<li>StorageClass</li>

<li>PersistentVolume</li>

<li>PersistentVolumeClaim</li>

<li>ServiceAccount</li>

<li>CustomResourceDefinition</li>

<li>Service</li>

<li>Pod</li>

<li>Deployment</li>

<li>Job</li>

<li>Ingress</li>

<li>APIService</li>

</ol>

卸载的顺序与安装顺序相反。

如果想要控制某些安装顺序时,可以参考 Chart Hooks

参考链接

1(https://whmzsu.github.io/helm-doc-zh-cn/chart/charts-zh_cn.html)

2(https://github.com/Masterminds/semver#checking-version-constraints )

3(https://github.com/helm/helm/blob/release-3.0/pkg/releaseutil/kind_sorter.go)

4(https://helm.sh/docs/topics/charts_hooks/)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义依赖关系
  • 管理子chart值
  • 安装顺序说明
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档