git clone https://github.com/kubernetes/code-generator
- 第一个参数:使用那些生成器,就是 *.gen,用逗号分割,all表示使用全部
- 第二个参数:client(client-go中informer, lister等)生成的文件存放到哪里
- 第三个参数:api(api结构,k8s.io/api/) 生成的文件存放到哪里,可以和定义的文件为一个目录
- 第四个参数:定义group:version
- -output-base:输出包存放的根目录
- -go-header-file:生成文件的头注释信息,默认 code-generator 去 $GOPATH/src/k8s.io/code-generator 目录下找 boilerplate 文件,可以使用该参数设置
code-generator/generate-groups.sh all \
github.com/shenyisyn/dbcore/pkg/client \
github.com/shenyisyn/dbcore/pkg/apis dbconfig:v1 \
--output-base ./ \
--go-header-file code-generator/hack/boilerplate.go.txt
参考: rook/rook#5083
- CRD 说明: https://kubernetes.io/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation
- OpenAPI 规范文档: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md
additionalPrinterColumns:
- name: replicas
type: string
jsonPath: .spec.status.replicas
- name: Age
type: date
jsonPath: .metadata.creationTimestamp
subresources:
status: {}
scale:
# specReplicasPath 定义定制资源中对应 scale.spec.replicas 的 JSON 路径
specReplicasPath: .spec.replicas
# statusReplicasPath 定义定制资源中对应 scale.status.replicas 的 JSON 路径
statusReplicasPath: .status.replicas
扩缩容
kubectl scale --replicas=3 dc/mydbconfig
设置 OwnerReferences 属性。删除我们自定义的 DC 对象时,会同时删除关联的 Deployment 对象。
this.deploy.OwnerReferences=append(this.deploy.OwnerReferences,
v1.OwnerReference{
APIVersion: this.config.APIVersion,
Kind:this.config.Kind,
Name: this.config.Name,
UID:this.config.UID,
})
https://kubernetes.io/zh-cn/docs/concepts/architecture/garbage-collection/
监听 Deployment 对象的 OnDelete 事件,当 Deployment 被删除时,重新放入 Reconcile。
func (r *DbConfigController) OnDelete(event event.DeleteEvent, limitingInterface workqueue.RateLimitingInterface) {
for _, ref := range event.Object.GetOwnerReferences() {
if ref.Kind == "DbConfig" && ref.APIVersion == "api.jtthink.com/v1" {
limitingInterface.Add(
reconcile.Request{ // 重新把对象放入 reconcile
types.NamespacedName{
Name: ref.Name, Namespace: event.Object.GetNamespace(),
},
})
}
}
}