项目配置
概述
项目配置表示一个 KubeBuilder 项目的配置。所有通过 CLI (KubeBuilder 版本 3.0 及更高版本)搭建的项目将在项目根目录生成 PROJECT
文件。因此,它将存储生成项目和 API 所使用的所有插件和输入数据,以便更好地支持插件在搭建时做出有用的决策。
Example
以下是一个项目配置文件的示例,这是使用部署镜像插件生成的包含两个API的项目的结果。
# 工具生成的代码。请勿编辑。
# 此文件用于跟踪用于搭建您项目的信息
# 并允许插件正常工作。
# 更多信息: https://book.kubebuilder.io/reference/project-config.html
domain: testproject.org
layout:
- go.kubebuilder.io/v4
plugins:
部署图像.go.kubebuilder.io/v1-alpha:
resources:
- domain: testproject.org
group: example.com
kind: Memcached
选项:
容器命令: memcached,--memory-limit=64,-o,modern,-v
容器端口: "11211"
image: memcached:1.4.36-alpine
以用户身份运行: "1001"
version: v1alpha1
- domain: testproject.org
group: example.com
kind: Busybox
选项:
image: busybox:1.28
version: v1alpha1
projectName: 项目-v4-带部署镜像
repo: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: testproject.org
group: example.com
kind: Memcached
path: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image/api/v1alpha1
version: v1alpha1
webhooks:
validation: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: testproject.org
group: example.com
kind: Busybox
path: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image/api/v1alpha1
version: v1alpha1
version: "3"
为什么我们需要存储插件和使用的数据?
以下是一些追踪使用输入的动机示例:
- 检查一个插件是否可以在现有插件的基础上创建(即)插件兼容性,同时将多个插件连接在一起。
- 可以进行或不能进行的操作,例如验证当前配置是否允许为不同组搭建API的布局。
- 验证在CLI操作中可以或不能使用哪些数据,例如确保WebHooks只能为已存在的API创建。
请注意,KubeBuilder 不仅是一个 CLI 工具,还可以用作库,让用户创建他们的插件/工具,提供帮助程序和定制,以支持他们现有的项目 - 其中一个例子是 Operator-SDK。SDK 利用 KubeBuilder 创建插件,允许用户使用其他语言,并为用户提供帮助,以便他们将项目与例如 Operator Framework 解决方案/OLM 集成。您可以查看 插件文档 以了解更多关于创建自定义插件的信息。
此外,PROJECT 文件的另一个目的,是帮助我们创建一个功能,使用户能够通过提供自动重新搭建项目的辅助工具,轻松升级他们的项目。PROJECT 文件中包含了有关 API、其配置和版本的所有必要元数据。例如,它可以用于自动化在插件版本之间迁移时重新搭建的过程。 (更多信息)。
版本控制
项目配置是根据其布局进行版本控制的。欲了解更多信息,请参见 版本控制。
布局定义
PROJECT
版本 3
的布局如下:
domain: testproject.org
layout:
- go.kubebuilder.io/v4
plugins:
部署图像.go.kubebuilder.io/v1-alpha:
resources:
- domain: testproject.org
group: example.com
kind: Memcached
选项:
容器命令: memcached,--memory-limit=64,-o,modern,-v
容器端口: "11211"
image: memcached:memcached:1.6.26-alpine3.19
以用户身份运行: "1001"
version: v1alpha1
- domain: testproject.org
group: example.com
kind: Busybox
选项:
image: busybox:1.36.1
version: v1alpha1
projectName: 项目-v4-带部署镜像
repo: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: testproject.org
group: example.com
kind: Memcached
path: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image/api/v1alpha1
version: v1alpha1
webhooks:
validation: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: testproject.org
group: example.com
kind: Busybox
path: sigs.k8s.io/kubebuilder/testdata/project-v4-with-deploy-image/api/v1alpha1
version: v1alpha1
version: "3"
现在让我们检查一下它的布局字段定义:
领域 | 描述 |
---|---|
布局 | 定义全局插件,例如,一个项目 init 使用 --plugins="go/v4,deploy-image/v1-alpha" 意味着所使用的任何子命令将始终按顺序调用这两个插件的实现。 |
域 | 存储项目的域名。用户可以在使用 init 子命令和 domain 标志生成项目时提供此信息。 |
插件 | 定义用于自定义脚手架的插件,例如通过命令 kubebuilder create api [options] --plugins=deploy-image/v1-alpha 使用可选的 deploy-image/v1-alpha 插件仅为特定 API 创建脚手架。 |
项目名称 | 项目名称。这将用于构建管理器数据。默认情况下,它是项目目录的名称,但用户可以通过 init 子命令中的 --project-name 标志提供该名称。 |
代码库 | 该项目的代码库是Golang模块,例如 github.com/example/myproject-operator 。 |
资源 | 项目中所有搭建的资源数组。 |
resources.api | 通过子命令 create api 在项目中搭建的 API。 |
resources.api.crdVersion | 用于为 CRD 资源搭建的 Kubernetes API 版本 (apiVersion )。 |
resources.api.namespaced | API RBAC 权限可以是命名空间级别或集群级别。 |
resources.controller | 指示是否为 API 构建了控制器。 |
resources.domain | 在项目初始化时通过 --domain 选项提供的资源域名,或者在为 外部类型 构建控制器时通过 --external-api-domain 选项提供的域名。 |
resources.group | 当使用子命令 create api 时,通过 --group 标志提供的资源的 GKV 组。 |
resources.version | 当使用子命令 create api 时,通过 --version 标志提供的资源的 GKV 版本。 |
资源.种类 | 存储 GKV 资源类型,该类型通过执行子命令 create api 时提供的 --kind 标志来指定。 |
resources.path | API资源的导入路径。它将是<repo>/api/<kind> ,除非添加到项目中的API是外部API或核心类型的API。对于核心类型的场景,使用的路径在这里进行了映射。或者,可以使用通过标志--external-api-path 提供的路径。 |
resources.core | 当使用的组来自Kubernetes API并且项目中未定义API资源时,它为“真“。 |
resources.external | 当使用标志 --external-api-path 生成 外部类型 的脚手架时,它为 true 。 |
resources.webhooks | 当使用子命令 create webhook 时,请存储网络钩子数据。 |
resources.webhooks.spoke | 存储将作为 Spoke 的 API 版本以及用于转换 webhook 的指定 Hub 版本。 |
resources.webhooks.webhookVersion | 用于搭建 webhook 资源的 Kubernetes API 版本(apiVersion )。 |
resources.webhooks.conversion | 当 webhook 是使用 --conversion 标志搭建时,它为 true ,这意味着这是一个转换 webhook。 |
resources.webhooks.defaulting | 当 webhook 使用 --defaulting 标志创建时,它是 true ,这意味着这是一个默认值 webhook。 |
resources.webhooks.validation | 当使用 --programmatic-validation 标志搭建的 webhook 时,它是 true ,这意味着它是一个验证 webhook。 |