内容简介:添加 Controller Runtime 依赖:①③ 创建 Manager 并启动,Manager 内部维护了 Client、Cache 和 Schema 等;
kubernetes-sigs/controller-runtime 是 kubernetes-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 方法,内部实现具体的回调逻辑。
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 一文读懂监督学习、无监督学习、半监督学习、强化学习这四种深度学习方式
- 学习:人工智能-机器学习-深度学习概念的区别
- 统计学习,机器学习与深度学习概念的关联与区别
- 混合学习环境下基于学习行为数据的学习预警系统设计与实现
- 学习如何学习
- 深度学习的学习历程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。