Merge pull request #273 from fluxcd/start-fs-on-leader-election
This commit is contained in:
commit
65bebebb0c
|
@ -30,6 +30,8 @@ spec:
|
||||||
name: http
|
name: http
|
||||||
- containerPort: 8080
|
- containerPort: 8080
|
||||||
name: http-prom
|
name: http-prom
|
||||||
|
- containerPort: 9440
|
||||||
|
name: healthz
|
||||||
env:
|
env:
|
||||||
- name: RUNTIME_NAMESPACE
|
- name: RUNTIME_NAMESPACE
|
||||||
valueFrom:
|
valueFrom:
|
||||||
|
@ -44,8 +46,8 @@ spec:
|
||||||
- --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local.
|
- --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local.
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
port: http
|
port: healthz
|
||||||
path: /
|
path: /healthz
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
port: http
|
port: http
|
||||||
|
|
31
main.go
31
main.go
|
@ -38,6 +38,7 @@ import (
|
||||||
"github.com/fluxcd/pkg/runtime/events"
|
"github.com/fluxcd/pkg/runtime/events"
|
||||||
"github.com/fluxcd/pkg/runtime/logger"
|
"github.com/fluxcd/pkg/runtime/logger"
|
||||||
"github.com/fluxcd/pkg/runtime/metrics"
|
"github.com/fluxcd/pkg/runtime/metrics"
|
||||||
|
"github.com/fluxcd/pkg/runtime/probes"
|
||||||
|
|
||||||
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
|
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
|
||||||
"github.com/fluxcd/source-controller/controllers"
|
"github.com/fluxcd/source-controller/controllers"
|
||||||
|
@ -66,6 +67,7 @@ func main() {
|
||||||
var (
|
var (
|
||||||
metricsAddr string
|
metricsAddr string
|
||||||
eventsAddr string
|
eventsAddr string
|
||||||
|
healthAddr string
|
||||||
enableLeaderElection bool
|
enableLeaderElection bool
|
||||||
storagePath string
|
storagePath string
|
||||||
storageAddr string
|
storageAddr string
|
||||||
|
@ -80,6 +82,7 @@ func main() {
|
||||||
"The address the metric endpoint binds to.")
|
"The address the metric endpoint binds to.")
|
||||||
flag.StringVar(&eventsAddr, "events-addr", envOrDefault("EVENTS_ADDR", ""),
|
flag.StringVar(&eventsAddr, "events-addr", envOrDefault("EVENTS_ADDR", ""),
|
||||||
"The address of the events receiver.")
|
"The address of the events receiver.")
|
||||||
|
flag.StringVar(&healthAddr, "health-addr", ":9440", "The address the health endpoint binds to.")
|
||||||
flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
|
flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
|
||||||
"Enable leader election for controller manager. "+
|
"Enable leader election for controller manager. "+
|
||||||
"Enabling this will ensure there is only one active controller manager.")
|
"Enabling this will ensure there is only one active controller manager.")
|
||||||
|
@ -120,24 +123,26 @@ func main() {
|
||||||
|
|
||||||
restConfig := client.GetConfigOrDie(clientOptions)
|
restConfig := client.GetConfigOrDie(clientOptions)
|
||||||
mgr, err := ctrl.NewManager(restConfig, ctrl.Options{
|
mgr, err := ctrl.NewManager(restConfig, ctrl.Options{
|
||||||
Scheme: scheme,
|
Scheme: scheme,
|
||||||
MetricsBindAddress: metricsAddr,
|
MetricsBindAddress: metricsAddr,
|
||||||
Port: 9443,
|
HealthProbeBindAddress: healthAddr,
|
||||||
LeaderElection: enableLeaderElection,
|
Port: 9443,
|
||||||
LeaderElectionID: "305740c0.fluxcd.io",
|
LeaderElection: enableLeaderElection,
|
||||||
Namespace: watchNamespace,
|
LeaderElectionID: "305740c0.fluxcd.io",
|
||||||
Logger: ctrl.Log,
|
Namespace: watchNamespace,
|
||||||
|
Logger: ctrl.Log,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setupLog.Error(err, "unable to start manager")
|
setupLog.Error(err, "unable to start manager")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
probes.SetupChecks(mgr, setupLog)
|
||||||
|
|
||||||
if storageAdvAddr == "" {
|
if storageAdvAddr == "" {
|
||||||
storageAdvAddr = determineAdvStorageAddr(storageAddr, setupLog)
|
storageAdvAddr = determineAdvStorageAddr(storageAddr, setupLog)
|
||||||
}
|
}
|
||||||
storage := mustInitStorage(storagePath, storageAdvAddr, setupLog)
|
storage := mustInitStorage(storagePath, storageAdvAddr, setupLog)
|
||||||
go startFileServer(storage.BasePath, storageAddr, setupLog)
|
|
||||||
|
|
||||||
if err = (&controllers.GitRepositoryReconciler{
|
if err = (&controllers.GitRepositoryReconciler{
|
||||||
Client: mgr.GetClient(),
|
Client: mgr.GetClient(),
|
||||||
|
@ -195,6 +200,15 @@ func main() {
|
||||||
}
|
}
|
||||||
// +kubebuilder:scaffold:builder
|
// +kubebuilder:scaffold:builder
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
// Block until our controller manager is elected leader. We presume our
|
||||||
|
// entire process will terminate if we lose leadership, so we don't need
|
||||||
|
// to handle that.
|
||||||
|
<-mgr.Elected()
|
||||||
|
|
||||||
|
startFileServer(storage.BasePath, storageAddr, setupLog)
|
||||||
|
}()
|
||||||
|
|
||||||
setupLog.Info("starting manager")
|
setupLog.Info("starting manager")
|
||||||
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
|
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
|
||||||
setupLog.Error(err, "problem running manager")
|
setupLog.Error(err, "problem running manager")
|
||||||
|
@ -203,6 +217,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func startFileServer(path string, address string, l logr.Logger) {
|
func startFileServer(path string, address string, l logr.Logger) {
|
||||||
|
l.Info("starting file server")
|
||||||
fs := http.FileServer(http.Dir(path))
|
fs := http.FileServer(http.Dir(path))
|
||||||
http.Handle("/", fs)
|
http.Handle("/", fs)
|
||||||
err := http.ListenAndServe(address, nil)
|
err := http.ListenAndServe(address, nil)
|
||||||
|
|
Loading…
Reference in New Issue