Make it easier for users to understand the reason for scheduling decisions and pending pods #20064
Description
I was debating whether to file separate issues, but they're similar enough that one issue is probably better.
(1) Make it easier for users to understand the reason for scheduling decisions. For example, when a pod is scheduled, attach an annotation to it with something like this (suggested by @brendandburns )
Node-1: Priority = 1234 [1000 (zonal spreading) + 200 (machine spreading) + 30 (balanced resources) + 4 (image affinity)]
Node-2: Priority = 1014 [ ... ]
Node-3: Failed predicate XXX
...
Node-N: ...
Also possibly add a kubectl porcelain command to easily fetch this information about a pod.
(2) Make it easier for users to understand the reason for pending pods. This is really the same as (1) except all of the nodes will be marked as "Failed predicate XXX" and the pod in question will be pending rather than running.
In both cases it is also useful to present some kind of summary -- it's not possible to extract a useful signal by reading thousands of lines of this information per pod, as you'd have in a large cluster. There are some fairly obvious ways to summarize the information, but I don't want to stifle anyone's creativity by suggesting anything specific here. :)