Merge pull request #273 from fluxcd/start-fs-on-leader-election

This commit is contained in:
Hidde Beydals 2021-02-01 15:13:56 +01:00 committed by GitHub
commit 65bebebb0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 10 deletions

View File

@ -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
View File

@ -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)