mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-01-18 23:42:52 +08:00
ab7425d650
Kubernetes-commit: e346475822604fc41bd38e24a331fc7a8314876a
88 lines
2.9 KiB
Go
88 lines
2.9 KiB
Go
/*
|
|
Copyright 2017 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"time"
|
|
|
|
kubeinformers "k8s.io/client-go/informers"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
"k8s.io/klog/v2"
|
|
"k8s.io/sample-controller/pkg/signals"
|
|
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
|
|
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
|
|
|
clientset "k8s.io/sample-controller/pkg/generated/clientset/versioned"
|
|
informers "k8s.io/sample-controller/pkg/generated/informers/externalversions"
|
|
)
|
|
|
|
var (
|
|
masterURL string
|
|
kubeconfig string
|
|
)
|
|
|
|
func main() {
|
|
klog.InitFlags(nil)
|
|
flag.Parse()
|
|
|
|
// set up signals so we handle the shutdown signal gracefully
|
|
ctx := signals.SetupSignalHandler()
|
|
logger := klog.FromContext(ctx)
|
|
|
|
cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)
|
|
if err != nil {
|
|
logger.Error(err, "Error building kubeconfig")
|
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
}
|
|
|
|
kubeClient, err := kubernetes.NewForConfig(cfg)
|
|
if err != nil {
|
|
logger.Error(err, "Error building kubernetes clientset")
|
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
}
|
|
|
|
exampleClient, err := clientset.NewForConfig(cfg)
|
|
if err != nil {
|
|
logger.Error(err, "Error building kubernetes clientset")
|
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
}
|
|
|
|
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30)
|
|
exampleInformerFactory := informers.NewSharedInformerFactory(exampleClient, time.Second*30)
|
|
|
|
controller := NewController(ctx, kubeClient, exampleClient,
|
|
kubeInformerFactory.Apps().V1().Deployments(),
|
|
exampleInformerFactory.Samplecontroller().V1alpha1().Foos())
|
|
|
|
// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(ctx.done())
|
|
// Start method is non-blocking and runs all registered informers in a dedicated goroutine.
|
|
kubeInformerFactory.Start(ctx.Done())
|
|
exampleInformerFactory.Start(ctx.Done())
|
|
|
|
if err = controller.Run(ctx, 2); err != nil {
|
|
logger.Error(err, "Error running controller")
|
|
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
|
|
flag.StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
|
|
}
|