in internal/kubelet/config.go [365:410]
func (k *kubelet) GenerateKubeletConfig() (*kubeletConfig, error) {
// Get the kubelet/kubernetes version to help conditionally enable features
kubeletVersion, err := GetKubeletVersion()
if err != nil {
return nil, err
}
zap.L().Info("Detected kubelet version", zap.String("version", kubeletVersion))
kubeletConfig := defaultKubeletSubConfig()
if err := kubeletConfig.withFallbackClusterDns(&k.nodeConfig.Spec.Cluster); err != nil {
return nil, err
}
if err := kubeletConfig.withOutpostSetup(k.nodeConfig); err != nil {
return nil, err
}
if err := kubeletConfig.withPodInfraContainerImage(k.nodeConfig, kubeletVersion, k.flags); err != nil {
return nil, err
}
kubeletConfig.withVersionToggles(kubeletVersion, k.flags)
if k.nodeConfig.IsHybridNode() {
kubeletConfig.withHybridCloudProvider(k.nodeConfig, k.flags)
kubeletConfig.withHybridNodeLabels(k.nodeConfig, k.flags)
if err := kubeletConfig.withHybridReservedResources(); err != nil {
return nil, err
}
// On Ubuntu, systemd-resolved adds loopback address as nameserver to /etc/resolv.conf
// This causes pods not being able to do successful dns lookups
// Setting Kubelet config to point to the right resolv.conf file
// https://coredns.io/plugins/loop/#troubleshooting-loops-in-kubernetes-clusters
if system.GetOsName() == system.UbuntuOsName {
kubeletConfig.withResolvConf(system.UbuntuResolvConfPath)
}
} else {
if err := kubeletConfig.withNodeIp(k.nodeConfig, k.flags); err != nil {
return nil, err
}
kubeletConfig.withCloudProvider(kubeletVersion, k.nodeConfig, k.flags)
kubeletConfig.withDefaultReservedResources(k.nodeConfig)
}
return &kubeletConfig, nil
}