kubebuilder实践

该文章介绍了如何下载并安装Kubebuilder,然后使用它来初始化一个KubernetesOperator项目,创建自定义资源定义(CRD)和控制器。通过编写Reconcile函数,当CRD资源发生变化时,控制器会进行相应的处理,例如更新资源的特定字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载 kubebuilder

curl -L https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) -o kubebuilder
mv kubebuilder /usr/local/bin/

初始化 kubebuilder 项目

# domain 随意,代表 k8s 的集群
kubebuilder init --domain my.domain

创建 operator api

kubebuilder create api --group app --version v1 --kind MyCRD
# 然后一直按 yes,创建出 controller

在集群中创建出 CRD 和 CR

自定义 CRD 资源

type MyCRDSpec struct {
	// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
	// Important: Run "make" to regenerate code after modifying this file

	// Foo is an example field of Guestbook. Edit guestbook_types.go to remove/update
	// 想写什么就写什么
	Username string `json:"username"`
	Password string `json:"password"`
	Image    string `json:"image"`
}

生成 CRD yaml 和填写 CR

生成 CRD :make install
填写 CR:

apiVersion: app.my.domain/v1
kind: MyCRD
metadata:
  labels:
    app.kubernetes.io/name: mycrd
    app.kubernetes.io/instance: mycrd-sample
    app.kubernetes.io/part-of: kubebuilder-test
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: kubebuilder-test
  name: mycrd-sample
spec:
  username: ar
  password: ar
  image: hub.byted.org

创建 CRD 和 CR 到集群中

kubectl apply -f config/crd/bases/app.my.domain_mycrds.yaml
kubectl apply -f config/samples/app_v1_mycrd.yaml

创建 controller 监听 CRD

func (r *MyCRDReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	// 资源增删改之后都会触发 Reconcile,kubebuilder
	_ = log.FromContext(ctx)

	// TODO(user): your logic here
	fmt.Println("start reconcile")
	cr := appv1.MyCRD{}
	err := r.Get(ctx, req.NamespacedName, &cr)
	if err != nil {
		if errors.IsNotFound(err) {
			return ctrl.Result{}, nil
		}
		return ctrl.Result{}, err
	}
	
	// 举例,如果 name 为 ar 就变成 qyrzr
	if cr.Spec.Username == "ar" {
		fmt.Println("use nickname")
		cr.Spec.Username = "qyrzr"
		err = r.Update(ctx, &cr)
		if err != nil {
			fmt.Println("failed to change username")
			return ctrl.Result{}, err
		}
	}

	return ctrl.Result{}, nil
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值