code: func BuildDaemonSet(name string, podSpec *v1.PodSpec, mutators map[string][]PodSpecMutatorFunc) *apps.DaemonSet {
  
  	// Mutate the PodSpec so it's suitable for self-hosting
  	mutatePodSpec(mutators, name, podSpec)
  
  	// Return a DaemonSet based on that Spec
  	return &apps.DaemonSet{
  		ObjectMeta: metav1.ObjectMeta{
  			Name:      kubeadmconstants.AddSelfHostedPrefix(name),
  			Namespace: metav1.NamespaceSystem,
  			Labels:    BuildSelfhostedComponentLabels(name),
  		},
  		Spec: apps.DaemonSetSpec{
  			Selector: &metav1.LabelSelector{
  				MatchLabels: BuildSelfhostedComponentLabels(name),
  			},
  			Template: v1.PodTemplateSpec{
  				ObjectMeta: metav1.ObjectMeta{
  					Labels: BuildSelfhostedComponentLabels(name),
  				},
  				Spec: *podSpec,
  			},
  			UpdateStrategy: apps.DaemonSetUpdateStrategy{
  				// Make the DaemonSet utilize the RollingUpdate rollout strategy
  				Type: apps.RollingUpdateDaemonSetStrategyType,
  			},
  		},
  	}
  }
docs: // BuildDaemonSet is responsible for mutating the PodSpec and returns a DaemonSet which is suitable for self-hosting