func()

in pkg/api/components.go [11:163]


func (cs *ContainerService) setComponentsConfig(isUpgrade bool) {
	if cs == nil || cs.Properties == nil || cs.Properties.OrchestratorProfile == nil || cs.Properties.OrchestratorProfile.KubernetesConfig == nil {
		return
	}
	kubernetesConfig := cs.Properties.OrchestratorProfile.KubernetesConfig
	defaultSchedulerComponentConfig := KubernetesComponent{
		Name:    common.SchedulerComponentName,
		Enabled: to.BoolPtr(true),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.SchedulerComponentName,
				Image: getComponentDefaultContainerImage(common.SchedulerComponentName, cs),
			},
		},
		Config: map[string]string{
			"command": getSchedulerDefaultCommandString(cs),
		},
	}

	defaultControllerManagerComponentConfig := KubernetesComponent{
		Name:    common.ControllerManagerComponentName,
		Enabled: to.BoolPtr(true),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.ControllerManagerComponentName,
				Image: getComponentDefaultContainerImage(common.ControllerManagerComponentName, cs),
			},
		},
		Config: map[string]string{
			"command": getControllerManagerDefaultCommandString(cs),
		},
	}

	defaultCloudControllerManagerComponentConfig := KubernetesComponent{
		Name:    common.CloudControllerManagerComponentName,
		Enabled: to.BoolPtr(to.Bool(kubernetesConfig.UseCloudControllerManager)),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.CloudControllerManagerComponentName,
				Image: getComponentDefaultContainerImage(common.CloudControllerManagerComponentName, cs),
			},
		},
		Config: map[string]string{
			"command": "\"cloud-controller-manager\"",
		},
	}

	defaultAPIServerComponentConfig := KubernetesComponent{
		Name:    common.APIServerComponentName,
		Enabled: to.BoolPtr(true),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.APIServerComponentName,
				Image: getComponentDefaultContainerImage(common.APIServerComponentName, cs),
			},
		},
		Config: map[string]string{
			"command": getAPIServerDefaultCommandString(cs),
		},
	}

	defaultAddonManagerComponentConfig := KubernetesComponent{
		Name:    common.AddonManagerComponentName,
		Enabled: to.BoolPtr(true),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.AddonManagerComponentName,
				Image: getComponentDefaultContainerImage(common.AddonManagerComponentName, cs),
			},
		},
	}

	defaultAzureKMSProviderComponentConfig := KubernetesComponent{
		Name:    common.AzureKMSProviderComponentName,
		Enabled: to.BoolPtr(to.Bool(kubernetesConfig.EnableEncryptionWithExternalKms)),
		Containers: []KubernetesContainerSpec{
			{
				Name:  common.AzureKMSProviderComponentName,
				Image: getComponentDefaultContainerImage(common.AzureKMSProviderComponentName, cs),
			},
		},
		Config: map[string]string{
			"command": "\"k8s-azure-kms\"",
		},
	}

	defaultComponents := []KubernetesComponent{
		defaultSchedulerComponentConfig,
		defaultControllerManagerComponentConfig,
		defaultCloudControllerManagerComponentConfig,
		defaultAPIServerComponentConfig,
		defaultAddonManagerComponentConfig,
		defaultAzureKMSProviderComponentConfig,
	}
	// Add default component specification, if no user-provided spec exists
	if kubernetesConfig.Components == nil {
		kubernetesConfig.Components = defaultComponents
	} else {
		for _, component := range defaultComponents {
			kubernetesConfig.Components = appendComponentIfNotPresent(kubernetesConfig.Components, component)
		}
	}

	// Honor custom{component}Image fields
	useHyperkube := !common.IsKubernetesVersionGe(cs.Properties.OrchestratorProfile.OrchestratorVersion, "1.17.0")
	for _, component := range defaultComponents {
		if i := GetComponentsIndexByName(kubernetesConfig.Components, component.Name); i > -1 {
			var customComponentImage string
			switch component.Name {
			case common.APIServerComponentName:
				if useHyperkube {
					customComponentImage = kubernetesConfig.CustomHyperkubeImage
				} else {
					customComponentImage = kubernetesConfig.CustomKubeAPIServerImage
				}
			case common.ControllerManagerComponentName:
				if useHyperkube {
					customComponentImage = kubernetesConfig.CustomHyperkubeImage
				} else {
					customComponentImage = kubernetesConfig.CustomKubeControllerManagerImage
				}
			case common.CloudControllerManagerComponentName:
				customComponentImage = kubernetesConfig.CustomCcmImage
			case common.SchedulerComponentName:
				if useHyperkube {
					customComponentImage = kubernetesConfig.CustomHyperkubeImage
				} else {
					customComponentImage = kubernetesConfig.CustomKubeSchedulerImage
				}
			}

			if customComponentImage != "" {
				// Since there is only one container for all Kubernetes components,
				// it is safe to access index 0 of the component's containers
				kubernetesConfig.Components[i].Containers[0].Image = customComponentImage
			}
		}
	}

	// Ensure cloud-controller-manager is enabled on appropriate upgrades for Azure Stack cloud
	if isUpgrade &&
		cs.Properties.IsAzureStackCloud() &&
		to.Bool(cs.Properties.OrchestratorProfile.KubernetesConfig.UseCloudControllerManager) {
		// Force enabling cloud-controller-manager
		if i := GetComponentsIndexByName(kubernetesConfig.Components, common.CloudControllerManagerComponentName); i > -1 {
			kubernetesConfig.Components[i] = defaultCloudControllerManagerComponentConfig
		}
	}

	for _, component := range defaultComponents {
		synthesizeComponentsConfig(kubernetesConfig.Components, component, isUpgrade)
	}
}