mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Log pods of RS when deployment e2e test fails
This commit is contained in:
parent
6766f11a5b
commit
6ceb221f8e
@ -179,7 +179,7 @@ func GetReplicaCountForReplicaSets(replicaSets []*extensions.ReplicaSet) int {
|
|||||||
|
|
||||||
// Returns the number of available pods corresponding to the given replica sets.
|
// Returns the number of available pods corresponding to the given replica sets.
|
||||||
func GetAvailablePodsForReplicaSets(c clientset.Interface, rss []*extensions.ReplicaSet, minReadySeconds int) (int, error) {
|
func GetAvailablePodsForReplicaSets(c clientset.Interface, rss []*extensions.ReplicaSet, minReadySeconds int) (int, error) {
|
||||||
allPods, err := getPodsForReplicaSets(c, rss)
|
allPods, err := GetPodsForReplicaSets(c, rss)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -189,28 +189,35 @@ func GetAvailablePodsForReplicaSets(c clientset.Interface, rss []*extensions.Rep
|
|||||||
func getReadyPodsCount(pods []api.Pod, minReadySeconds int) int {
|
func getReadyPodsCount(pods []api.Pod, minReadySeconds int) int {
|
||||||
readyPodCount := 0
|
readyPodCount := 0
|
||||||
for _, pod := range pods {
|
for _, pod := range pods {
|
||||||
if api.IsPodReady(&pod) {
|
if IsPodAvailable(&pod, minReadySeconds) {
|
||||||
// Check if we've passed minReadySeconds since LastTransitionTime
|
readyPodCount++
|
||||||
// If so, this pod is ready
|
|
||||||
for _, c := range pod.Status.Conditions {
|
|
||||||
// we only care about pod ready conditions
|
|
||||||
if c.Type == api.PodReady {
|
|
||||||
// 2 cases that this ready condition is valid (passed minReadySeconds, i.e. the pod is ready):
|
|
||||||
// 1. minReadySeconds <= 0
|
|
||||||
// 2. LastTransitionTime (is set) + minReadySeconds (>0) < current time
|
|
||||||
minReadySecondsDuration := time.Duration(minReadySeconds) * time.Second
|
|
||||||
if minReadySeconds <= 0 || !c.LastTransitionTime.IsZero() && c.LastTransitionTime.Add(minReadySecondsDuration).Before(time.Now()) {
|
|
||||||
readyPodCount++
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return readyPodCount
|
return readyPodCount
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPodsForReplicaSets(c clientset.Interface, replicaSets []*extensions.ReplicaSet) ([]api.Pod, error) {
|
func IsPodAvailable(pod *api.Pod, minReadySeconds int) bool {
|
||||||
|
if !api.IsPodReady(pod) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Check if we've passed minReadySeconds since LastTransitionTime
|
||||||
|
// If so, this pod is ready
|
||||||
|
for _, c := range pod.Status.Conditions {
|
||||||
|
// we only care about pod ready conditions
|
||||||
|
if c.Type == api.PodReady {
|
||||||
|
// 2 cases that this ready condition is valid (passed minReadySeconds, i.e. the pod is ready):
|
||||||
|
// 1. minReadySeconds <= 0
|
||||||
|
// 2. LastTransitionTime (is set) + minReadySeconds (>0) < current time
|
||||||
|
minReadySecondsDuration := time.Duration(minReadySeconds) * time.Second
|
||||||
|
if minReadySeconds <= 0 || !c.LastTransitionTime.IsZero() && c.LastTransitionTime.Add(minReadySecondsDuration).Before(time.Now()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPodsForReplicaSets(c clientset.Interface, replicaSets []*extensions.ReplicaSet) ([]api.Pod, error) {
|
||||||
allPods := []api.Pod{}
|
allPods := []api.Pod{}
|
||||||
for _, rs := range replicaSets {
|
for _, rs := range replicaSets {
|
||||||
selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector)
|
selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector)
|
||||||
|
@ -2128,6 +2128,7 @@ func waitForDeploymentStatus(c clientset.Interface, ns, deploymentName string, d
|
|||||||
}
|
}
|
||||||
if totalAvailable < minAvailable {
|
if totalAvailable < minAvailable {
|
||||||
logReplicaSetsOfDeployment(deploymentName, oldRSs, newRS)
|
logReplicaSetsOfDeployment(deploymentName, oldRSs, newRS)
|
||||||
|
logPodsOfReplicaSets(c, allRSs, minReadySeconds)
|
||||||
return false, fmt.Errorf("total pods available: %d, less than the min required: %d", totalAvailable, minAvailable)
|
return false, fmt.Errorf("total pods available: %d, less than the min required: %d", totalAvailable, minAvailable)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2170,6 +2171,19 @@ func logReplicaSetsOfDeployment(deploymentName string, oldRSs []*extensions.Repl
|
|||||||
Logf("New ReplicaSet of deployment %s: %+v", deploymentName, newRS)
|
Logf("New ReplicaSet of deployment %s: %+v", deploymentName, newRS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logPodsOfReplicaSets(c clientset.Interface, rss []*extensions.ReplicaSet, minReadySeconds int) {
|
||||||
|
allPods, err := deploymentutil.GetPodsForReplicaSets(c, rss)
|
||||||
|
if err == nil {
|
||||||
|
for _, pod := range allPods {
|
||||||
|
availability := "not available"
|
||||||
|
if deploymentutil.IsPodAvailable(&pod, minReadySeconds) {
|
||||||
|
availability = "available"
|
||||||
|
}
|
||||||
|
Logf("Pod %s is %s: %+v", pod.Name, availability, pod)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Waits for the number of events on the given object to reach a desired count.
|
// Waits for the number of events on the given object to reach a desired count.
|
||||||
func waitForEvents(c *client.Client, ns string, objOrRef runtime.Object, desiredEventsCount int) error {
|
func waitForEvents(c *client.Client, ns string, objOrRef runtime.Object, desiredEventsCount int) error {
|
||||||
return wait.Poll(poll, 5*time.Minute, func() (bool, error) {
|
return wait.Poll(poll, 5*time.Minute, func() (bool, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user