mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #14413 from gmarek/latency-bug
Functionally revert #12894
This commit is contained in:
commit
d23e3504e4
@ -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 {
|
// Disabled LastProbeTime/LastTranitionTime for Pods to avoid constantly sending pod status
|
||||||
currentTime := unversioned.Now()
|
// update to the apiserver. See http://issues.k8s.io/14273. Functional revert of a PR #12894
|
||||||
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}
|
|
||||||
}
|
|
||||||
|
|
||||||
// getPodReadyCondition returns ready condition if all containers in a pod are ready, else it returns an unready condition.
|
// 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 {
|
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 {
|
if containerStatuses == nil {
|
||||||
return readyPodCondition(false, "UnknownContainerStatuses", "", existingStatus)
|
return notReady
|
||||||
}
|
}
|
||||||
unknownContainers := []string{}
|
|
||||||
unreadyContainers := []string{}
|
|
||||||
for _, container := range spec.Containers {
|
for _, container := range spec.Containers {
|
||||||
if containerStatus, ok := api.GetContainerStatus(containerStatuses, container.Name); ok {
|
if containerStatus, ok := api.GetContainerStatus(containerStatuses, container.Name); ok {
|
||||||
if !containerStatus.Ready {
|
if !containerStatus.Ready {
|
||||||
unreadyContainers = append(unreadyContainers, container.Name)
|
return notReady
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unknownContainers = append(unknownContainers, container.Name)
|
return notReady
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unreadyMessages := []string{}
|
return ready
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// By passing the pod directly, this method avoids pod lookup, which requires
|
// By passing the pod directly, this method avoids pod lookup, which requires
|
||||||
@ -2580,8 +2547,7 @@ func (kl *Kubelet) generatePodStatus(pod *api.Pod) (api.PodStatus, error) {
|
|||||||
|
|
||||||
podFullName := kubecontainer.GetPodFullName(pod)
|
podFullName := kubecontainer.GetPodFullName(pod)
|
||||||
glog.V(3).Infof("Generating status for %q", podFullName)
|
glog.V(3).Infof("Generating status for %q", podFullName)
|
||||||
existingStatus, hasExistingStatus := kl.statusManager.GetPodStatus(pod.UID)
|
if existingStatus, hasExistingStatus := kl.statusManager.GetPodStatus(pod.UID); hasExistingStatus {
|
||||||
if hasExistingStatus {
|
|
||||||
// This is a hacky fix to ensure container restart counts increment
|
// This is a hacky fix to ensure container restart counts increment
|
||||||
// monotonically. Normally, we should not modify given pod. In this
|
// monotonically. Normally, we should not modify given pod. In this
|
||||||
// case, we check if there are cached status for this pod, and update
|
// case, we check if there are cached status for this pod, and update
|
||||||
@ -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, nil /* unused */)...)
|
||||||
podStatus.Conditions = append(podStatus.Conditions, getPodReadyCondition(spec, podStatus.ContainerStatuses, &existingStatus)...)
|
|
||||||
} else {
|
|
||||||
podStatus.Conditions = append(podStatus.Conditions, getPodReadyCondition(spec, podStatus.ContainerStatuses, nil)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !kl.standaloneMode {
|
if !kl.standaloneMode {
|
||||||
hostIP, err := kl.GetHostIP()
|
hostIP, err := kl.GetHostIP()
|
||||||
|
@ -1757,11 +1757,8 @@ func getNotReadyStatus(cName string) api.ContainerStatus {
|
|||||||
}
|
}
|
||||||
func getReadyCondition(status api.ConditionStatus, transitionTime unversioned.Time, reason, message string) []api.PodCondition {
|
func getReadyCondition(status api.ConditionStatus, transitionTime unversioned.Time, reason, message string) []api.PodCondition {
|
||||||
return []api.PodCondition{{
|
return []api.PodCondition{{
|
||||||
Type: api.PodReady,
|
Type: api.PodReady,
|
||||||
Status: status,
|
Status: status,
|
||||||
LastTransitionTime: transitionTime,
|
|
||||||
Reason: reason,
|
|
||||||
Message: message,
|
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user