53

学习 Kubernetes Operator(四):Controller Runtime

 4 years ago
source link: http://muziyuchen.com/operator-4/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

kubernetes-sigs/controller-runtimekubernetes-sigs/kubebuilder 子项目,构建在 kubernetes/client-go 基础之上,实现 Controller。

准备

添加 Controller Runtime 依赖:

go get sigs.k8s.io/controller-runtime

代码

Controller Manager

import (  
    "context"
    "os"

    appsv1 "k8s.io/api/apps/v1"
    corev1 "k8s.io/api/core/v1"
    "sigs.k8s.io/controller-runtime/pkg/builder"
    "sigs.k8s.io/controller-runtime/pkg/client"
    "sigs.k8s.io/controller-runtime/pkg/client/config"
    "sigs.k8s.io/controller-runtime/pkg/manager"
    "sigs.k8s.io/controller-runtime/pkg/manager/signals"
    "sigs.k8s.io/controller-runtime/pkg/reconcile"
)

func main() {  
    // ①
    mgr, err := manager.New(config.GetConfigOrDie(), manager.Options{})
    if err != nil {
        os.Exit(1)
    }

    // ②
    err = builder.
        ControllerManagedBy(mgr).
        For(&appsv1.ReplicaSet{}).
        Owns(&corev1.Pod{}).
        Complete(&DemoReconcile{})
    if err != nil {
        os.Exit(1)
    }

    // ③
    if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
        os.Exit(1)
    }
}

①③ 创建 Manager 并启动,Manager 内部维护了 Client、Cache 和 Schema 等;

② 使用 Builder 模式创建 Controller,并指定 watch 的资源和对应的 Reconcile。

Reconcile

type DemoReconcile struct {  
    client.Client // ①
}

// ②
func (r *DemoReconcile) Reconcile(req reconcile.Request) (reconcile.Result, error) {  
    rs := &appsv1.ReplicaSet{}
    if err := r.Get(context.TODO(), req.NamespacedName, rs); err != nil {
        return reconcile.Result{}, err
    }

    // TODO 逻辑代码

    return reconcile.Result{}, nil
}

// ③
func (r *DemoReconcile) InjectClient(c client.Client) error {  
    r.Client = c
    return nil
}

①③ 定义 Client 字段,并自动注入;

② Reconcile 方法,内部实现具体的回调逻辑。

参考


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK