当前位置:网站首页>kustomize入门示例及基本语法使用说明
kustomize入门示例及基本语法使用说明
2022-08-09 12:34:00 【学亮编程手记】
本文对kustomize进行学习,参见文档GitHub, Document。
kustomize
lets you customize raw, template-free YAML files for multiple purposes, leaving the original YAML untouched and usable as is.
在v1.14之后,the kustomize build system被合到kubectl中。安装kustomize请参见Install。
一般使用base+overlays的方式来管理yaml文件,base中包含resource yaml文件以及自己的kustomization.yaml文件,overlays中包含base的变种,用来对base中的yaml文件进行修改,适应于不同的环境。
通常的文件结构如下:
~/someApp
├── base
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── development
│ ├── cpu_count.yaml
│ ├── kustomization.yaml
│ └── replica_count.yaml
└── production
├── cpu_count.yaml
├── kustomization.yaml
└── replica_count.yaml
使用下面命令来生成YAML文件,也可以直接apply生成的YAML文件。
kustomize build ~/someApp/overlays/production
kustomize build ~/someApp/overlays/production | kubectl apply -f -
下面来讲解具体使用Kustomization.yaml来定制化k8s yaml文件。
Kustomization.yaml中通常包含3种类型的标注:
- Generator 用来为Kustomize提供Resource Config,像:bases, resources, configMapGenerator, secretGenerator;
- Transformers 用来修改Resource Config, 包括:images, namespace, namePrefix, nameSuffix, vars, commonAnnotations, commonLabels, patchesJson6902, patchesStrategicMerge;
- Meta 用来配置Generator和Transformers的行为,包括:configurations, generatorOptions。
-bases:
bases用来提供一系列包含kustomization.yaml文件的目录或git repo。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- path/to/dir/with/kust/
- https://github.com/org/repo/dir/
-resources:
用来指定一系列需要配置的Resource Config file,每个文件中可定义多个resource config并使用"\n---\n"来分隔。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# list of files containing Resource Config to add
resources:
- path/to/resource.yaml
- another/path/to/resource.yaml
-configMapGenerator:
包含一系列需要生成的ConfigMaps。默认情况下,会将configmap的hash作为name的后缀,放在nameSuffix之后。
ConfigMap data的更改将会创建具有新name的ConfigMap,并滚动更新正在被使用的ConfigMap。PodTemplates中使用ConfigMap需要使用configMapGenerator的name,这样configmap name更新后会自动更新refer的configmap name。
通过指定generatorOptions.disableNameSuffixHash=true并将该kustomization.yaml作为base,将使得生成的configmap中不包含hash后缀。但这样就不会有滚动升级来实时更新configmap。
包含如下的参数:
- behavior:定义在base中时指定merge行为,包括:create, replace, merge。
- env:指定生成configmap的文件,文件内容以key=value指定;
- files: 指定用来生成configmap的多个文件,文件名作为configmap key,文件内容作为value;
- literals:使用key=value对来生成configmap;
- name:configmap的名称,会被nameprefix和namesuffix修改;
- namespace:指定configmap的namespace,会被kustomize的namespace修改。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
# generate a ConfigMap named my-java-server-props-<some-hash> where each file
# in the list appears as a data entry (keyed by base filename).
- name: my-java-server-props
files:
- application.properties
- more.properties
# generate a ConfigMap named my-java-server-env-vars-<some-hash> where each literal
# in the list appears as a data entry (keyed by literal key).
- name: my-java-server-env-vars
literals:
- JAVA_HOME=/opt/java/jdk
- JAVA_TOOL_OPTIONS=-agentlib:hprof
# generate a ConfigMap named my-system-env-<some-hash> where each key/value pair in the
# env.txt appears as a data entry (separated by \n).
- name: my-system-env
env: env.txt
-secretGenerator
用来生成Secrets。跟configMapGenerator类似,secretGenerator的name后也会有hash值并在hash值变化时创建新的secret进行滚动升级,同样,可以取消。
具有configMapGenerator中所有的参数并且意义相同。同时,存在参数type来指定Secret的类型,若为"http://kubernetes.io/tls",需要包含2个key:"tls.key" and "tls.crt".
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
secretGenerator:
# generate a tls Secret
- name: app-tls
files:
- secret/tls.cert
- secret/tls.key
type: "kubernetes.io/tls"
- name: env_file_secret
# env is a path to a file to read lines of key=val
# you can only specify one env file per secret.
env: env.txt
type: Opaque
-commonAnnotations
用来为所有resources添加或更新指定annotation。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonAnnotations:
annotationKey1: "annotationValue2"
annotationKey2: "annotationValue2"
-commonLabels
类似于commonAnnotations,用来为所有resource添加或更新指定label。但不同的是,label也会添加到PodTemplates中的label selector和label字段。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
labelKey1: "labelValue1"
labelKey2: "labelValue2"
-images
用来更新所有匹配image name的[spec.template.]spec.containers.image字段中的image name和image tag。
若image名称为name:tag,digest用来替代tag来refer image的另一种方法。具有如下参数:
- name 用于获取匹配image name的所有image;
- newName 用来替换所有匹配image的name;
- newTag 用来替换所有匹配image的tag;
- digest 用来替换所有匹配image的tag;
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: postgres
newName: my-registry/my-postgres
newTag: v1
- name: nginx
newTag: 1.8.0
- name: my-demo-app
newName: my-app
- name: alpine
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
-patchesJson6902
用来根据path指定的json或yaml文件来生成target指定的k8s resource。Target中可以包含group, kind, name, namespace, version等信息,Path中指定patch file的路径。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesJson6902:
- target:
version: v1
kind: Deployment
name: my-deployment
path: add_init_container.yaml
- target:
version: v1
kind: Service
name: my-service
path: add_service_annotation.yaml
其中,path字段指定的JSON patch文件,格式参见JSON patch。示例如下:
- op: add
path: /some/new/path
value: value
- op: replace
path: /some/existing/path
value: new value
-patchesStrategicMerge
为匹配的resource config实施patches。推荐使用只修改单个资源的小patch。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesStrategicMerge:
- service_port_8888.yaml
- deployment_increase_replicas.yaml
- deployment_increase_memory.yaml
-namespace
用来指定所有resource的namespace,会覆盖resource中已经指定的namespace。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: "my-app-namespace"
-namePrefix/nameSuffix
用来为所有resource name指定前缀或后缀。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namePrefix: "my-app-name-prefix-"
nameSuffix: "-my-app-name-suffix"
-vars
用来定义Pod container中的参数或环境变量,使用$(MY_VAR_NAME)来使用变量。
包含如下参数:
- name 变量的名称,以${name}方式使用
- objref Reference to the object containing the field to be referenced.
- fieldref Reference to the field in the object, 默认为metadata.name
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
vars:
- name: SOME_SECRET_NAME
objref:
kind: Secret
name: my-secret
apiVersion: v1
- name: MY_SERVICE_NAME
objref:
kind: Service
name: my-service
apiVersion: v1
fieldref:
fieldpath: metadata.name
- name: ANOTHER_DEPLOYMENTS_POD_RESTART_POLICY
objref:
kind: Deployment
name: my-deployment
apiVersion: apps/v1
fieldref:
fieldpath: spec.template.spec.restartPolicy
使用示例:
containers:
- image: myimage
command: ["start", "--host", "$(MY_SERVICE_NAME)"]
env:
- name: SECRET_TOKEN
value: $(SOME_SECRET_NAME)
Meta options用来控制Kustomize怎么生成来更新resource config。包含configurations和generatorOptions。
-configurations
用来配置built-in Kustomize Transformers指定CRD过程中的行为。
-generatorOptions
用来定制化configmap/secret generator的行为。
示例:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
generatorOptions:
# labels to add to all generated resources
labels:
kustomize.generated.resources: somevalue
# annotations to add to all generated resources
annotations:
kustomize.generated.resource: somevalue
# disableNameSuffixHash is true disables the default behavior of adding a
# suffix to the names of generated resources that is a hash of
# the resource contents.
disableNameSuffixHash: true
样例Kustomization.yaml参见Kustomization.yaml。
参考链接:
边栏推荐
- Report: The number of students who want to learn AI has increased by 200%, and there are not enough teachers
- Flutter入门进阶之旅(十)Dialog&Toast
- AQS同步组件-FutureTask解析和用例
- Compensation transaction and idempotency guarantee based on CAP components
- 关于Retrofit网络请求URL中含有可变参数的处理
- Batch大小不一定是2的n次幂!ML资深学者最新结论
- Flutter Getting Started and Advanced Tour (7) GestureDetector
- 合并两个有序列表
- 又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
- 二叉树的序列化和反序列化
猜你喜欢
Go Affair, How to Become a Gopher and Find a Go Job in 7 Days, Part 1
00后写个暑假作业,被监控成这笔样
脱光衣服待着就能减肥,当真有这好事?
1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
Go 事,如何成为一个Gopher ,并在7天找到 Go 语言相关工作,第1篇
Data Mining-05
AQS Synchronization Component - FutureTask Analysis and Use Cases
Two minutes recording can pass by second language!The volcano how to practice and become voice tone reproduction technology?
工作任务统计
Flutter入门进阶之旅(六)Layout Widget
随机推荐
卷积神经网络表征可视化研究综述(1)
Rust from entry to proficient 04 - data types
SQL Server查询优化 (转载非原创)
Scala 高阶(七):集合内容汇总(上篇)
30行代码实现蚂蚁森林自动偷能量
Flutter入门进阶之旅(四)文本输入Widget TextField
MySQL 原理与优化,Group By 优化 技巧
MySQL备份与恢复 (转载非原创)
Flutter introduction advanced trip (5) Image Widget
链表噩梦之一?5000多字带你弄清它的来龙去脉
WebView注入Js代码实现大图自适应屏幕点击图片预览详情
告别手摇织布机的AI时代
手写大根堆
ABP中的数据过滤器 (转载非原创)
Redis源码剖析之字典(dict)
1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
用场景定义硬件,英码科技破解“边缘计算”密码
张朝阳对话俞敏洪:一边是手推物理公式,一边是古诗信手拈来
Flutter入门进阶之旅(十)Dialog&Toast
Extract EventBus encapsulation to base class using annotations