in pkg/controllers/podgroup/pg_controller_handler.go [76:131]
func (pg *pgcontroller) createNormalPodPGIfNotExist(pod *v1.Pod) error {
pgName := helpers.GeneratePodgroupName(pod)
if _, err := pg.pgLister.PodGroups(pod.Namespace).Get(pgName); err != nil {
if !apierrors.IsNotFound(err) {
klog.Errorf("Failed to get normal PodGroup for Pod <%s/%s>: %v",
pod.Namespace, pod.Name, err)
return err
}
obj := &scheduling.PodGroup{
ObjectMeta: metav1.ObjectMeta{
Namespace: pod.Namespace,
Name: pgName,
OwnerReferences: newPGOwnerReferences(pod),
Annotations: map[string]string{},
Labels: map[string]string{},
},
Spec: scheduling.PodGroupSpec{
MinMember: 1,
PriorityClassName: pod.Spec.PriorityClassName,
MinResources: calcPGMinResources(pod),
},
Status: scheduling.PodGroupStatus{
Phase: scheduling.PodGroupPending,
},
}
if queueName, ok := pod.Annotations[scheduling.QueueNameAnnotationKey]; ok {
obj.Spec.Queue = queueName
}
if value, ok := pod.Annotations[scheduling.PodPreemptable]; ok {
obj.Annotations[scheduling.PodPreemptable] = value
}
if value, ok := pod.Annotations[scheduling.RevocableZone]; ok {
obj.Annotations[scheduling.RevocableZone] = value
}
if value, ok := pod.Labels[scheduling.PodPreemptable]; ok {
obj.Labels[scheduling.PodPreemptable] = value
}
if value, found := pod.Annotations[scheduling.JDBMinAvailable]; found {
obj.Annotations[scheduling.JDBMinAvailable] = value
} else if value, found := pod.Annotations[scheduling.JDBMaxUnavailable]; found {
obj.Annotations[scheduling.JDBMaxUnavailable] = value
}
if _, err := pg.vcClient.SchedulingV1beta1().PodGroups(pod.Namespace).Create(context.TODO(), obj, metav1.CreateOptions{}); err != nil {
klog.Errorf("Failed to create normal PodGroup for Pod <%s/%s>: %v",
pod.Namespace, pod.Name, err)
return err
}
}
return pg.updatePodAnnotations(pod, pgName)
}