Skip to content

Commit 74a13b0

Browse files
committed
feat: support cronjob & custom job
1 parent aae9141 commit 74a13b0

File tree

327 files changed

+18868
-4029
lines changed

Some content is hidden

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

327 files changed

+18868
-4029
lines changed

README.md

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
[项目网站]: https://konglingfei.com
21
[项目文档]: https://konglingfei.com/onex/
32
[安装指南]: https://konglingfei.com/onex/installation/
43
[开发指南]: https://konglingfei.com/onex/devel/devel.html
@@ -42,8 +41,6 @@
4241

4342
OneX 云原生实战平台是一个 Go 语言 + 云原生实战平台,也是一个企业级的云平台,整个项目遵循最佳实践的思路去构建。
4443

45-
OneX 项目通过提供功能完备、规范、高质量的 Go 源码来实现代码即学习的理念,通过配套的 Go 开发课程,来降低学习难度、扩展学习深度和广度。通过配套的云原生开发社群 [孔令飞的云原生实战营](https://konglingfei.com),来提高云原生技术学习的效果。
46-
4744
> OneX 寓意该实战项目具有功能全、扩展性高等特点。未来 OneX 会继续集成进很多跟 Go、云原生相关的功能。因为 OneX在项目设计的时候,就考虑到了未来功能和架构的扩展,所以 OneX 未来可以无缝、丝滑的扩展很多新的功能。
4845
4946
## Features
@@ -131,15 +128,6 @@ OneX [项目文档] 包含了 OneX 项目介绍、OneX 部署、OneX 项目测
131128

132129
请遵守本项目的 行为准则 [code of conduct](./CODE_OF_CONDUCT.md)
133130

134-
## Contacts
135-
136-
- 关注公众号【[令飞编程](https://mp.weixin.qq.com/s/a8efr1hZ6bZHOqH3ITj9yA)】,干货不错过:
137-
- 回复【资料】获取全套 Go + 云原生学习资料;
138-
- 回复【好友】可以添加我的微信,免费一对一技术交流指导;
139-
- 回复【星球】加入 [孔令飞的云原生实战营](https://konglingfei.com),带你进阶 Go+云原生高级开发工程师。
140-
141-
![令飞编程](./docs/images/令飞编程.png)
142-
143131
## License
144132

145133
[MIT](https://choosealicense.com/licenses/mit/)

cmd/gen-man/gen_onex_man.go

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ import (
2121

2222
apiservapp "github.com/onexstack/onex/cmd/onex-apiserver/app"
2323
ctrlmgrapp "github.com/onexstack/onex/cmd/onex-controller-manager/app"
24-
//fakeserverapp "github.com/onexstack/onex/cmd/onex-fakeserver/app"
24+
25+
// fakeserverapp "github.com/onexstack/onex/cmd/onex-fakeserver/app"
2526
gwapp "github.com/onexstack/onex/cmd/onex-gateway/app"
26-
minerctrlapp "github.com/onexstack/onex/cmd/onex-miner-controller/app"
27-
minersetctrlapp "github.com/onexstack/onex/cmd/onex-minerset-controller/app"
2827
nwapp "github.com/onexstack/onex/cmd/onex-nightwatch/app"
2928
pumpapp "github.com/onexstack/onex/cmd/onex-pump/app"
3029
toyblcapp "github.com/onexstack/onex/cmd/onex-toyblc/app"
@@ -113,20 +112,6 @@ func main() {
113112
for _, c := range ctrlmgr.Commands() {
114113
genMarkdown(c, "onex-controller-manager", outDir)
115114
}
116-
case "onex-minerset-controller":
117-
// generate manpage for onex-minerset-controller
118-
minersetctrl := minersetctrlapp.NewControllerCommand()
119-
genMarkdown(minersetctrl, "", outDir)
120-
for _, c := range minersetctrl.Commands() {
121-
genMarkdown(c, "onex-minerset-controller", outDir)
122-
}
123-
case "onex-miner-controller":
124-
// generate manpage for onex-miner-controller
125-
minerctrl := minerctrlapp.NewControllerCommand()
126-
genMarkdown(minerctrl, "", outDir)
127-
for _, c := range minerctrl.Commands() {
128-
genMarkdown(c, "onex-miner-controller", outDir)
129-
}
130115
case "onexctl":
131116
// generate manpage for onexctl
132117
// TODO os.Stdin should really be something like ioutil.Discard, but a Reader

cmd/gen-onex-docs/gen_onex_docs.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@ import (
1515

1616
apiservapp "github.com/onexstack/onex/cmd/onex-apiserver/app"
1717
ctrlmgrapp "github.com/onexstack/onex/cmd/onex-controller-manager/app"
18-
//fakeserverapp "github.com/onexstack/onex/cmd/onex-fakeserver/app"
18+
// fakeserverapp "github.com/onexstack/onex/cmd/onex-fakeserver/app"
1919
gwapp "github.com/onexstack/onex/cmd/onex-gateway/app"
20-
minerctrlapp "github.com/onexstack/onex/cmd/onex-miner-controller/app"
21-
minersetctrlapp "github.com/onexstack/onex/cmd/onex-minerset-controller/app"
2220
watchapp "github.com/onexstack/onex/cmd/onex-nightwatch/app"
2321
pumpapp "github.com/onexstack/onex/cmd/onex-pump/app"
2422
toyblcapp "github.com/onexstack/onex/cmd/onex-toyblc/app"
@@ -78,14 +76,6 @@ func main() {
7876
// generate docs for onex-controller-manager
7977
ctrlmgr := ctrlmgrapp.NewControllerManagerCommand()
8078
_ = doc.GenMarkdownTree(ctrlmgr, outDir)
81-
case "onex-minerset-controller":
82-
// generate docs for onex-minerset-controller
83-
minersetctrl := minersetctrlapp.NewControllerCommand()
84-
_ = doc.GenMarkdownTree(minersetctrl, outDir)
85-
case "onex-miner-controller":
86-
// generate docs for onex-miner-controller
87-
minerctrl := minerctrlapp.NewControllerCommand()
88-
_ = doc.GenMarkdownTree(minerctrl, outDir)
8979
case "onexctl":
9080
// generate docs for onexctl
9181
onexctl := onexctlcmd.NewDefaultOneXCtlCommand()

cmd/onex-apiserver/apiserver.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,27 @@ import (
2424

2525
"github.com/onexstack/onex/cmd/onex-apiserver/app"
2626
"github.com/onexstack/onex/internal/apiserver/admission/plugin/minerset"
27-
//"github.com/onexstack/onex/internal/controlplane/admission/initializer"
28-
"github.com/onexstack/onex/internal/pkg/config/minerprofile"
29-
//"github.com/onexstack/onex/internal/pkg/options"
27+
3028
"github.com/onexstack/onex/internal/apiserver/admission/initializer"
3129
appsrest "github.com/onexstack/onex/internal/apiserver/registry/apps/rest"
32-
"github.com/onexstack/onex/pkg/apis/apps/v1beta1"
30+
batchrest "github.com/onexstack/onex/internal/apiserver/registry/batch/rest"
31+
"github.com/onexstack/onex/internal/pkg/config/minerprofile"
32+
appsv1beta1 "github.com/onexstack/onex/pkg/apis/apps/v1beta1"
33+
batchv1beta1 "github.com/onexstack/onex/pkg/apis/batch/v1beta1"
3334
"github.com/onexstack/onex/pkg/generated/clientset/versioned"
3435
"github.com/onexstack/onex/pkg/generated/informers"
3536
generatedopenapi "github.com/onexstack/onex/pkg/generated/openapi"
3637
)
3738

3839
func main() {
40+
var informerFactory informers.SharedInformerFactory
41+
3942
// Please note that the following WithOptions are all required.
4043
command := app.NewAPIServerCommand(
4144
// Add custom etcd options.
42-
app.WithEtcdOptions("/registry/onex.io", v1beta1.SchemeGroupVersion),
45+
app.WithEtcdOptions("/registry/onex.io", appsv1beta1.SchemeGroupVersion, batchv1beta1.SchemeGroupVersion),
4346
// Add custom resource storage.
44-
app.WithRESTStorageProviders(appsrest.RESTStorageProvider{}),
47+
app.WithRESTStorageProviders(appsrest.RESTStorageProvider{}, batchrest.RESTStorageProvider{}),
4548
// Add custom dns address.
4649
app.WithAlternateDNS("onex.io"),
4750
// Add custom admission plugins.
@@ -53,11 +56,19 @@ func main() {
5356
if err != nil {
5457
return nil, err
5558
}
56-
informerFactory := informers.NewSharedInformerFactory(client, c.LoopbackClientConfig.Timeout)
59+
informerFactory = informers.NewSharedInformerFactory(client, c.LoopbackClientConfig.Timeout)
5760
// NOTICE: As we create a shared informer, we need to start it later.
58-
app.WithSharedInformerFactory(informerFactory)
61+
// We can usually start it by adding a PostStartHook.
5962
return []admission.PluginInitializer{initializer.New(informerFactory, client)}, nil
6063
}),
64+
app.WithPostStartHook(
65+
"start-external-informers",
66+
func(ctx genericapiserver.PostStartHookContext) error {
67+
if informerFactory != nil {
68+
informerFactory.Start(ctx.Done())
69+
}
70+
return nil
71+
}),
6172
app.WithPostStartHook(
6273
"initialize-instance-config-client",
6374
func(ctx genericapiserver.PostStartHookContext) error {

cmd/onex-apiserver/app/config.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,17 @@ func NewConfig(opts options.CompletedOptions) (*Config, error) {
6868
c.KubeAPIs = controlPlane
6969

7070
apiExtensions, err := apiserver.CreateAPIExtensionsConfig(
71-
controlPlane.GenericConfig.Config,
72-
controlPlane.ExtraConfig.InternalVersionedInformers,
71+
controlPlane.Generic.Config,
72+
controlPlane.Extra.InternalVersionedInformers,
7373
nil,
7474
opts.CompletedOptions,
7575
3,
7676
serviceResolver,
7777
webhook.NewDefaultAuthenticationInfoResolverWrapper(
78-
controlPlane.ExtraConfig.ProxyTransport,
79-
controlPlane.GenericConfig.EgressSelector,
80-
controlPlane.GenericConfig.LoopbackClientConfig,
81-
controlPlane.GenericConfig.TracerProvider,
78+
controlPlane.Extra.ProxyTransport,
79+
controlPlane.Generic.EgressSelector,
80+
controlPlane.Generic.LoopbackClientConfig,
81+
controlPlane.Generic.TracerProvider,
8282
),
8383
)
8484
if err != nil {
@@ -87,12 +87,12 @@ func NewConfig(opts options.CompletedOptions) (*Config, error) {
8787
c.ApiExtensions = apiExtensions
8888

8989
aggregator, err := createAggregatorConfig(
90-
controlPlane.GenericConfig.Config,
90+
controlPlane.Generic.Config,
9191
opts.CompletedOptions,
92-
controlPlane.ExtraConfig.InternalVersionedInformers,
92+
controlPlane.Extra.InternalVersionedInformers,
9393
serviceResolver,
94-
controlPlane.ExtraConfig.ProxyTransport,
95-
controlPlane.ExtraConfig.PeerProxy,
94+
controlPlane.Extra.ProxyTransport,
95+
controlPlane.Extra.PeerProxy,
9696
nil,
9797
)
9898
if err != nil {

cmd/onex-apiserver/app/options/options.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
cliflag "k8s.io/component-base/cli/flag"
1515
"k8s.io/kube-openapi/pkg/common"
1616

17-
"github.com/onexstack/onex/internal/controlplane"
1817
controlplaneoptions "github.com/onexstack/onex/internal/controlplane/apiserver/options"
1918
"github.com/onexstack/onex/pkg/apiserver/storage"
2019
)
@@ -37,7 +36,6 @@ type Extra struct {
3736

3837
// For external resources
3938
ExternalRESTStorageProviders []storage.RESTStorageProvider
40-
ExternalVersionedInformers controlplane.ExternalSharedInformerFactory
4139
ExternalPostStartHooks map[string]genericapiserver.PostStartHookFunc
4240
GetOpenAPIDefinitions common.GetOpenAPIDefinitions
4341
}

cmd/onex-apiserver/app/server.go

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ import (
2828
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2929
"k8s.io/apiserver/pkg/admission"
3030
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
31+
"k8s.io/apiserver/pkg/reconcilers"
3132
genericapiserver "k8s.io/apiserver/pkg/server"
3233
genericoptions "k8s.io/apiserver/pkg/server/options"
34+
serverstorage "k8s.io/apiserver/pkg/server/storage"
3335
"k8s.io/apiserver/pkg/storage/storagebackend"
3436
utilfeature "k8s.io/apiserver/pkg/util/feature"
3537
"k8s.io/apiserver/pkg/util/notfoundhandler"
@@ -46,10 +48,12 @@ import (
4648
aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme"
4749
"k8s.io/kube-openapi/pkg/common"
4850
"k8s.io/kubernetes/pkg/api/legacyscheme"
51+
api "k8s.io/kubernetes/pkg/apis/core"
4952
"k8s.io/kubernetes/pkg/features"
5053

5154
"github.com/onexstack/onex/cmd/onex-apiserver/app/options"
5255
"github.com/onexstack/onex/internal/controlplane"
56+
"github.com/onexstack/onex/internal/controlplane/apiserver"
5357
controlplaneapiserver "github.com/onexstack/onex/internal/controlplane/apiserver"
5458
"github.com/onexstack/onex/pkg/apiserver/storage"
5559
"github.com/onexstack/onexstack/pkg/version"
@@ -59,8 +63,10 @@ func init() {
5963
utilruntime.Must(logsapi.AddFeatureGates(utilfeature.DefaultMutableFeatureGate))
6064
}
6165

62-
type Option func(*options.ServerRunOptions)
63-
type RegisterFunc func(plugins *admission.Plugins)
66+
type (
67+
Option func(*options.ServerRunOptions)
68+
RegisterFunc func(plugins *admission.Plugins)
69+
)
6470

6571
// WithLegacyCode returns an Option that sets the external group versions in the ServerRunOptions.
6672
func WithEtcdOptions(prefix string, versions ...schema.GroupVersion) Option {
@@ -112,13 +118,6 @@ func WithPostStartHook(name string, hook genericapiserver.PostStartHookFunc) Opt
112118
}
113119
}
114120

115-
// WithSharedInformerFactory returns an Option function that sets the external SharedInformerFactory in the ServerRunOptions.
116-
func WithSharedInformerFactory(informers controlplane.ExternalSharedInformerFactory) Option {
117-
return func(s *options.ServerRunOptions) {
118-
s.ExternalVersionedInformers = informers
119-
}
120-
}
121-
122121
// WithRESTStorageProviders returns an Option function that sets the external REST storage providers in the ServerRunOptions.
123122
func WithRESTStorageProviders(providers ...storage.RESTStorageProvider) Option {
124123
return func(s *options.ServerRunOptions) {
@@ -238,7 +237,7 @@ func Run(ctx context.Context, opts options.CompletedOptions) error {
238237

239238
// CreateServerChain creates the apiservers connected via delegation.
240239
func CreateServerChain(config CompletedConfig) (*aggregatorapiserver.APIAggregator, error) {
241-
notFoundHandler := notfoundhandler.New(config.KubeAPIs.GenericConfig.Serializer, genericapifilters.NoMuxAndDiscoveryIncompleteKey)
240+
notFoundHandler := notfoundhandler.New(config.KubeAPIs.Generic.Serializer, genericapifilters.NoMuxAndDiscoveryIncompleteKey)
242241
apiExtensionsServer, err := config.ApiExtensions.New(genericapiserver.NewEmptyDelegateWithCustomHandler(notFoundHandler))
243242
if err != nil {
244243
return nil, err
@@ -292,43 +291,41 @@ func CreateOneXAPIServerConfig(opts options.CompletedOptions) (
292291
opts.Metrics.Apply()
293292

294293
config := &controlplane.Config{
295-
GenericConfig: genericConfig,
296-
ExtraConfig: controlplane.ExtraConfig{
294+
Generic: genericConfig,
295+
Extra: controlplane.Extra{
297296
APIResourceConfigSource: storageFactory.APIResourceConfigSource,
298297
StorageFactory: storageFactory,
299298
EventTTL: opts.EventTTL,
300299
EnableLogsSupport: opts.EnableLogsHandler,
301300
ProxyTransport: proxyTransport,
302-
//ExternalGroupResources: opts.ExternalGroupResources,
301+
// ExternalGroupResources: opts.ExternalGroupResources,
303302
ExternalRESTStorageProviders: opts.ExternalRESTStorageProviders,
304303
MasterCount: opts.MasterCount,
305-
//VersionedInformers: opts.SharedInformerFactory,
304+
// VersionedInformers: opts.SharedInformerFactory,
306305
// Here we will use the config file of "onex" to create a client-go informers.
307-
//KubeVersionedInformers: kubeSharedInformers,
306+
// KubeVersionedInformers: kubeSharedInformers,
308307
InternalVersionedInformers: opts.InternalVersionedInformers,
309-
ExternalVersionedInformers: opts.ExternalVersionedInformers,
310308
ExternalPostStartHooks: opts.ExternalPostStartHooks,
311309
},
312310
}
313311

314312
if utilfeature.DefaultFeatureGate.Enabled(features.UnknownVersionInteroperabilityProxy) {
315-
config.ExtraConfig.PeerEndpointLeaseReconciler, err = controlplaneapiserver.CreatePeerEndpointLeaseReconciler(genericConfig.Config, storageFactory)
313+
var err error
314+
config.PeerEndpointLeaseReconciler, err = CreatePeerEndpointLeaseReconciler(*genericConfig, storageFactory)
316315
if err != nil {
317316
return nil, nil, err
318317
}
319-
// build peer proxy config only if peer ca file exists
320318
if opts.PeerCAFile != "" {
321-
config.ExtraConfig.PeerProxy, err = controlplaneapiserver.BuildPeerProxy(
322-
kubeSharedInformers,
323-
genericConfig.StorageVersionManager,
319+
leaseInformer := kubeSharedInformers.Coordination().V1().Leases()
320+
config.PeerProxy, err = apiserver.BuildPeerProxy(
321+
leaseInformer,
322+
genericConfig.LoopbackClientConfig,
324323
opts.ProxyClientCertFile,
325-
opts.ProxyClientKeyFile,
326-
opts.PeerCAFile,
324+
opts.ProxyClientKeyFile, opts.PeerCAFile,
327325
opts.PeerAdvertiseAddress,
328326
genericConfig.APIServerID,
329-
config.ExtraConfig.PeerEndpointLeaseReconciler,
330-
config.GenericConfig.Serializer,
331-
)
327+
config.Extra.PeerEndpointLeaseReconciler,
328+
config.Generic.Serializer)
332329
if err != nil {
333330
return nil, nil, err
334331
}
@@ -385,3 +382,15 @@ func buildServiceResolver(enabledAggregatorRouting bool, hostname string, inform
385382
}
386383
return serviceResolver
387384
}
385+
386+
// CreatePeerEndpointLeaseReconciler creates a apiserver endpoint lease reconciliation loop
387+
// The peer endpoint leases are used to find network locations of apiservers for peer proxy
388+
func CreatePeerEndpointLeaseReconciler(c genericapiserver.RecommendedConfig, storageFactory serverstorage.StorageFactory) (reconcilers.PeerEndpointLeaseReconciler, error) {
389+
ttl := apiserver.DefaultPeerEndpointReconcilerTTL
390+
config, err := storageFactory.NewConfig(api.Resource("apiServerPeerIPInfo"), &api.Endpoints{})
391+
if err != nil {
392+
return nil, fmt.Errorf("error creating storage factory config: %w", err)
393+
}
394+
reconciler, err := reconcilers.NewPeerEndpointLeaseReconciler(config, "/peerserverleases/", ttl)
395+
return reconciler, err
396+
}

cmd/onex-apiserver/import_known_versions.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ package main
1010
import (
1111
// These imports are the API groups the API server will support.
1212
_ "github.com/onexstack/onex/pkg/apis/apps/install"
13+
_ "github.com/onexstack/onex/pkg/apis/batch/install"
1314
)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# onex-blockchain-controller
2+
3+
onex-blockchain-controller 用来实现私有链业务,私有链业务囊括向下承载 2 大技术板块:
4+
- Kubernetes
5+
- Web3
6+
7+
onex-blockchain-controller 包括的控制器如下:
8+
-
9+
10+
onex-blockchain-controller 的开发方式,是 controller-runtime 方式
11+
12+
将所有跟区块链相关的功能聚合在一个 controller 核心优点是:可以复用公共部分的源码

cmd/onex-miner-controller/app/config/config.go renamed to cmd/onex-blockchain-controller/app/config/config.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import (
1111
restclient "k8s.io/client-go/rest"
1212
"sigs.k8s.io/controller-runtime/pkg/cluster"
1313

14-
"github.com/onexstack/onex/internal/controller/miner/apis/config"
14+
"github.com/onexstack/onex/internal/controller/blockchain/apis/config"
1515
)
1616

1717
// Config is the main context object for the controller.
1818
type Config struct {
19-
ComponentConfig *config.MinerControllerConfiguration
19+
ComponentConfig *config.BlockchainControllerConfiguration
2020

2121
// the rest config for the master
2222
Kubeconfig *restclient.Config
@@ -26,13 +26,3 @@ type Config struct {
2626

2727
ProviderCluster cluster.Cluster
2828
}
29-
30-
// CompletedConfig same as Config, just to swap private object.
31-
type CompletedConfig struct {
32-
*Config
33-
}
34-
35-
// Complete fills in any fields not set that are required to have valid data. It's mutating the receiver.
36-
func (c *Config) Complete() *CompletedConfig {
37-
return &CompletedConfig{c}
38-
}

0 commit comments

Comments
 (0)