Skip to content

Commit 8cf2196

Browse files
committed
feat: 初版代码结构
1 parent bfd7f38 commit 8cf2196

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+3148
-0
lines changed

.gitignore

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
config
2+
app.yaml
3+
4+
# Binaries for programs and plugins
5+
*.exe
6+
*.exe~
7+
*.dll
8+
*.so
9+
*.dylib
10+
bin
11+
testbin/*
12+
13+
# Test binary, build with `go test -c`
14+
*.test
15+
16+
# Output of the go coverage tool, specifically when used with LiteIDE
17+
*.out
18+
19+
# Kubernetes Generated files - skip generated files, except for vendored files
20+
21+
!vendor/**/zz_generated.*
22+
23+
# editor and IDE paraphernalia
24+
.idea
25+
*.swp
26+
*.swo
27+
*~

go.mod

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
module github.com/myoperator/poddeployer
2+
3+
go 1.18
4+
5+
require (
6+
github.com/evanphx/json-patch v4.12.0+incompatible
7+
k8s.io/api v0.26.2
8+
k8s.io/apimachinery v0.26.2
9+
k8s.io/client-go v0.26.2
10+
k8s.io/code-generator v0.26.2
11+
k8s.io/klog/v2 v2.80.1
12+
sigs.k8s.io/controller-runtime v0.14.5
13+
)
14+
15+
require (
16+
github.com/beorn7/perks v1.0.1 // indirect
17+
github.com/cespare/xxhash/v2 v2.1.2 // indirect
18+
github.com/davecgh/go-spew v1.1.1 // indirect
19+
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
20+
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
21+
github.com/fsnotify/fsnotify v1.6.0 // indirect
22+
github.com/go-logr/logr v1.2.3 // indirect
23+
github.com/go-logr/zapr v1.2.3 // indirect
24+
github.com/go-openapi/jsonpointer v0.19.6 // indirect
25+
github.com/go-openapi/jsonreference v0.20.1 // indirect
26+
github.com/go-openapi/swag v0.22.3 // indirect
27+
github.com/gogo/protobuf v1.3.2 // indirect
28+
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
29+
github.com/golang/protobuf v1.5.3 // indirect
30+
github.com/google/gnostic v0.5.7-v3refs // indirect
31+
github.com/google/go-cmp v0.5.9 // indirect
32+
github.com/google/gofuzz v1.1.0 // indirect
33+
github.com/google/uuid v1.3.0 // indirect
34+
github.com/imdario/mergo v0.3.12 // indirect
35+
github.com/josharian/intern v1.0.0 // indirect
36+
github.com/json-iterator/go v1.1.12 // indirect
37+
github.com/mailru/easyjson v0.7.7 // indirect
38+
github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect
39+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
40+
github.com/modern-go/reflect2 v1.0.2 // indirect
41+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
42+
github.com/pkg/errors v0.9.1 // indirect
43+
github.com/prometheus/client_golang v1.14.0 // indirect
44+
github.com/prometheus/client_model v0.3.0 // indirect
45+
github.com/prometheus/common v0.37.0 // indirect
46+
github.com/prometheus/procfs v0.8.0 // indirect
47+
github.com/spf13/pflag v1.0.5 // indirect
48+
go.uber.org/atomic v1.7.0 // indirect
49+
go.uber.org/multierr v1.6.0 // indirect
50+
go.uber.org/zap v1.24.0 // indirect
51+
golang.org/x/mod v0.9.0 // indirect
52+
golang.org/x/net v0.8.0 // indirect
53+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
54+
golang.org/x/sys v0.6.0 // indirect
55+
golang.org/x/term v0.6.0 // indirect
56+
golang.org/x/text v0.8.0 // indirect
57+
golang.org/x/time v0.3.0 // indirect
58+
golang.org/x/tools v0.7.0 // indirect
59+
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
60+
google.golang.org/appengine v1.6.7 // indirect
61+
google.golang.org/protobuf v1.28.1 // indirect
62+
gopkg.in/inf.v0 v0.9.1 // indirect
63+
gopkg.in/yaml.v2 v2.4.0 // indirect
64+
gopkg.in/yaml.v3 v3.0.1 // indirect
65+
k8s.io/apiextensions-apiserver v0.26.1 // indirect
66+
k8s.io/component-base v0.26.1 // indirect
67+
k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect
68+
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
69+
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
70+
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
71+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
72+
sigs.k8s.io/yaml v1.3.0 // indirect
73+
)

go.sum

+627
Large diffs are not rendered by default.

