func GenerateDeploy()

in deploy/kubernetes/operator/pkg/controller/sync/coordinator/coordinator.go [195:291]


func GenerateDeploy(rss *unifflev1alpha1.RemoteShuffleService, index int) *appsv1.Deployment {
	name := GenerateNameByIndex(rss, index)

	podSpec := corev1.PodSpec{
		HostNetwork:        *rss.Spec.Coordinator.HostNetwork,
		ServiceAccountName: utils.GenerateCoordinatorName(rss),
		Tolerations:        rss.Spec.Coordinator.Tolerations,
		Volumes:            rss.Spec.Coordinator.Volumes,
		NodeSelector:       rss.Spec.Coordinator.NodeSelector,
		Affinity:           rss.Spec.Coordinator.Affinity,
		ImagePullSecrets:   rss.Spec.ImagePullSecrets,
	}
	configurationVolume := corev1.Volume{
		Name: controllerconstants.ConfigurationVolumeName,
		VolumeSource: corev1.VolumeSource{
			ConfigMap: &corev1.ConfigMapVolumeSource{
				LocalObjectReference: corev1.LocalObjectReference{
					Name: rss.Spec.ConfigMapName,
				},
				DefaultMode: pointer.Int32(0777),
			},
		},
	}
	podSpec.Volumes = append(podSpec.Volumes, configurationVolume)
	if podSpec.HostNetwork {
		podSpec.DNSPolicy = corev1.DNSClusterFirstWithHostNet
	}

	defaultLabels := map[string]string{
		"app": name,
	}
	deploy := &appsv1.Deployment{
		ObjectMeta: metav1.ObjectMeta{
			Name:      name,
			Namespace: rss.Namespace,
			Labels:    defaultLabels,
		},
		Spec: appsv1.DeploymentSpec{
			Selector: &metav1.LabelSelector{
				MatchLabels: defaultLabels,
			},
			Replicas: rss.Spec.Coordinator.Replicas,
			Template: corev1.PodTemplateSpec{
				ObjectMeta: metav1.ObjectMeta{
					Labels: make(map[string]string),
				},
				Spec: podSpec,
			},
		},
	}
	for k, v := range rss.Spec.Coordinator.Labels {
		deploy.Spec.Template.Labels[k] = v
	}
	for k, v := range defaultLabels {
		deploy.Spec.Template.Labels[k] = v
	}

	// set runtimeClassName
	if rss.Spec.Coordinator.RuntimeClassName != nil {
		deploy.Spec.Template.Spec.RuntimeClassName = rss.Spec.Coordinator.RuntimeClassName
	}

	// add custom annotations
	annotations := map[string]string{}
	for key, value := range rss.Spec.Coordinator.Annotations {
		annotations[key] = value
	}
	deploy.Spec.Template.Annotations = annotations

	// add init containers, the main container and other containers.
	deploy.Spec.Template.Spec.InitContainers = util.GenerateInitContainers(rss.Spec.Coordinator.RSSPodSpec)
	containers := []corev1.Container{*generateMainContainer(rss)}
	containers = append(containers, rss.Spec.Coordinator.SidecarContainers...)
	deploy.Spec.Template.Spec.Containers = containers

	// add configMap volume to save exclude nodes.
	configMapVolume := corev1.Volume{
		Name: controllerconstants.ExcludeNodesFile,
		VolumeSource: corev1.VolumeSource{
			ConfigMap: &corev1.ConfigMapVolumeSource{
				LocalObjectReference: corev1.LocalObjectReference{
					Name: utils.GenerateCoordinatorName(rss),
				},
				DefaultMode: pointer.Int32(0777),
			},
		},
	}
	deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes, configMapVolume)
	// add hostPath volumes for coordinators.
	hostPathMounts := rss.Spec.Coordinator.HostPathMounts
	logHostPath := rss.Spec.Coordinator.LogHostPath
	deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes,
		util.GenerateHostPathVolumes(hostPathMounts, logHostPath, name)...)

	util.AddOwnerReference(&deploy.ObjectMeta, rss)
	return deploy
}