INNER CODE UNIT · Go

startLeaderElection

kuberhealthy/kuberhealthy · cmd/kuberhealthy/leaderElection.go:43

func startLeaderElection(ctx context.Context, cfg *Config, kubeClient kubernetes.Interface, kh *kuberhealthy.Kuberhealthy) error {
	identity := os.Getenv("POD_NAME")
	if identity == "" {
		identity = GetMyHostname("kuberhealthy")
	}

	lockConfig := resourcelock.ResourceLockConfig{Identity: identity}
	lock, err := resourcelock.New(resourcelock.LeasesResourceLock, cfg.LeaderElectionNamespace, cfg.LeaderElectionName, kubeClient.CoreV1(), kubeClient.CoordinationV1(), lockConfig)
	if err != nil {
		return fmt.Errorf("failed to create leader election lock: %w", err)
	}

	runner := &leaderElectionRunner{kh: kh, identity: identity}
	callbacks := leaderelection.LeaderCallbacks{
		OnStartedLeading: runner.onStartedLeading,
		OnStoppedLeading: runner.onStoppedLeading,
		OnNewLeader:      runner.onNewLeader,
	}

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…