main.go

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package main
2+
3+
import (
4+
podrestarterv1alpha1 "github.com/myoperator/poddeployer/pkg/apis/podDeployer/v1alpha1"
5+
"github.com/myoperator/poddeployer/pkg/controller"
6+
"github.com/myoperator/poddeployer/pkg/k8sconfig"
7+
v1 "k8s.io/api/apps/v1"
8+
_ "k8s.io/code-generator"
9+
"k8s.io/klog/v2"
10+
"log"
11+
"os"
12+
"sigs.k8s.io/controller-runtime/pkg/builder"
13+
"sigs.k8s.io/controller-runtime/pkg/handler"
14+
logf "sigs.k8s.io/controller-runtime/pkg/log"
15+
"sigs.k8s.io/controller-runtime/pkg/log/zap"
16+
"sigs.k8s.io/controller-runtime/pkg/manager"
17+
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
18+
"sigs.k8s.io/controller-runtime/pkg/source"
19+
)
20+
21+
/*
22+
manager 主要用来管理Controller Admission Webhook 包括:
23+
访问资源对象的client cache scheme 并提供依赖注入机制 优雅关闭机制
24+
25+
operator = crd + controller + webhook
26+
*/
27+
28+
29+
30+
func main() {
31+
32+
logf.SetLogger(zap.New())
33+
// 1. 管理器初始化
34+
mgr, err := manager.New(k8sconfig.K8sRestConfig(), manager.Options{
35+
Logger: logf.Log.WithName("poddeployer-operator"),
36+
})
37+
if err != nil {
38+
mgr.GetLogger().Error(err, "unable to set up manager")
39+
os.Exit(1)
40+
}
41+
42+
// 2. ++ 注册进入序列化表
43+
err = podrestarterv1alpha1.SchemeBuilder.AddToScheme(mgr.GetScheme())
44+
if err != nil {
45+
klog.Error(err, "unable add schema")
46+
os.Exit(1)
47+
}
48+
49+
50+
// 3. 控制器相关
51+
podReStarterCtl := controller.NewPodDeployerController()
52+
53+
err = builder.ControllerManagedBy(mgr).
54+
For(&podrestarterv1alpha1.Poddeployer{}).
55+
Watches(&source.Kind{Type: &v1.Deployment{}},
56+
handler.Funcs{
57+
DeleteFunc: podReStarterCtl.DeploymentDeleteHandler,
58+
},
59+
).
60+
Complete(podReStarterCtl)
61+
62+
63+
errC := make(chan error)
64+
65+
// 4. 启动controller管理器
66+
go func() {
67+
klog.Info("controller start!! ")
68+
if err = mgr.Start(signals.SetupSignalHandler()); err != nil {
69+
errC <-err
70+
}
71+
}()
72+
73+
74+
75+
// 这里会阻塞
76+
getError := <-errC
77+
log.Println(getError.Error())
78+
79+
}
80+
81+

pkg/apis/podDeployer/v1alpha1/doc.go

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
// Package v1alpha1 contains API Schema definitions for the ecs v1alpha1 API group
3+
// +k8s:deepcopy-gen=package,register
4+
// +groupName=api.practice.com
5+
package v1alpha1
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package v1alpha1
2+
3+
import (
4+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5+
"k8s.io/apimachinery/pkg/runtime"
6+
"k8s.io/apimachinery/pkg/runtime/schema"
7+
)
8+
9+
const (
10+
PodDeployerGroup = "api.practice.com"
11+
PodDeployerVersion = "v1alpha1"
12+
PodDeployerApiVersion = "api.practice.com/v1alpha1"
13+
PodDeployerKind = "Poddeployer"
14+
)
15+
// SchemeGroupVersion is group version used to register these objects
16+
var SchemeGroupVersion = schema.GroupVersion{Group: PodDeployerGroup, Version: PodDeployerVersion}
17+
18+
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
19+
func Kind(kind string) schema.GroupKind {
20+
return SchemeGroupVersion.WithKind(kind).GroupKind()
21+
}
22+
23+
// Resource takes an unqualified resource and returns a Group qualified GroupResource
24+
func Resource(resource string) schema.GroupResource {
25+
return SchemeGroupVersion.WithResource(resource).GroupResource()
26+
}
27+
28+
var (
29+
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
30+
AddToScheme = SchemeBuilder.AddToScheme
31+
)
32+
33+
// Adds the list of known types to Scheme.
34+
func addKnownTypes(scheme *runtime.Scheme) error {
35+
36+
scheme.AddKnownTypes(SchemeGroupVersion,
37+
&Poddeployer{},
38+
&PoddeployerList{},
39+
)
40+
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
41+
return nil
42+
}
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package v1alpha1
2+
3+
import (
4+
appsv1 "k8s.io/api/apps/v1"
5+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6+
)
7+
8+
// +genclient
9+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
10+
11+
// Poddeployer
12+
type Poddeployer struct {
13+
metav1.TypeMeta `json:",inline"`
14+
15+
metav1.ObjectMeta `json:"metadata,omitempty"`
16+
17+
Spec PodDeployerSpec `json:"spec,omitempty"`
18+
}
19+
20+
21+
type PodDeployerSpec struct {
22+
DeploymentSpec appsv1.DeploymentSpec `json:"deployment_spec"`
23+
PriorityImages []PriorityImage `json:"priority_images,omitempty"`
24+
}
25+
26+
type PriorityImage struct {
27+
Image string `json:"image"`
28+
Value int `json:"value"`
29+
}
30+
31+
32+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
33+
34+
// PodReStarterList
35+
type PoddeployerList struct {
36+
metav1.TypeMeta `json:",inline"`
37+
// +optional
38+
metav1.ListMeta `json:"metadata,omitempty"`
39+
40+
Items []Poddeployer `json:"items"`
41+
}
42+
43+

0 commit comments

Comments
 (0)