kubernetes helm的子chart编写及赋值方法(不用科学上网了)

前言

万恶的 Google 总是弄些标准化的东西,然后还有些傻吊跟风,比如部署 Kubernetets 服务的时候,常用的工具 helm,今天我们介绍下helm2(3也通用)。
在开发 helm 插件的时候,我们经常需要测试插件的模板和Values的生成结果,如果每一次使用都要部署一次到k8s上那就不可取了。
所以官方提供了 –dry-run --debug 参数。
今天给小伙伴们介绍两个内容:

  1. helm多级chart如何编写
  2. 通过helm命令动态给chartvalues属性赋值

一、多级chart的开发

helm 插件开发调试

  1. 第一步、新建一个chart
$ mkdir /helm
$ cd helm/
$ helm create mychart
Creating mychart
# 下面可以不用执行,我这里删除是因为要做个简单的例子,要不文件太多容易乱。
$ rm -rf mychart/templates/*
  1. 第二步、做一个configmap.yaml 文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: {
    
    {
    
     .Release.Name }}-cfgmap2
data:
  dessert: {
    
    {
    
     .Values.dessert }}
  1. 第三步、我们在 values.yaml 里加入 dessert 属性。(可以看上面模板 .Values.dessert 代表从values.yaml 文件找dessert属性),如下:
    在这里插入图片描述
  2. 我们可以测试了,独立测试这个Chart
$ helm install --dry-run --debug /helm/mychart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/_scratch/mychart
NAME:   newbie-elk
TARGET NAMESPACE:   default
CHART:  mychart 0.1.0
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: newbie-elk-cfgmap2
data:
  dessert: sunxy

helm 的子 chart 编写

helm 支持子Chart定义,也就是“包中包”,chart 里面 还有子chart。
首先定义方式比较简单,需要在主Chart的 charts 文件夹里面 再新建 一个Chart,
那么新建的就是这个主Chart的子chart了。

  1. 第一步、新建一个chart,在刚才的chart里面找到charts文件夹
$ cd helm/mychart/charts
$ helm create subchart
Creating subchart
# 下面可以不用执行,我这里删除是因为要做个简单的例子,要不文件太多容易乱。
$ rm -rf /helm/mychart/charts/subcahrt/templates/*
  1. 第二步、做一个configmap.yaml 文件,可以看到和刚才的主chart是一样的,连文件内容都一样,因为我们这是在模拟主/子chart的复制问题。
apiVersion: v1
kind: ConfigMap
metadata:
  name: {
    
    {
    
     .Release.Name }}-cfgmap2
data:
  dessert: {
    
    {
    
     .Values.dessert }}
  1. 同样我们现在测试下子chart,独立测试这个
$ helm install --dry-run --debug /helm/mychart/charts/subchart
SERVER: "localhost:44134"
CHART PATH: /Users/mattbutcher/Code/Go/src/k8s.io/helm/_scratch/mychart/charts/subchart
NAME:   newbie-elk
TARGET NAMESPACE:   default
CHART:  subchart 0.1.0
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: newbie-elk-cfgmap2
data:
  dessert: sunxy

主 Values.yaml 如何给子chart赋值

要覆盖子chart中的值,可以在父chart 的values.yaml文件中这样写:

favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions
  
subchart:  # 注意此处名称
  dessert: airoot.cn

测试下,输入结果:

data:
    dessert: airoot.cn

你也可以定义全局Value 属性,这样主chart 和 子chart都可以访问了。

favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

subchart:
  dessert: ice cream

global:
  salad: caesar

二、我们可以动态变更Values的值吗?

通过 helm 的 set 动态赋值

可能很多小伙伴都不知道 helm 是可以动态赋值的。
helm动态赋值使用 set 功能功能举个例子:

$ helm install --dry-run --debug ./mychart --set dessert=www.airoot.cn

在这里插入图片描述

我们还可以通过 set设置子chart
看例子:

$ helm install --dry-run --debug ./ --set dessert=www.airoot.cn --set subchart.dessert==airoot-uisys

在这里插入图片描述
可以看到通过helm 的 set 参数可以动态的设置helm chart的 values,如果设置子chart 我们只需要通过子chart的文件夹名字加上其自value.yaml 中的属性名就行了,很容易理解。

好到此我们已经了解了编写方法。希望大家关注我,后续我会个大家推几款重磅技术流。

猜你喜欢

转载自blog.csdn.net/uucckk/article/details/105581007