美文网首页
【k8s学习】kustomize学习

【k8s学习】kustomize学习

作者: 伊丽莎白2015 | 来源:发表于2022-06-26 18:46 被阅读0次

    【前置文章】

    【环境】

    • MacOS
    • minikube version: v1.25.2

    1. kustomize是什么?

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

    • 它可以单独安装,比如MacOS系统中可以使用brew install kustomize来安装。
    • 在kubectl 1.14后也内置支持了kustomize。

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

    2. 示例

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

    image.png
    2.1 可以看到在bases目录下面,有诸多yaml文件:
    • namespace.yaml:定义了namespace=myns
    • realtime.yaml:定义了image为gbaeke/flux-rt的Deployment资源,其中有一些env动态传入,如:$(REDISSERVICE).$(REDISNAMESPACE):6379,还定义了类型为LoadBalancer的Service。
    • redis.yaml:定义了image为redis:4-32bit的Deployment资源,还定义了一个默认type的Service(即ClusterIP类型)。
    • kustomization.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

    相关文章

      网友评论

          本文标题:【k8s学习】kustomize学习

          本文链接:https://www.haomeiwen.com/subject/iajgvrtx.html