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