当前位置:网站首页>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。
参考链接:
边栏推荐
猜你喜欢
Scala Advanced (7): Collection Content Summary (Part 1)
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
#Internet of Things essay#Xiaoxiong pie equipment development actual combat
#WeArePlay | 与更多开发者一起,探索新世界
26、管道参数替换命令xargs
Intra-group reverse order adjustment of K nodes
[Microservice ~ Remote Call] Integrate RestTemplate, WebClient, Feign
腾讯欲成育碧最大股东/ 米哈游招NLP内容生成研究员/ AI发现四千余物种濒临灭绝...今日更多新鲜事在此...
两个链表相加
又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...
随机推荐
Flutter introduction advanced trip (5) Image Widget
ABP中的数据过滤器 (转载非原创)
ABAP interview questions: how to use the System CALL interface of the ABAP programming language, direct execution ABAP server operating System's shell command?
Rust from entry to proficient 04 - data types
Flutter Getting Started and Advanced Tour (3) Text Widgets
张朝阳对话俞敏洪:一边是手推物理公式,一边是古诗信手拈来
Flutter入门进阶之旅(八)Button Widget
大佬们,请教一下,我看官方文档中,sqlserver cdc只支持2012版之后的,对于sqlser
腾讯发布第二代四足机器人Max,梅花桩上完成跳跃、空翻
30行代码实现微信朋友圈自动点赞
FFmpeg compiles and installs on win10 (configure libx264)
Say goodbye to the AI era of hand looms
造自己的芯,让谷歌买单!谷歌再度开源 180nm 工艺的芯片
Redis源码剖析之字典(dict)
About the handling of variable parameters in the Retrofit network request URL
Manchester city launch emotional intelligence scarf can be detected, give the fans
李开复花上千万投的缝纫机器人,团队出自大疆
K个结点的组内逆序调整
两个链表相加
glide工具类的简单封装