in perf-tools/framework/app_manager.go [63:133]
func (dam *DeploymentsAppManager) Create(schedulerName string, appInfo *AppInfo) error {
if len(appInfo.RequestInfos) == 0 {
return fmt.Errorf("request info not defined for app %s", appInfo.AppID)
}
for reqIndex, requestInfo := range appInfo.RequestInfos {
// init container
var container apiv1.Container
if len(appInfo.PodSpec.Containers) > 0 {
container = appInfo.PodSpec.Containers[0]
} else {
container = apiv1.Container{}
container.Name = constants.DefaultContainerName
container.Image = constants.DefaultContainerImage
}
if requestInfo.RequestResources != nil {
if container.Resources.Requests == nil {
container.Resources.Requests = apiv1.ResourceList{}
}
for resourceName, resourceValue := range requestInfo.RequestResources {
container.Resources.Requests[apiv1.ResourceName(resourceName)] = resource.MustParse(resourceValue)
}
}
if requestInfo.LimitResources != nil {
if container.Resources.Limits == nil {
container.Resources.Limits = apiv1.ResourceList{}
}
for resourceName, resourceValue := range requestInfo.LimitResources {
container.Resources.Limits[apiv1.ResourceName(resourceName)] = resource.MustParse(resourceValue)
}
}
// init and create deployment
deployment := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Namespace: appInfo.Namespace,
Name: dam.getDeploymentName(appInfo, reqIndex),
},
Spec: appsv1.DeploymentSpec{
Replicas: &requestInfo.Number,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
constants.LabelAppID: appInfo.AppID,
},
},
Template: apiv1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
constants.LabelAppID: appInfo.AppID,
constants.LabelQueue: appInfo.Queue,
},
Annotations: appInfo.PodTemplateSpec.ObjectMeta.Annotations,
},
Spec: apiv1.PodSpec{
SchedulerName: schedulerName,
HostNetwork: appInfo.PodSpec.HostNetwork,
Containers: []apiv1.Container{
container,
},
Tolerations: appInfo.PodSpec.Tolerations,
NodeSelector: appInfo.PodSpec.NodeSelector,
PriorityClassName: requestInfo.PriorityClass,
},
},
},
}
err := dam.kubeClient.CreateDeployment(appInfo.Namespace, deployment)
if err != nil {
return err
}
}
return nil
}