简要说明:其他文件的内容是什么?
如果你浏览了 api/v1/
目录中的其他文件,你可能会注意到除了 cronjob_types.go
外还有两个额外的文件:groupversion_info.go
和 zz_generated.deepcopy.go
。
这两个文件都不需要进行编辑(前者保持不变,后者是自动生成的),但了解它们的内容是很有用的。
groupversion_info.go
groupversion_info.go
包含有关组版本的常见元数据:
Apache License
版权所有 2024 年 Kubernetes 作者。
根据 Apache 许可,版本 2.0 进行许可(“许可”); 除非遵守许可,否则您不得使用此文件。 您可以在以下网址获取许可的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,根据许可分发的软件是基于“按原样“的基础分发的, 不附带任何明示或暗示的担保或条件。 请参阅许可以获取特定语言下的权限和限制。
首先,我们有一些 包级别 的标记,表示此包中有 Kubernetes 对象,并且此包表示组 batch.tutorial.kubebuilder.io
。
object
生成器利用前者,而 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
生成器还为每个根类型及其所有子类型生成了另外两个方便的方法:DeepCopy
和 DeepCopyInto
。