in pkg/providers/imagefamily/bootstrap/aksbootstrap.go [277:353]
func (a AKS) applyOptions(nbv *NodeBootstrapVariables) {
nbv.KubeCACrt = *a.CABundle
nbv.APIServerName = a.APIServerName
nbv.TLSBootstrapToken = a.KubeletClientTLSBootstrapToken
nbv.TenantID = a.TenantID
nbv.SubscriptionID = a.SubscriptionID
nbv.Location = a.Location
nbv.ResourceGroup = a.ResourceGroup
nbv.UserAssignedIdentityID = a.KubeletIdentityClientID
nbv.NetworkPlugin = a.NetworkPlugin
nbv.NetworkPolicy = a.NetworkPolicy
nbv.KubernetesVersion = a.KubernetesVersion
nbv.KubeBinaryURL = kubeBinaryURL(a.KubernetesVersion, a.Arch)
nbv.VNETCNILinuxPluginsURL = fmt.Sprintf("%s/azure-cni/v1.4.32/binaries/azure-vnet-cni-linux-%s-v1.4.32.tgz", globalAKSMirror, a.Arch)
nbv.CNIPluginsURL = fmt.Sprintf("%s/cni-plugins/v1.1.1/binaries/cni-plugins-linux-%s-v1.1.1.tgz", globalAKSMirror, a.Arch)
// calculated values
nbv.NetworkSecurityGroup = fmt.Sprintf("aks-agentpool-%s-nsg", a.ClusterID)
nbv.RouteTable = fmt.Sprintf("aks-agentpool-%s-routetable", a.ClusterID)
if a.GPUNode {
nbv.GPUNode = true
nbv.ConfigGPUDriverIfNeeded = true
nbv.GPUDriverVersion = a.GPUDriverVersion
nbv.GPUDriverType = a.GPUDriverType
nbv.GPUImageSHA = a.GPUImageSHA
}
// merge and stringify labels
kubeletLabels := lo.Assign(getBaseKubeletNodeLabels(), a.Labels)
getAgentbakerGeneratedLabels(a.ResourceGroup, kubeletLabels)
subnetParts, _ := utils.GetVnetSubnetIDComponents(a.SubnetID)
nbv.Subnet = subnetParts.SubnetName
nbv.VirtualNetworkResourceGroup = subnetParts.ResourceGroupName
nbv.VirtualNetwork = subnetParts.VNetName
nbv.KubeletNodeLabels = strings.Join(lo.MapToSlice(kubeletLabels, func(k, v string) string {
return fmt.Sprintf("%s=%s", k, v)
}), ",")
// Assign Per K8s version kubelet flags
minorVersion := semver.MustParse(a.KubernetesVersion).Minor
kubeletFlagsBase := getBaseKubeletFlags()
if minorVersion < 31 {
kubeletFlagsBase["--keep-terminated-pod-volumes"] = "false"
}
credentialProviderURL := CredentialProviderURL(a.KubernetesVersion, a.Arch)
if credentialProviderURL != "" { // use OOT credential provider
nbv.CredentialProviderDownloadURL = credentialProviderURL
kubeletFlagsBase["--image-credential-provider-config"] = "/var/lib/kubelet/credential-provider-config.yaml"
kubeletFlagsBase["--image-credential-provider-bin-dir"] = "/var/lib/kubelet/credential-provider"
} else { // Versions Less than 1.30
// we can make this logic smarter later when we have more than one
// for now just adding here.
kubeletFlagsBase["--feature-gates"] = "DisableKubeletCloudCredentialProviders=false"
kubeletFlagsBase["--azure-container-registry-config"] = "/etc/kubernetes/azure.json"
}
// merge and stringify taints
kubeletFlags := lo.Assign(kubeletFlagsBase)
if len(a.Taints) > 0 {
taintStrs := lo.Map(a.Taints, func(taint v1.Taint, _ int) string { return taint.ToString() })
kubeletFlags = lo.Assign(kubeletFlags, map[string]string{"--register-with-taints": strings.Join(taintStrs, ",")})
}
nodeclaimKubeletConfig := KubeletConfigToMap(a.KubeletConfig)
kubeletFlags = lo.Assign(kubeletFlags, nodeclaimKubeletConfig)
// striginify kubelet flags (including taints)
nbv.KubeletFlags = strings.Join(lo.MapToSlice(kubeletFlags, func(k, v string) string {
return fmt.Sprintf("%s=%s", k, v)
}), " ")
}