文章 90
评论 1
浏览 811815
k8s之kustomization

k8s之kustomization

一、kustomization介绍

Kustomize是一个独立的工具,用来通过kustomization文件定制Kubernetes对象。

从1.14 版本开始,kubectl也开始支持使用kustomization文件来管理Kubernetes对象。 要查看包含kustomization文件的目录中的资源,执行下面的命令:

#只渲染输出不创建资源 kubectl kustomize <kustomization_directory>

要应用这些资源,使用 --kustomize-k 参数来执行 kubectl apply

#渲染并创建资源 kubectl apply -k <kustomization_directory>

二、使用说明

Kustomize是一个用来定制Kubernetes配置的工具。它提供以下功能特性来管理应用配置文件:

  • 从其他来源生成资源
  • 为资源设置贯穿性(Cross-Cutting)字段
  • 组织和定制资源集合

2.1 生成配置文件

1.configMapGenerator

configMapGenerator用来生成configmap资源文件。

使用files生成configmap

#创建配置文件 cat >application.properties<<EOF hello zhangzhuo EOF #生成Kustomize配置文件 cat kustomization.yaml configMapGenerator: - name: configmap-file files: - application.properties #输出渲染结果 kubectl kustomize ./ apiVersion: v1 data: application.properties: | hello zhangzhuo kind: ConfigMap metadata: name: configmap-file-52kfh26t8c

使用env生成configmap

#生成env文件 cat <<EOF >.env ZHANGZHUO=ceshi EOF #生成Kustomize配置文件 cat kustomization.yaml configMapGenerator: - name: configmap-env envs: - .env #渲染验证 kubectl kustomize apiVersion: v1 data: ZHANGZHUO: ceshi kind: ConfigMap metadata: name: configmap-env-85d29ccbg6

使用literals生成configmap

#生成生成Kustomize配置文件 cat kustomization.yaml configMapGenerator: - name: configmap-literals literals: - ZHANGZHUO=ceshi - CESHI=zhangzhuo #渲染验证 kubectl kustomize apiVersion: v1 data: CESHI: zhangzhuo ZHANGZHUO: ceshi kind: ConfigMap metadata: name: configmap-literals-9b9dbd7849

2.secretGenerator

你可以基于文件或者键值偶对来生成Secret,基本与configMapGenerator使用相同。示例如下

secretGenerator: - name: secret-file files: - application.properties - name: secret-env envs: - .env - name: secret-literals literals: - ZHANGZHUO=ceshi - CESHI=zhangzhuo

3.使用配置文件

configmap使用

#kustomization配置文件 configMapGenerator: - name: config-file files: - application.properties resources: - configMapGenerator.yml #deploy配置文件 piVersion: apps/v1 kind: Deployment metadata: name: config labels: app: config spec: selector: matchLabels: app: config template: metadata: labels: app: config spec: containers: - name: config image: echo volumeMounts: - name: password mountPath: /secrets volumes: - name: password secret: secretName: config-file

secret使用

#kustomization配置文件 secretGenerator: - name: secret-file files: - application.properties resources: - secretGenerator.yml #deploy配置文件 piVersion: apps/v1 kind: Deployment metadata: name: secret labels: app: secret spec: selector: matchLabels: app: secret template: metadata: labels: app: secret spec: containers: - name: secret image: echo volumeMounts: - name: password mountPath: /secrets volumes: - name: password secret: secretName: secret-file

4.generatorOptions

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

configMapGenerator: - name: configmap-file files: - application.properties secretGenerator: - name: secret-file files: - application.properties generatorOptions: disableNameSuffixHash: true #关闭哈希

2.2 设置贯穿性字段

在项目中为所有Kubernetes对象设置贯穿性字段是一种常见操作。 贯穿性字段的一些使用场景如下:

  • 为所有资源设置相同的名字空间
  • 为所有对象添加相同的前缀或后缀
  • 为对象添加相同的标签集合
  • 为对象添加相同的注解集合

示例:

namespace: ceshi #为所有资源知道ns namePrefix: dev- #为所有资源名称添加前缀 nameSuffix: "-001" #为所有资源名称添加后缀 commonLabels: #为所有资源添加lable app: bingo commonAnnotations: #为所有资源添加注释annotations oncallPager: 800-555-1212

2.3 组织和定制资源

一种常见的做法是在项目中构造资源集合并将其放到同一个文件或目录中管理。 Kustomize 提供基于不同文件来组织资源并向其应用补丁或者其他定制的能力。

