Kubebuilder 与 CRD (三):更新状态
基于 Kubebuilder 制作 K8S CRD
·
example2
本系列例子代码均在: https://github.com/fananchong/kubebuilder_sample , 欢迎 Star 收藏
example2 演示以下内容:
- 如何定义、使用 Status 结构
生成 example2 模板
mkdir -p example2
pushd example2
go mod init example2
kubebuilder init --domain=fananchong.com
kubebuilder create api --group demo --version v1 --kind Example2 --resource true --controller true --namespaced true
popd
填写 api/v1/example1_types.go
目标,能更新状态值
对应 api/v1/example2_types.go 文件修改:
type Example2Status struct {
// +optional
CustomStatus1 string `json:"customStatus1,omitempty"`
// +optional
CustomStatus2 *int32 `json:"customStatus2,omitempty"`
}
然后执行:
make manifests
会自动生成对应的配置到 config 目录下 config/crd/bases/demo.fananchong.com_example2s.yaml
填写 controllers/example1_controller.go
func (r *Example2Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
_ = log.FromContext(ctx)
example := &v1.Example2{}
err := r.Get(ctx, req.NamespacedName, example)
if err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
example.Status.CustomStatus1 = "xxxxxxxxxx"
if example.Status.CustomStatus2 == nil {
example.Status.CustomStatus2 = new(int32)
}
*(example.Status.CustomStatus2) = 1111111
if err := r.Status().Update(ctx, example); err != nil {
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}
代码分析:
- r.Status().Update(ctx, example) 更新 example2 资源的状态
安装 CRD Example2
make install
kubectl api-resources -o wide | grep example2
kubectl get crd | grep example2
调试验证
-
执行 example2 ,能实时查看 CRD 的 log
make build ./bin/manager --metrics-bind-address=":7070" --health-probe-bind-address=":7071"
-
使用这个 CRD
kubectl apply -f config/samples/demo_v1_example2.yaml kubectl get example2s -o yaml kubectl describe -f config/samples/demo_v1_example2.yaml
集群部署
暂略,系列结束,再实践下
以上
更多推荐
已为社区贡献9条内容
所有评论(0)