简要说明:其他文件的内容是什么?

如果你浏览了 api/v1/ 目录中的其他文件,你可能会注意到除了 cronjob_types.go 外还有两个额外的文件:groupversion_info.gozz_generated.deepcopy.go

这两个文件都不需要进行编辑(前者保持不变,后者是自动生成的),但了解它们的内容是很有用的。

groupversion_info.go

groupversion_info.go 包含有关组版本的常见元数据:

project/api/v1/groupversion_info.go
Apache License

版权所有 2024 年 Kubernetes 作者。

根据 Apache 许可,版本 2.0 进行许可(“许可”); 除非遵守许可,否则您不得使用此文件。 您可以在以下网址获取许可的副本:

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,根据许可分发的软件是基于“按原样“的基础分发的, 不附带任何明示或暗示的担保或条件。 请参阅许可以获取特定语言下的权限和限制。

首先,我们有一些 包级别 的标记,表示此包中有 Kubernetes 对象,并且此包表示组 batch.tutorial.kubebuilder.ioobject 生成器利用前者,而 CRD 生成器则利用后者从此包中生成正确的 CRD 元数据。

// Package v1 包含了 batch v1 API 组的 API Schema 定义
// +kubebuilder:object:generate=true
// +groupName=batch.tutorial.kubebuilder.io
package v1

import (
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/scheme"
)

然后,我们有一些通常有用的变量,帮助我们设置 Scheme。 由于我们需要在我们的控制器中使用此包中的所有类型,有一个方便的方法将所有类型添加到某个 Scheme 中是很有帮助的(也是惯例)。SchemeBuilder 为我们简化了这一过程。

var (
	// GroupVersion 是用于注册这些对象的组版本
	GroupVersion = schema.GroupVersion{Group: "batch.tutorial.kubebuilder.io", Version: "v1"}

	// SchemeBuilder 用于将 go 类型添加到 GroupVersionKind scheme
	SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}

	// AddToScheme 将此组版本中的类型添加到给定的 scheme 中。
	AddToScheme = SchemeBuilder.AddToScheme
)

zz_generated.deepcopy.go

zz_generated.deepcopy.go 包含了上述 runtime.Object 接口的自动生成实现,该接口标记了所有我们的根类型表示的 Kinds。

runtime.Object 接口的核心是一个深度复制方法 DeepCopyObject

controller-tools 中的 object 生成器还为每个根类型及其所有子类型生成了另外两个方便的方法:DeepCopyDeepCopyInto