Skip to content

Commit

Permalink
feat: 初版代码结构
Browse files Browse the repository at this point in the history
  • Loading branch information
googs1025 committed Apr 25, 2023
1 parent bfd7f38 commit 8cf2196
Show file tree
Hide file tree
Showing 42 changed files with 3,148 additions and 0 deletions.
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
config
app.yaml

# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
bin
testbin/*

# Test binary, build with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Kubernetes Generated files - skip generated files, except for vendored files

!vendor/**/zz_generated.*

# editor and IDE paraphernalia
.idea
*.swp
*.swo
*~
73 changes: 73 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
module github.com/myoperator/poddeployer

go 1.18

require (
github.com/evanphx/json-patch v4.12.0+incompatible
k8s.io/api v0.26.2
k8s.io/apimachinery v0.26.2
k8s.io/client-go v0.26.2
k8s.io/code-generator v0.26.2
k8s.io/klog/v2 v2.80.1
sigs.k8s.io/controller-runtime v0.14.5
)

require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/zapr v1.2.3 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.1 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/mod v0.9.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/term v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.7.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.26.1 // indirect
k8s.io/component-base v0.26.1 // indirect
k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
627 changes: 627 additions & 0 deletions go.sum

Large diffs are not rendered by default.

81 changes: 81 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package main

import (
podrestarterv1alpha1 "github.com/myoperator/poddeployer/pkg/apis/podDeployer/v1alpha1"
"github.com/myoperator/poddeployer/pkg/controller"
"github.com/myoperator/poddeployer/pkg/k8sconfig"
v1 "k8s.io/api/apps/v1"
_ "k8s.io/code-generator"
"k8s.io/klog/v2"
"log"
"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"
)

/*
manager 主要用来管理Controller Admission Webhook 包括:
访问资源对象的client cache scheme 并提供依赖注入机制 优雅关闭机制
operator = crd + controller + webhook
*/



func main() {

logf.SetLogger(zap.New())
// 1. 管理器初始化
mgr, err := manager.New(k8sconfig.K8sRestConfig(), manager.Options{
Logger: logf.Log.WithName("poddeployer-operator"),
})
if err != nil {
mgr.GetLogger().Error(err, "unable to set up manager")
os.Exit(1)
}

// 2. ++ 注册进入序列化表
err = podrestarterv1alpha1.SchemeBuilder.AddToScheme(mgr.GetScheme())
if err != nil {
klog.Error(err, "unable add schema")
os.Exit(1)
}


// 3. 控制器相关
podReStarterCtl := controller.NewPodDeployerController()

err = builder.ControllerManagedBy(mgr).
For(&podrestarterv1alpha1.Poddeployer{}).
Watches(&source.Kind{Type: &v1.Deployment{}},
handler.Funcs{
DeleteFunc: podReStarterCtl.DeploymentDeleteHandler,
},
).
Complete(podReStarterCtl)


errC := make(chan error)

// 4. 启动controller管理器
go func() {
klog.Info("controller start!! ")
if err = mgr.Start(signals.SetupSignalHandler()); err != nil {
errC <-err
}
}()



// 这里会阻塞
getError := <-errC
log.Println(getError.Error())

}


5 changes: 5 additions & 0 deletions pkg/apis/podDeployer/v1alpha1/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

// Package v1alpha1 contains API Schema definitions for the ecs v1alpha1 API group
// +k8s:deepcopy-gen=package,register
// +groupName=api.practice.com
package v1alpha1
42 changes: 42 additions & 0 deletions pkg/apis/podDeployer/v1alpha1/register.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)

const (
PodDeployerGroup = "api.practice.com"
PodDeployerVersion = "v1alpha1"
PodDeployerApiVersion = "api.practice.com/v1alpha1"
PodDeployerKind = "Poddeployer"
)
// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: PodDeployerGroup, Version: PodDeployerVersion}

// Kind takes an unqualified kind and returns back a Group qualified GroupKind
func Kind(kind string) schema.GroupKind {
return SchemeGroupVersion.WithKind(kind).GroupKind()
}

// Resource takes an unqualified resource and returns a Group qualified GroupResource
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}

var (
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
AddToScheme = SchemeBuilder.AddToScheme
)

// Adds the list of known types to Scheme.
func addKnownTypes(scheme *runtime.Scheme) error {

scheme.AddKnownTypes(SchemeGroupVersion,
&Poddeployer{},
&PoddeployerList{},
)
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
return nil
}
43 changes: 43 additions & 0 deletions pkg/apis/podDeployer/v1alpha1/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package v1alpha1

import (
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// Poddeployer
type Poddeployer struct {
metav1.TypeMeta `json:",inline"`

metav1.ObjectMeta `json:"metadata,omitempty"`

Spec PodDeployerSpec `json:"spec,omitempty"`
}


type PodDeployerSpec struct {
DeploymentSpec appsv1.DeploymentSpec `json:"deployment_spec"`
PriorityImages []PriorityImage `json:"priority_images,omitempty"`
}

type PriorityImage struct {
Image string `json:"image"`
Value int `json:"value"`
}


// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// PodReStarterList
type PoddeployerList struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ListMeta `json:"metadata,omitempty"`

Items []Poddeployer `json:"items"`
}


Loading

0 comments on commit 8cf2196

Please sign in to comment.