code: func evictionMessage(resourceToReclaim v1.ResourceName, pod *v1.Pod, stats statsFunc) (message string, annotations map[string]string) {
  	annotations = make(map[string]string)
  	message = fmt.Sprintf(nodeLowMessageFmt, resourceToReclaim)
  	containers := []string{}
  	containerUsage := []string{}
  	podStats, ok := stats(pod)
  	if !ok {
  		return
  	}
  	for _, containerStats := range podStats.Containers {
  		for _, container := range pod.Spec.Containers {
  			if container.Name == containerStats.Name {
  				requests := container.Resources.Requests[resourceToReclaim]
  				var usage *resource.Quantity
  				switch resourceToReclaim {
  				case v1.ResourceEphemeralStorage:
  					if containerStats.Rootfs != nil && containerStats.Rootfs.UsedBytes != nil && containerStats.Logs != nil && containerStats.Logs.UsedBytes != nil {
  						usage = resource.NewQuantity(int64(*containerStats.Rootfs.UsedBytes+*containerStats.Logs.UsedBytes), resource.BinarySI)
  					}
  				case v1.ResourceMemory:
  					if containerStats.Memory != nil && containerStats.Memory.WorkingSetBytes != nil {
  						usage = resource.NewQuantity(int64(*containerStats.Memory.WorkingSetBytes), resource.BinarySI)
  					}
  				}
  				if usage != nil && usage.Cmp(requests) > 0 {
  					message += fmt.Sprintf(containerMessageFmt, container.Name, usage.String(), requests.String())
  					containers = append(containers, container.Name)
  					containerUsage = append(containerUsage, usage.String())
  				}
  			}
  		}
  	}
  	annotations[OffendingContainersKey] = strings.Join(containers, ",")
  	annotations[OffendingContainersUsageKey] = strings.Join(containerUsage, ",")
  	annotations[StarvedResourceKey] = string(resourceToReclaim)
  	return
  }
docs: // evictionMessage constructs a useful message about why an eviction occurred, and annotations to provide metadata about the eviction