kustomization的使用
安装 kustomize 命令
1 |
|
kustomization
kustomize 是一个通过 kustomization 文件定制 kubernetes 对象的工具,它可以通过一些资源生成一些新的资源,也可以定制不同的资源的集合。
kustomization 常见目录布局
1 | ├── base |
/bases
目录保存的是基本的配置/overlays
【此文件夹也可以省略】里放置的不同环境的配置,例如/dev
、/staging
,/prod
这些就是不同环境的配置,/base
等文件夹下都有一个 kustomization .yml 文件,用于配置。
kustomization 自定义目录布局
1 | ├── base |
kustomization.yml 常用字段详解
kustomize 提供了比较丰富的字段选择,除此之外还可以自定义插件,下面会大概列举一下每个字段的含义,当我们需要用到的时候知道有这么个能力,然后再去 Kustomize 官方文档 查找对应的 API 文档就行了。kustomization.yaml 中常用字段参考官方文档:
resources
表示 k8s 资源的位置,这个可以是一个文件,也可以指向一个文件夹,读取的时候会按照顺序读取,路径可以是相对路径也可以是绝对路径,如果是相对路径那么就是相对于 kustomization.yml
的路径
1 | apiVersion: kustomize.config.k8s.io/v1beta1 #创建该对象所使用的API版本 |
namespace
为所有资源添加 namespace
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
images
修改镜像的name
、tag
或 image digest
,而无需使用 patches
。例如,对于这种 kubernetes Deployment 片段:
1 | kind: Deployment |
想要将 image
做如下更改:
- 将 nginx tag 从
latest
改为stable-perl
只需在 kustomization
中添加以下内容:
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
replicas
修改资源副本数
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
该字段内容为列表,所以可以同时修改许多资源。
由于这个声明无法设置 kind:
或 group:
,所以他只能匹配如下资源中的一种:
Deployment
ReplicationController
ReplicaSet
StatefulSet
namePrefix
为所有资源和引用的名称添加前缀
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
nameSuffix
为所有资源和引用的名称添加后缀
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
patches
在资源上添加或覆盖字段,Kustomization
使用 patches
字段来提供该功能。
patches
字段包含要按指定顺序应用的 patch 列表。
patch 可以:
- 是一个
strategic merge patch
,或者是一个JSON patch
。 - 也可以是 patch 文件或 inline string
- 针对单个资源或多个资源
目标选择器可以通过 group、version、kind、name、namespace、标签选择器和注释选择器来选择资源,选择一个或多个匹配所有指定字段的资源来应用 patch。
patch.yml更该了镜像拉取策略和pod的实例数
1 | apiVersion: apps/v1 |
patch.json中修改了deployment的name和部署镜像后的名字
1 | [ |
kustomization.yml中添加了patch
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
patchesJson6902
列表中的每个条目都应可以解析为 kubernetes
对象和将应用于该对象的 JSON patch
。
patch.json
1 | [ |
patchesStrategicMerge
使用 strategic merge patch
标准 Patch resources
.
patch.yml
1 | apiVersion: apps/v1 |
commonAnnotations
为所有资源加上 annotations
如果对应的 key 已经存在值,这个值将会被覆盖
commonLabels
为所有资源的加上 label
和 label selector
注意:这个操作会比较危险
configMapGenerator
列表中的每个条目都将生成一个 ConfigMap (合计可以生成 n 个 ConfigMap)。
以下示例创建四个 ConfigMap:
- 第一个使用给定文件的名称和内容创建数据
- 第二个使用文件中的键/值对将数据创建为键/值
- 第三个使用
literals
中的键/值对创建数据作为键/值 - 第四个通过
options
设置单个 ConfigMap 的注释和标签
每个 configMapGenerator 项均接受的参数 behavior: [create|replace|merge]
,这个参数允许修改或替换父级现有的 configMap。
此外,每个条目都有一个 options
字段,该字段具有与 kustomization 文件的 generatorOptions
字段相同的子字段。
options
字段允许用户为生成的实例添加标签和(或)注释,或者分别禁用该实例名称的哈希后缀。此处添加的标签和注释不会被 kustomization 文件 generatorOptions
字段关联的全局选项覆盖。但是如果全局 generatorOptions
字段指定 disableNameSuffixHash: true
,其他 options
的设置将无法将其覆盖。
ConfigMap from file
kustomization.yml
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
application.properties
1 | dou=bao #根据此键值对生产CM |
ConfigMap from env file
kustomization.yml
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
application.properties
1 | dou=bao #根据此键值对生产CM |
ConfigMap from Literals
kustomization.yml
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
secretGenerator
生成 Secret 资源。
列表中的每个条目都将生成一个 Secret(合计可以生成 n 个 Secrets)。
功能与 configMapGenerator 字段类似。
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |
db.username
1 | root |
db.password
1 | 123456 |
生产的db-secret
1 | apiVersion: v1 |
generatorOptions
用于控制configMapGenerator
和secretGenerator
的行为
1 | apiVersion: kustomize.config.k8s.io/v1beta1 |