【k8s学习】kustomize学习

2022-06-26  本文已影响0人  伊丽莎白2015

【前置文章】

【环境】

1. kustomize是什么?

官网:https://kustomize.io/
如果了解Helm的话,两者在工作上有相似的地方,都是为了更好的管理yaml配置文件,kustomize也是用一种template模板的来更好的生成kubernetes配置文件。

可以在官网上查看相关介绍:https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/

2. 示例

网上找的一个很好的demo:https://github.com/gbaeke/realtimeapp-infra

image.png
2.1 可以看到在bases目录下面,有诸多yaml文件:

以下是kustomization.yaml文件的定义:
可以看出resources为上述列的两个,即:realtime.yaml, redis.yaml,除此之前还定义了变量:REDISSERVICE, REDISNAMESPACE

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- realtime.yaml
- redis.yaml

vars:
- name: REDISSERVICE
  objref:
    kind: Service
    name: redis
    apiVersion: v1
- name: REDISNAMESPACE
  objref:
    kind: Service
    name: redis
    apiVersion: v1
  fieldref:
    fieldpath: metadata.namespace
2.2 overlays目录

除了bases目录,还有另外一个目录,叫overlays,里面有两个文件夹,从名字上也能看出来,是区分了不同的环境,这也是为什么要用kustomize的主要原因,不然我们针对不同环境的配置,很难通过传统的简单的几个deployment.yaml, service.yaml来管理

image.png dev相关的配置: image.png labels不一样: image.png

overlays/dev目录下的kustomization.yaml文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: realtime-dev
nameSuffix: -dev
resources:
- ../../bases/realtimeapp
- namespace.yaml
transformers:
- labels.yaml
replicas:
- count: 1
  name: realtime
images:
- name: gbaeke/flux-rt
  newTag: sha-11e921f
2.3 clone到本地,开始部署

转到【overlays/dev目录】下,运行:

kubectl kustomize

可以看到输出了kubernetes yaml模版,labels也加上了,name也加上了环境: image.png replica输出的数量为1: image.png

【那么它是如何映射的呢?】
首先,我们运行的是dev目录下的kustomization.yaml文件,它的resources是bases/realtimeapp下(会自动找kustomization.yaml文件),即会把bases下的定义都给load进来:

image.png

【相当于bases目录下的kustomization.yaml是基础模版,然后overlays的dev下的文件,会重写】

而nameSuffix定义的是后缀名,所以我们看到通过kubectl kustomize输出的最终模板里,加了-dev的后缀名。

在dev中我们重写了replica的数量,所以在最终输出的时候,realtime replica并不是bases中定义的2,而是overlays中的1。

整个过程如下

加载bases,再从overlays中重写

参考:
https://www.youtube.com/watch?v=btqZkVQIdd8

上一篇下一篇

猜你喜欢

热点阅读