使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

使用 Kustomize 配置 Kubernetes

本文档旨在帮助您开始使用 Kustomize,了解其预期用例,并查找将其与其他 Google Cloud 工具搭配使用所需的资源。

Kustomize 是一种 Kubernetes 配置转换工具,可让您自定义未模板化的 YAML 文件,同时让原始文件保持不变。Kustomize 还可以根据其他表示法生成 ConfigMap 和 Secret 等资源。Kustomize 专为 Kubernetes API 构建,因此它可以理解和修改 Kubernetes 样式的对象。

Kustomize 简介

Kustomize 由 Google 和 Kubernetes 社区构建,符合 Kubernetes 使用 Kubernetes 对象定义配置文件和以声明方式管理这些配置的原则。Kustomize 配置对象称为 Kustomization,用于描述如何生成或转换其他 Kubernetes 对象。Kustomization 在名为 kustomization.yaml 的文件中以声明方式定义,此文件可由 Kustomize 本身生成和修改。

在 kustomize 中,您可以定义常见、可重复使用的 kustomization(称为基础)并使用多个其他 kustomization(称为叠加层)对其进行修补,这些 kustomization 可以选择性地覆盖基础中定义的设置以生成变体。然后,Kustomize 根据 kustomization 基础和叠加层中定义的配置转换和生成资源,此过程称为融合或渲染。接下来,这些渲染资源会写入标准输出或文件,并保持原始 YAML 文件不变,以便许多不同的叠加层重复使用基础。

映像

这种无模板方法在 Kustomization 库的易用性和可重用性方面非常强大。使用它您能够以几乎任何想要的方式自定义 Kubernetes 配置,而无需为每个单独的用例提供大量值。

Kustomize 的优势

使用 Kustomize 管理 Kubernetes 配置的优势包括:

  • Kustomize 是无模板的。 使用模板和值文件时,YAML 文件中的几乎所有规范都可以成为需要值的参数,并且值文件可能会非常大。Kustomize 处理配置数据,而不是将配置模板化为文本或将配置表示为代码。原始 YAML 可读且可重复使用,无论 Kustomize 是否呈现原始 YAML。Kustomize 模型不同;无需对所有内容进行参数化,因此可以更轻松地重复使用常用配置。

  • Kustomize 可以在 Kubernetes 命令行界面中以原生方式运行。从 1.14 版开始,Kustomize 内置于 kubectl。因此,只要您使用 kubectl,就无需将 Kustomize 作为单独的依赖项来进行安装或管理。

  • Kustomize 完全是声明性的。作为 Kubernetes 原生工具,Kustomize 与 Kubernetes 的声明式配置方法保持一致。您无需以命令方式逐步描述该工具应如何自定义资源,只需声明您想要的内容即可,Kustomize 会提供这些内容。

  • Kustomize 允许您重复使用同一基础配置来管理多项不同的配置。您可以在多个不同环境(例如,开发、预演、生产)中使用一个基础文件,并且使用最小的唯一叠加层为每个环境自定义基础。

  • Kustomize 易于使用。您可以遵循浅显的学习曲线,从非常简单的配置开始,然后逐步构建更复杂的功能(每次构建一层)。

  • Kustomize 可扩展且可自定义。 Kustomize 支持插件框架,可让您以容器化和可执行 Kubernetes 资源模型 (KRM) 函数的方式编写自己的生成器和转换器。如需详细了解如何创建您自己的插件,请参阅官方 Kustomize 插件指南

本地安装

要在本地环境中安装 Kustomize,请运行以下命令:

gcloud components install kustomize

Google Cloud 中的 Kustomize 支持

Kustomize 预安装在 Cloud Shell 中,并且受 Skaffold 支持。系统还支持其作为 Cloud Build 的构建器

如果代码库中包含 kustomization 文件,Config Sync 会自动使用 Kustomize 呈现代码库中的资源。如需详细了解此功能,请参阅将代码库与 Kustomize 配置和 Helm 图表结合使用

了解 Kustomize

基础和叠加层

Kustomize 的配置转换方法使用 Kustomization 层,因此可以跨多个 Kustomization 配置重复使用相同的基础配置文件。它通过基础和叠加层的概念来实现这一点。

  • 基础是包含名为 kustomization.yaml 的文件的目录,可以枚举一组资源以及将应用于它们的一些自定义配置。应在 kustomization 文件的 resources 字段中声明基础。
  • 叠加层是一个目录,该目录将另一个 kustomization 目录引用为它的基础或者它的基础之一。

您可以将基础视为流水线中的初步步骤,而无需了解引用它的叠加层。基础处理完后,会将其资源作为输入发送到叠加层,以根据叠加层的规范进行转换。

以下是 kustomization 基础的示例:

# base/kustomization.yaml
resources:
- deployment.yaml
namePrefix: bar-
#base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx

此基础可以被多个 kustomization 叠加层重复使用。以下是可以引用此基础的叠加层示例:

# overlay/kustomization.yaml
resources:
- ../base
- configmap.yaml
namePrefix: foo-
#overlay/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm
data:
  red: blue

运行 kustomize build overlay 命令会生成以下输出:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-bar-nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-cm
data:
  red: blue

Deployment 从基础 kustomization 接收名称前缀 bar-,然后从叠加层 kustomization 接收另一个名称前缀 foo-。ConfigMap 仅接收名称前缀 foo-,因为它是在叠加层中声明的,因此仅由叠加层处理。

生成 Secret 和 ConfigMap

您可以使用 kustomization 文件中的 secretGeneratorconfigMapGenerator 字段从文件生成 Secret 和 ConfigMap。例如:

# kustomization.yaml
configMapGenerator:
- name: my-app
  files:
  -.properties

生成以下 YAML 输出:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-g82klmn92h
data:
  .properties: |-
      red=blue

修改 kustomization 文件

Kustomize 提供多条命令式命令,用于帮助您管理 Kustomization 文件。

  • 如需将当前目录中的所有 YAML 文件添加到 Kustomization 的 resources 字段中,请运行以下命令:

    kustomize edit add resource *.yaml
    
  • 如需查看 kustomize 修改帮助页面以及其提供的所有子命令,请运行以下命令:

    kustomize edit -h
    
  • 如需获取子命令的特定帮助,请将子命令作为参数添加。例如:

    kustomize edit add -h
    

后续步骤

官方文档

如需详细了解 kustomization.yaml 文件中支持的字段,您可以访问官方 kustomize 文档,其中提供了您可以使用的各种字段的说明和示例。

不支持的特性

如需查看 Kustomize 特意不支持的功能列表,您可以了解 Kustomize 的回避功能