Kustomization Manifest 详解

概述

参考:

apiVersion: kustomize.config.k8s.io/v1beta1

kind: Kustomization

bases([]STRING)

此列表中的每个条目都应该是一个包含 kustomization.yaml 文件的目录

commonLabels(map[STRING]STRING)

为所有对象和选择器添加的标签

commonAnnotations(map[STRING]STRING)

为所有对象添加的注释

configurations([]STRING)

列表中每个条目都应能解析为一个包含 Kustomize 转换器配置 的文件

images: <[]Image>

name(STRING) # 需要修改的 image 字段的名称。需要通过这个找到可供修改的字段。

newName(STRING) # 用于替换原始镜像名称的值。

newTag(STRING) # 用于替换原始镜像 Tag 的值。

crds([]STRING)

列表中每个条目都赢能够解析为 Kubernetes 类别的 OpenAPI 定义文件

namesapce(STRING)

为所有资源添加名称空间

namePrefix(STRING)

为所有对象的名称添加前缀

nameSuffix(STRING)

为所有对象的名称添加后缀

resources([]STRING)

列表中的每个条目都代表一个 Manifests 文件

patchesStrategicMerge([]STRING)

列表中每个条目都能解析为某 Kubernetes 对象的策略性合并补丁

patchesJson6902([]Patch)

列表中每个条目都能解析为一个 Kubernetes 对象和一个 JSON 补丁

vars

每个条目用来从某资源的字段来析取文字 images 每个条目都用来更改镜像的名称、标记与/或摘要,不必生成补丁

生成 configmap 与 secret 对象的相关字段

configMapGenerator([]Object)

要生成的 ConfigMap 资源的列表

name(STRING) # ConfigMap 对象的名称

files([]STRING) # 通过文件生成 ConfigMap。文件名就是 ConfigMap 资源中 data 字段下的键,文件内容就是键对应的值。

secretGenerator([]SecretArgs)

可以基于文件或者键值偶对来生成 Secret。

https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/secretargs.go name(STRING) # Secret 对象的名称

files([]STRING) # 通过文件生成 Secret。文件名就是 Secret 资源中 data 字段下的键,文件内容就是键对应的值,值是文件内容进行 base64 编码后的结果。

type(STRING) # Secret 的类型。默认值:Opaque

  • 可用的类型有:
    • kubernetes.io/tls # 注意,如果是 tls 类型,则文件名必须是 tls.key 和 tls.crt

generatorOptions:

disableNameSuffixHash(BOOLEAN) # 禁用将随机字符串添加到 ConfigMap 和 Secret 对象名称的后缀。默认值:false

labels(map[STRING]STRING) # 为 ConfigMap 和 Secret 对象添加标签

annotations(map[STRING]STRING) # 为 ConfigMap 和 Secret 对象添加注释

image.png

配置示例

要基于文件来生成 ConfigMap,可以在 configMapGeneratorfiles 列表中添加表项。 下面是一个根据 .properties 文件中的数据条目来生成 ConfigMap 的示例:

# 生成一个  application.properties 文件
cat <<EOF >application.properties
FOO=Bar
EOF

cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-1
  files:
  - application.properties
EOF

所生成的 ConfigMap 可以使用下面的命令来检查:

kubectl kustomize ./

所生成的 ConfigMap 为:

apiVersion: v1
data:
  application.properties: |
    FOO=Bar    
kind: ConfigMap
metadata:
  name: example-configmap-1-8mbdf7882g

ConfigMap 也可基于字面的键值偶对来生成。要基于键值偶对来生成 ConfigMap, 在 configMapGeneratorliterals 列表中添加表项。下面是一个例子,展示 如何使用键值偶对中的数据条目来生成 ConfigMap 对象:

cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-2
  literals:
  - FOO=Bar
EOF

可以用下面的命令检查所生成的 ConfigMap:

kubectl kustomize ./

所生成的 ConfigMap 为:

apiVersion: v1
data:
  FOO: Bar
kind: ConfigMap
metadata:
  name: example-configmap-2-g2hdhfc6tk

所生成的 ConfigMap 和 Secret 都会包含内容哈希值后缀。 这是为了确保内容发生变化时,所生成的是新的 ConfigMap 或 Secret。 要禁止自动添加后缀的行为,用户可以使用 generatorOptions。 除此以外,为生成的 ConfigMap 和 Secret 指定贯穿性选项也是可以的。

cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-3
  literals:
  - FOO=Bar
generatorOptions:
  disableNameSuffixHash: true
  labels:
    type: generated
  annotations:
    note: generated
EOF

运行 kubectl kustomize ./ 来查看所生成的 ConfigMap:

apiVersion: v1
data:
  FOO: Bar
kind: ConfigMap
metadata:
  annotations:
    note: generated
  labels:
    type: generated
  name: example-configmap-3