Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functionally revert #12894 #14413

Merged
merged 1 commit into from Sep 23, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
70 changes: 16 additions & 54 deletions pkg/kubelet/kubelet.go
Expand Up @@ -2508,65 +2508,32 @@ func GetPhase(spec *api.PodSpec, info []api.ContainerStatus) api.PodPhase {
}
}

func readyPodCondition(isPodReady bool, reason, message string, existingStatus *api.PodStatus) []api.PodCondition {
currentTime := unversioned.Now()
condition := api.PodCondition{
Type: api.PodReady,
}
if isPodReady {
condition.Status = api.ConditionTrue
} else {
condition.Status = api.ConditionFalse
}
condition.LastProbeTime = currentTime
condition.Reason = reason
condition.Message = message
if existingStatus != nil {
if api.IsPodReadyConditionTrue(*existingStatus) != isPodReady {
// condition has transitioned, update transition time.
condition.LastTransitionTime = currentTime
} else {
// retain the existing transition time.
existingCondition := api.GetPodReadyCondition(*existingStatus)
if existingCondition != nil {
condition.LastTransitionTime = existingCondition.LastTransitionTime
}
}
}
return []api.PodCondition{condition}
}
// Disabled LastProbeTime/LastTranitionTime for Pods to avoid constantly sending pod status
// update to the apiserver. See http://issues.k8s.io/14273. Functional revert of a PR #12894

// getPodReadyCondition returns ready condition if all containers in a pod are ready, else it returns an unready condition.
func getPodReadyCondition(spec *api.PodSpec, containerStatuses []api.ContainerStatus, existingStatus *api.PodStatus) []api.PodCondition {
// Find if all containers are ready or not.
ready := []api.PodCondition{{
Type: api.PodReady,
Status: api.ConditionTrue,
}}
notReady := []api.PodCondition{{
Type: api.PodReady,
Status: api.ConditionFalse,
}}
if containerStatuses == nil {
return readyPodCondition(false, "UnknownContainerStatuses", "", existingStatus)
return notReady
}
unknownContainers := []string{}
unreadyContainers := []string{}
for _, container := range spec.Containers {
if containerStatus, ok := api.GetContainerStatus(containerStatuses, container.Name); ok {
if !containerStatus.Ready {
unreadyContainers = append(unreadyContainers, container.Name)
return notReady
}
} else {
unknownContainers = append(unknownContainers, container.Name)
return notReady
}
}
unreadyMessages := []string{}
if len(unknownContainers) > 0 {
unreadyMessages = append(unreadyMessages, fmt.Sprintf("containers with unknown status: %s", unknownContainers))
}
if len(unreadyContainers) > 0 {
unreadyMessages = append(unreadyMessages, fmt.Sprintf("containers with unready status: %s", unreadyContainers))
}
unreadyMessage := strings.Join(unreadyMessages, ", ")
if unreadyMessage != "" {
// return unready status.
return readyPodCondition(false, fmt.Sprint("ContainersNotReady"), unreadyMessage, existingStatus)
}
// return ready status.
return readyPodCondition(true, "", "", existingStatus)
return ready
}

// By passing the pod directly, this method avoids pod lookup, which requires
Expand All @@ -2580,8 +2547,7 @@ func (kl *Kubelet) generatePodStatus(pod *api.Pod) (api.PodStatus, error) {

podFullName := kubecontainer.GetPodFullName(pod)
glog.V(3).Infof("Generating status for %q", podFullName)
existingStatus, hasExistingStatus := kl.statusManager.GetPodStatus(pod.UID)
if hasExistingStatus {
if existingStatus, hasExistingStatus := kl.statusManager.GetPodStatus(pod.UID); hasExistingStatus {
// This is a hacky fix to ensure container restart counts increment
// monotonically. Normally, we should not modify given pod. In this
// case, we check if there are cached status for this pod, and update
Expand Down Expand Up @@ -2633,11 +2599,7 @@ func (kl *Kubelet) generatePodStatus(pod *api.Pod) (api.PodStatus, error) {
}
}
}
if hasExistingStatus {
podStatus.Conditions = append(podStatus.Conditions, getPodReadyCondition(spec, podStatus.ContainerStatuses, &existingStatus)...)
} else {
podStatus.Conditions = append(podStatus.Conditions, getPodReadyCondition(spec, podStatus.ContainerStatuses, nil)...)
}
podStatus.Conditions = append(podStatus.Conditions, getPodReadyCondition(spec, podStatus.ContainerStatuses, nil /* unused */)...)

if !kl.standaloneMode {
hostIP, err := kl.GetHostIP()
Expand Down
7 changes: 2 additions & 5 deletions pkg/kubelet/kubelet_test.go
Expand Up @@ -1757,11 +1757,8 @@ func getNotReadyStatus(cName string) api.ContainerStatus {
}
func getReadyCondition(status api.ConditionStatus, transitionTime unversioned.Time, reason, message string) []api.PodCondition {
return []api.PodCondition{{
Type: api.PodReady,
Status: status,
LastTransitionTime: transitionTime,
Reason: reason,
Message: message,
Type: api.PodReady,
Status: status,
}}
}

Expand Down