Kubernetes&&YAML管理&&Kustomize

前言

Kustomize 是 Kubernetes 的开源配置管理工具。

它允许您以声明方式为多个环境定义和管理 Kubernetes 对象,例如部署、Daemonsets、服务、configMap 等,而无需修改原始 YAML 文件。简而言之,您拥有 YAML 的单一事实来源,并且可以根据环境要求在基本 YAML 之上修补所需的配置。

参考
Kustomize 教程:初学者指南
Kubernetes 中模板化的正确方式 - Kustomize
Kubernetes包管理神器Kustomize与Helm对比

关键字

在这里插入图片描述

base manifest + overlay manifest = customized manifest file

kustomization.yaml
kustomization.yaml 文件是 Kustomize 工具使用的主文件。
当执行 Kustomize 命令时,它会查找名为 kustomization.yaml 的文件。此文件包含应由 Kustomize 管理的所有 Kubernetes 资源(YAML 文件)的列表。它还包含我们想要应用生成自定义清单的所有自定义内容。以下是一个示例 kustomization.yaml 文件。
在这里插入图片描述
Base and Overlays
Base 文件夹代表在所有环境中都相同的配置。我们将所有 Kubernetes 清单放在 Base 中。它有一个我们可以覆盖的默认值。
Overlays 文件夹允许我们根据每个环境自定义行为。我们可以为每个环境创建一个叠加层。我们指定要覆盖和更改的所有属性和参数。
基本上,Kustomize 使用 patch 指令在现有的 Base 标准 k8s 配置文件上引入特定于环境的更改而不会干扰它们。

Transformers
Transformers 是将一种配置转换为另一种配置的东西。
常见的 transformers 有:

  • commonLabel – 为所有 Kubernetes 资源添加标签
  • namePrefix – 它为所有资源添加一个公共前缀
  • nameSuffix – 为所有资源添加通用后缀
  • Namespace – 为所有资源添加一个公共命名空间
  • commonAnnotations – 为所有资源添加注释

在这里插入图片描述
Patches (Overlays)
Patches (Overlays) 是另一种修改 Kubernetes 配置的方法,它提供了更具体的配置部分以进行更改。有以下参数。

  • Operation Type: 添加或删除或替换
  • Target: 我们要修改的资源名称
  • Value: 将添加或替换的值名称。对于删除操作类型,不会有任何值。

在这里插入图片描述
Patch From File

特点

  • 它充当配置工具,具有与 Kubernetes YAML 相同的声明式配置。
  • 它可以修改资源而不改变原始文件。
  • 它可以为所有资源添加通用标签和注释。
  • 它可以根据部署的环境修改容器镜像。
  • Kustomize 支持 secretGenerator 和 configMapGenerator,它使用环境文件或键值对来创建 secret 和 configMap。

使用 Kustomize 部署应用程序

使用 Kustomize 的目录结构
在这里插入图片描述
创建相应的文件夹和文件

mkdir -p kustomize/base && 
    touch kustomize/base/deployment.yaml \
         kustomize/base/service.yaml \
         kustomize/base/kustomization.yaml && 
    mkdir -p kustomize/overlays/dev && 
    touch kustomize/overlays/dev/deployment-dev.yaml \
         kustomize/overlays/dev/service-dev.yaml \
         kustomize/overlays/dev/kustomization.yaml && 
    mkdir -p kustomize/overlays/prod && 
    touch kustomize/overlays/prod/deployment-prod.yaml \
         kustomize/overlays/prod/service-prod.yaml \
         kustomize/overlays/prod/kustomization.yaml

Base Folder 基本文件夹
基本文件夹包含deployment、service、和 kustomization files。在此基本文件夹中,我们添加部署和服务 YAML 以及所有环境通用的所有配置。

# base/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

# base/service.yaml

apiVersion: v1
  kind: Service
  metadata:
    name: web-service
  spec:
    selector:
      app: web
    ports:
    - name: http
      port: 80
# base/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
  
resources:
- deployment.yaml
- service.yaml

Dev Overlay Folder
让我们定义 Dev overlays 文件。我们只想在 deployment.yaml 中进行更改,因此我们只定义它。

# deployment-dev.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3 # Update the replica count to 3
  template:
    spec:
      containers:
      - name: nginx
        resources:
          limits:
            cpu: "200" # Lower CPU limit to 200m (0.2 CPU cores)
            memory: "256Mi" # Lower memory limit to 256 MiB
          requests:
            cpu: "100" # Lower CPU request to 100m (0.1 CPU cores)
            memory: "128Mi"

在开发部署中,我们只想将副本从 1 个增加到 2 个。您可以看到我们只定义了更改,而不定义其他内容。Kustomize 将检查基础部署文件并进行比较,并相应地修补更改。这就是 Kustomize 的魅力所在。

# 在开发中,我们需要带有节点端口的服务。因此,我们将创建一个类型为 Nodeport 的覆盖层。
# service-dev.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: NodePort

kustomization.yaml
正如我们在博客前面讨论的那样,我们正在使用单独文件方法进行战略合并修补。您还可以注意到我们在这里也定义了资源,这就是为什么 Kustomize 需要知道基本文件的路径。

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

resources:
- ../../base

patches:
- path: deployment-dev.yaml
- path: service-dev.yaml

使用以下命令查看补丁并检查一切是否正确。

kustomize build overlays/dev

将输出以下Kubernetes清单。
在这里插入图片描述
使用以下命令部署自定义清单。

kustomize build overlays/dev | kubectl apply -f -
kubectl apply -k overlays/dev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值