in cmd/aws-k8s-agent/main.go [92:165]
func _main() int {
// Do not add anything before initializing logger
log := logger.Get()
log.Infof("Starting L-IPAMD %s ...", version.Version)
version.RegisterMetric()
enabledPodEni := ipamd.EnablePodENI()
enabledCustomNetwork := ipamd.UseCustomNetworkCfg()
enabledPodAnnotation := ipamd.EnablePodIPAnnotation()
withApiServer := false
// Check API Server Connectivity
if enabledPodEni || enabledCustomNetwork || enabledPodAnnotation {
log.Info("SGP, custom networking or pod annotation feature is in use, waiting for API server connectivity to start IPAMD")
if err := k8sapi.CheckAPIServerConnectivity(); err != nil {
log.Errorf("Failed to check API server connectivity: %s", err)
return 1
} else {
log.Info("API server connectivity established.")
withApiServer = true
}
} else {
log.Infof("Waiting to connect API server for upto %s...", pollTimeout)
// Try a quick check first
if err := k8sapi.CheckAPIServerConnectivityWithTimeout(pollInterval, pollTimeout); err != nil {
log.Warn("Proceeding without API server connectivity, will run background API server connectivity check")
withApiServer = false
} else {
log.Info("API server connectivity established.")
withApiServer = true
}
}
// Create Kubernetes client for API server requests
k8sClient, err := k8sapi.CreateKubeClient(appName)
if err != nil {
log.Errorf("Failed to create kube client: %s", err)
}
// Create EventRecorder for use by IPAMD
if err := eventrecorder.Init(k8sClient, withApiServer); err != nil {
log.Errorf("Failed to create event recorder: %s", err)
log.Warn("Skipping event recorder initialization")
}
ipamContext, err := ipamd.New(k8sClient, withApiServer)
if err != nil {
log.Errorf("Initialization failure: %v", err)
return 1
}
// If not connected to API server yet, start background checks
if !withApiServer {
startBackgroundAPIServerCheck(ipamContext)
}
// Pool manager
go ipamContext.StartNodeIPPoolManager()
if !utils.GetBoolAsStringEnvVar(envDisableMetrics, false) {
// Prometheus metrics
go metrics.ServeMetrics(metricsPort)
}
// CNI introspection endpoints
if !utils.GetBoolAsStringEnvVar(envDisableIntrospection, false) {
go ipamContext.ServeIntrospection()
}
// Start the RPC listener
err = ipamContext.RunRPCHandler(version.Version)
if err != nil {
log.Errorf("Failed to set up gRPC handler: %v", err)
return 1
}
return 0
}