📦 Kubernetes Operator Scaffolder
v1.0.0创建生产就绪的Kubernetes操作员 — 自动生成CRDs、控制器、RBAC、webhooks和Dockerfiles,遵循Go或Python操作员的最佳实践。
运行时依赖
安装命令
点击复制技能文档
Kubernetes Operator Scaffolder
从高级资源描述生成一个完整的、生产就绪的Kubernetes操作员项目。生成自定义资源定义(CRDs)、调和控制器、RBAC清单、准入Webhook、Dockerfiles和CI脚手架——遵循Operator Framework和controller-runtime最佳实践,因此您可以跳过数周的样板代码。
使用时: "创建Kubernetes操作员"、 "创建CRD和控制器"、 "生成操作员样板代码"、 "为X构建k8s操作员",或当您需要使用自定义资源扩展Kubernetes API时。
前提条件
在创建脚手架之前,代理检查:
# Go操作员(kubebuilder路径)
go版本
# Go 1.22+
kubebuilder版本
# kubebuilder 4.x
controller-gen --版本
kustomize版本
# Python操作员(kopf路径)
python3 --版本
# 3.11+
pip显示kopf
# kopf框架
pip显示kubernetes
# k8s客户端
如果工具缺失,代理在继续之前提供安装命令。
使用方法
提供以下输入:
资源名称 — 操作员管理的名词(例如,数据库、缓存集群、MLPipeline)
API组 — Kubernetes API组(例如,infra.example.com)
API版本 — 通常为新操作员的v1alpha1
语言 — go(kubebuilder)或python(kopf)
规格字段 — 用户在自定义资源中设置的字段(名称、类型、默认值、验证)
调和行为 — 控制器在资源创建、更新或删除时应该执行的操作
示例调用:
为db.example.com组中的PostgresCluster资源创建一个Go操作员。规格字段:副本(int,默认3)、版本(字符串,默认"16")、存储大小(字符串,默认"10Gi")。创建时,应提供一个StatefulSet和PVC。删除时,清理PVC。
工作原理
步骤1:项目结构生成
创建完整的目录树:
operator-name/
├── api/
│ └── v1alpha1/
│ ├── types.go # CRD Go类型与标记
│ ├── groupversion_info.go # 方案注册
│ └── zz_generated.deepcopy.go
├── cmd/
│ └── main.go # 入口点与管理器设置
├── internal/
│ └── controller/
│ ├── reconciler.go # 主要调和循环
│ ├── reconciler_test.go # 基于envtest的测试
│ └── finalizer.go # 清理逻辑
├── config/
│ ├── crd/
│ │ ├── kustomization.yaml
│ │ └── bases/
│ │ └── resource_crd.yaml # 生成的CRD清单
│ ├── rbac/
│ │ ├── role.yaml # ClusterRole
│ │ ├── role_binding.yaml # ClusterRoleBinding
│ │ ├── service_account.yaml
│ │ └── kustomization.yaml
│ ├── manager/
│ │ ├── manager.yaml # 部署
│ │ └── kustomization.yaml
│ ├── webhook/ # 如果请求Webhook
│ │ ├── manifests.yaml
│ │ └── kustomization.yaml
│ └── default/
│ └── kustomization.yaml # 将所有内容联系在一起
├── hack/
│ └── boilerplate.go.txt
├── Dockerfile
├── Makefile
├── go.mod
├── go.sum
├── PROJECT # kubebuilder项目元数据
└── README.md
对于Python(kopf)操作员,结构与此类似,具有src/handlers.py(kopf装饰器)、src/resources.py(资源生成器)、deploy/(CRD + RBAC + 部署 + kustomize)、tests/、Dockerfile、Makefile和pyproject.toml。
步骤2:CRD定义
生成自定义资源定义,具有:
OpenAPI v3模式验证 — 每个规格字段都具有适当的类型、默认值、最小/最大约束、枚举值和描述
状态子资源 — 具有遵循metav1.Condition标准的条件(类型、状态、原因、消息、最后转换时间)
打印列 — 因此kubectl get <资源>显示有用的信息
简称 — 方便(例如,pg用于PostgresCluster)
类别 — 使用kubectl get all进行分组
示例CRD类型定义(Go):
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Replicas",type=integer,JSONPath=.spec.replicas
// +kubebuilder:printcolumn:name="Version",type=string,JSONPath=.spec.version
// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=.status.phase
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=.metadata.creationTimestamp
// +kubebuilder:resource:shortName=pg;pgc
type PostgresCluster struct {
metav1.TypeMeta json:",inline"
metav1.ObjectMeta json:"metadata,omitempty"
Spec PostgresClusterSpec json:"spec,omitempty"
Status PostgresClusterStatus json:"status,omitempty"
}
type PostgresClusterSpec struct {
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=10
// +kubebuilder:default=3
Replicas int32 json:"replicas,omitempty"
// +kubebuilder:validation:Pattern=^\d+$
// +kubebuilder:default="16"
Version string json:"version,omitempty"
// +kubebuilder:default="10Gi"
StorageSize string json:"stora