1.组织resources

Kustomize 支持组合不同的资源。kustomization.yaml 文件的 resources 字段定义配置中要包含的资源列表。 你可以将 resources 列表中的路径设置为资源配置文件的路径。 下面是由 Deployment 和 Service 构成的 NGINX 应用的示例:

resources: #引用资源文件 - nginx/deploy.yml - nginx/service.yml

3.定制Patches

补丁文件(Patches)可以用来对资源执行不同的定制。 Kustomize 通过 patchesStrategicMergepatchesJson6902 支持不同的打补丁机制。 例如,构造一个补丁来增加 Deployment 的副本个数;构造另外一个补丁来设置内存限制。

#patchesJson6902 cat nginx_set_raplace.yml - op: replace path: /spec/replicas value: 3 #patchesStrategicMerge apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: template: spec: containers: - name: nginx resources: limits: memory: 512Mi #使用 resources: - nginx/deploy.yml - nginx/service.yml patchesJson6902: - target: group: apps version: v1 kind: Deployment name: nginx path: nginx_set_raplace.yml patchesStrategicMerge: - nginx_set_memory.yml

2.4 设置资源新的镜像

Kustomize 还提供定制容器镜像或者将其他对象的字段值注入到容器中的能力,并且不需要创建补丁。 例如,你可以通过在 kustomization.yaml 文件的 images 字段设置新的镜像来更改容器中使用的镜像。

#nginx资源文件 cat nginx/deploy.yml apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: run: nginx replicas: 2 template: metadata: labels: run: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 #kustomization文件 resources: - nginx/deploy.yml - nginx/service.yml images: - name: nginx #旧的镜像名称 newName: nginx #新的镜像名称 newTag: 1.4.0 #新的镜像tag

2.5 基准(Bases与覆盖(Overlays)

Kustomize中有基准(bases)覆盖(overlays) 的概念区分。 基准 是包含 kustomization.yaml 文件的一个目录,其中包含一组资源及其相关的定制。 基准可以是本地目录或者来自远程仓库的目录,只要其中存在 kustomization.yaml 文件即可。 覆盖 也是一个目录,其中包含将其他 kustomization 目录当做 bases 来引用的 kustomization.yaml 文件。 基准不了解覆盖的存在,且可被多个覆盖所使用。 覆盖则可以有多个基准,且可针对所有基准中的资源执行组织操作,还可以在其上执行定制。

示例:

#查看创建的目录结构 app/ ├── base │?? ├── deploy.yml │?? ├── kustomization.yaml │?? └── service.yml └── overlays ├── dev │?? └── kustomization.yaml └── uat └── kustomization.yaml #deploy文件内容 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - name: nginx image: nginx #svc文件内容 apiVersion: v1 kind: Service metadata: name: nginx labels: run: nginx spec: ports: - port: 80 protocol: TCP selector: run: nginx #base/kustomization.yaml resources: - deploy.yml - service.yml #dev/kustomization.yaml namespace: kustomization namePrefix: dev- commonLabels: app: app-dev commonAnnotations: oncallPager: app-dev resources: - ../../base images: - name: nginx newName: 10.202.43.240:5000/kubernetes/nginx newTag: dev #uat/kustomization.yaml namespace: kustomization namePrefix: uat- commonLabels: app: app-uat commonAnnotations: oncallPager: app-uat resources: - ../../base images: - name: nginx newName: 10.202.43.240:5000/kubernetes/nginx newTag: uat #使用 kubectl apply -k app/overlays/dev/ kubectl apply -k app/overlays/uat/

2.6 如何使用Kustomize命令

kubectl 命令中使用 --kustomize-k 参数来识别被 kustomization.yaml 所管理的资源。 注意 -k 要指向一个 kustomization 目录。例如:

#渲染资源文件并输出 kubectl kustomize app/overlays/uat/ #创建资源 kubectl apply -k app/overlays/dev/ #查看所创建的资源 kubectl get -k app/overlays/dev/ #查看详细信息 kubectl describe -k app/overlays/dev/ #比较对象与清单被应用之后集群将处于的状态 kubectl diff -k app/overlays/dev/ #删除资源 kubectl delete -k app/overlays/dev/

标题:k8s之kustomization
作者:Carey
地址:HTTPS://www.zhangzhuo.ltd/articles/2023/06/30/1688089257153.html

生而为人

傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~
取消