From a6aad1591b5701e0322fe36932d9882a747e018d Mon Sep 17 00:00:00 2001 From: Random-Liu Date: Thu, 6 Oct 2016 12:08:14 -0700 Subject: [PATCH] Make sure GetPodStatus can get statuses of all containers in a pod. --- .../kuberuntime/kuberuntime_container.go | 12 +++++++----- pkg/kubelet/kuberuntime/kuberuntime_manager.go | 17 ++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go index 852f80ce87b..6d3776a787b 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -35,8 +35,9 @@ import ( "k8s.io/kubernetes/pkg/kubelet/dockershim" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/qos" + "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" - "k8s.io/kubernetes/pkg/types" + kubetypes "k8s.io/kubernetes/pkg/types" utilruntime "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/term" @@ -115,7 +116,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb } // getContainerLogsPath gets log path for container. -func getContainerLogsPath(containerName string, podUID types.UID) string { +func getContainerLogsPath(containerName string, podUID kubetypes.UID) string { return path.Join(podLogsRootDirectory, string(podUID), fmt.Sprintf("%s.log", containerName)) } @@ -345,10 +346,11 @@ func getTerminationMessage(status *runtimeApi.ContainerStatus, kubeStatus *kubec return message } -// getKubeletContainerStatuses gets all containers' status for the pod sandbox. -func (m *kubeGenericRuntimeManager) getKubeletContainerStatuses(podSandboxID string) ([]*kubecontainer.ContainerStatus, error) { +// getPodContainerStatuses gets all containers' statuses for the pod. +func (m *kubeGenericRuntimeManager) getPodContainerStatuses(uid kubetypes.UID, name, namespace string) ([]*kubecontainer.ContainerStatus, error) { + // Select all containers of the given pod. containers, err := m.runtimeService.ListContainers(&runtimeApi.ContainerFilter{ - PodSandboxId: &podSandboxID, + LabelSelector: map[string]string{types.KubernetesPodUIDLabel: string(uid)}, }) if err != nil { glog.Errorf("ListContainers error: %v", err) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 7d48c79cd63..e6f02d65809 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -876,15 +876,14 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp UID: uid, }, }) - glog.V(4).Infof("getSandboxIDByPodUID got sandbox IDs %q for pod %q(UID:%q)", podSandboxIDs, podFullName, string(uid)) + glog.V(4).Infof("getSandboxIDByPodUID got sandbox IDs %q for pod %q", podSandboxIDs, podFullName) sandboxStatuses := make([]*runtimeApi.PodSandboxStatus, len(podSandboxIDs)) - containerStatuses := []*kubecontainer.ContainerStatus{} podIP := "" for idx, podSandboxID := range podSandboxIDs { podSandboxStatus, err := m.runtimeService.PodSandboxStatus(podSandboxID) if err != nil { - glog.Errorf("PodSandboxStatus for pod (uid:%v, name:%s, namespace:%s) error: %v", uid, name, namespace, err) + glog.Errorf("PodSandboxStatus of sandbox %q for pod %q error: %v", podSandboxID, podFullName, err) return nil, err } sandboxStatuses[idx] = podSandboxStatus @@ -893,13 +892,13 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp if idx == 0 && podSandboxStatus.GetState() == runtimeApi.PodSandBoxState_READY { podIP = m.determinePodSandboxIP(namespace, name, podSandboxStatus) } + } - statuses, err := m.getKubeletContainerStatuses(podSandboxID) - if err != nil { - glog.Errorf("getKubeletContainerStatuses for sandbox %s failed: %v", podSandboxID, err) - return nil, err - } - containerStatuses = append(containerStatuses, statuses...) + // Get statuses of all containers visible in the pod. + containerStatuses, err := m.getPodContainerStatuses(uid, name, namespace) + if err != nil { + glog.Errorf("getPodContainerStatuses for pod %q failed: %v", podFullName, err) + return nil, err } return &kubecontainer.PodStatus{