func()

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
}