-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
132 lines (112 loc) · 4.7 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package main
import (
"flag"
daemonjobv1alpha1 "github.com/myoperator/jobflowoperator/pkg/apis/daemonjob/v1alpha1"
jobtemplatev1alpha1 "github.com/myoperator/jobflowoperator/pkg/apis/jobTemplate/v1alpha1"
jobflowv1alpha1 "github.com/myoperator/jobflowoperator/pkg/apis/jobflow/v1alpha1"
"github.com/myoperator/jobflowoperator/pkg/controller"
"github.com/myoperator/jobflowoperator/pkg/k8sconfig"
batchv1 "k8s.io/api/batch/v1"
_ "k8s.io/code-generator"
"k8s.io/klog/v2"
"os"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/handler"
logf "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
"sigs.k8s.io/controller-runtime/pkg/source"
)
/*
[root@VM-0-16-centos myoperator]# cd
[root@VM-0-16-centos ~]# cp -r jobflowoperator/ /root/go/src/github.com/myoperator/jobflowoperator/
[root@VM-0-16-centos ~]# cd /root/go/src/github.com/myoperator
[root@VM-0-16-centos myoperator]# cd jobflowoperator/
[root@VM-0-16-centos jobflowoperator]# ls
Dockerfile go.mod go.sum main.go pkg resources yaml
[root@VM-0-16-centos jobflowoperator]# $GOPATH/src/k8s.io/code-generator/generate-groups.sh all github.com/myoperator/jobflowoperator/pkg/client github.com/myoperator/jobflowoperator/pkg/apis jobflow:v1alpha1
Generating deepcopy funcs
Generating clientset for jobflow:v1alpha1 at github.com/myoperator/jobflowoperator/pkg/client/clientset
Generating listers for jobflow:v1alpha1 at github.com/myoperator/jobflowoperator/pkg/client/listers
Generating informers for jobflow:v1alpha1 at github.com/myoperator/jobflowoperator/pkg/client/informers
[root@VM-0-16-centos jobflowoperator]# pwd
/root/go/src/github.com/myoperator/jobflowoperator
[root@VM-0-16-centos jobflowoperator]# cd
[root@VM-0-16-centos ~]# rm -rf jobflowoperator/
[root@VM-0-16-centos ~]# cp -r /root/go/src/github.com/myoperator/jobflowoperator/ ~/jobflowoperator
[root@VM-0-16-centos ~]# cd jobflowoperator/
[root@VM-0-16-centos jobflowoperator]# ls
Dockerfile go.mod go.sum main.go pkg resources yaml
manager 主要用来管理Controller Admission Webhook 包括:
访问资源对象的client cache scheme 并提供依赖注入机制 优雅关闭机制
operator = crd + controller + webhook
*/
func init() {
klog.InitFlags(nil) // initializing the flags
defer klog.Flush()
flag.Parse() // parses the command-line flags
logf.SetLogger(zap.New())
}
func main() {
// 1. 管理器初始化
mgr, err := manager.New(k8sconfig.K8sRestConfigOrDie(), manager.Options{
Logger: logf.Log.WithName("JobFlow operator"),
})
if err != nil {
mgr.GetLogger().Error(err, "unable to set up manager")
os.Exit(1)
}
// 2. ++ 注册进入序列化表
err = jobflowv1alpha1.SchemeBuilder.AddToScheme(mgr.GetScheme())
if err != nil {
klog.Error(err, "unable add schema")
os.Exit(1)
}
err = daemonjobv1alpha1.SchemeBuilder.AddToScheme(mgr.GetScheme())
if err != nil {
klog.Error(err, "unable add schema")
os.Exit(1)
}
err = jobtemplatev1alpha1.SchemeBuilder.AddToScheme(mgr.GetScheme())
if err != nil {
klog.Error(err, "unable add schema")
os.Exit(1)
}
// 3. 控制器相关
jobFlowCtl := controller.NewJobFlowController(mgr.GetClient(), mgr.GetLogger(),
mgr.GetScheme(), mgr.GetEventRecorderFor("JobFlow operator"))
err = builder.ControllerManagedBy(mgr).For(&jobflowv1alpha1.JobFlow{}).
Watches(&source.Kind{Type: &batchv1.Job{}},
handler.Funcs{
UpdateFunc: jobFlowCtl.OnUpdateJobHandlerByJobFlow,
DeleteFunc: jobFlowCtl.OnDeleteJobHandlerByJobFlow,
},
).Complete(jobFlowCtl)
// 3. 控制器相关
daemonJobCtl := controller.NewDaemonJobController(mgr.GetClient(), mgr.GetLogger(),
mgr.GetScheme(), mgr.GetEventRecorderFor("DaemonJob operator"))
err = builder.ControllerManagedBy(mgr).For(&daemonjobv1alpha1.DaemonJob{}).
Watches(&source.Kind{Type: &batchv1.Job{}},
handler.Funcs{
UpdateFunc: daemonJobCtl.OnUpdateJobHandlerByDaemonJob,
DeleteFunc: daemonJobCtl.OnDeleteJobHandlerByDaemonJob,
},
).Complete(daemonJobCtl)
// 3. 控制器相关
jobTemplateCtl := controller.NewJobTemplateController(mgr.GetClient(), mgr.GetLogger(),
mgr.GetScheme(), mgr.GetEventRecorderFor("JobTemplate operator"))
err = builder.ControllerManagedBy(mgr).For(&jobtemplatev1alpha1.JobTemplate{}).
Watches(&source.Kind{Type: &batchv1.Job{}},
handler.Funcs{
CreateFunc: jobTemplateCtl.JobCreateTemplateHandler,
UpdateFunc: jobTemplateCtl.JobUpdateTemplateHandler,
DeleteFunc: jobTemplateCtl.JobDeleteTemplateHandler,
},
).
Complete(jobTemplateCtl)
errC := make(chan error)
if err = mgr.Start(signals.SetupSignalHandler()); err != nil {
errC <- err
}
}