Make sure GetPodStatus can get statuses of all containers in a pod.
This commit is contained in:
@@ -35,8 +35,9 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/dockershim"
|
"k8s.io/kubernetes/pkg/kubelet/dockershim"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/events"
|
"k8s.io/kubernetes/pkg/kubelet/events"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/qos"
|
"k8s.io/kubernetes/pkg/kubelet/qos"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/util/format"
|
"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"
|
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/util/term"
|
"k8s.io/kubernetes/pkg/util/term"
|
||||||
@@ -115,7 +116,7 @@ func (m *kubeGenericRuntimeManager) startContainer(podSandboxID string, podSandb
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getContainerLogsPath gets log path for container.
|
// 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))
|
return path.Join(podLogsRootDirectory, string(podUID), fmt.Sprintf("%s.log", containerName))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,10 +346,11 @@ func getTerminationMessage(status *runtimeApi.ContainerStatus, kubeStatus *kubec
|
|||||||
return message
|
return message
|
||||||
}
|
}
|
||||||
|
|
||||||
// getKubeletContainerStatuses gets all containers' status for the pod sandbox.
|
// getPodContainerStatuses gets all containers' statuses for the pod.
|
||||||
func (m *kubeGenericRuntimeManager) getKubeletContainerStatuses(podSandboxID string) ([]*kubecontainer.ContainerStatus, error) {
|
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{
|
containers, err := m.runtimeService.ListContainers(&runtimeApi.ContainerFilter{
|
||||||
PodSandboxId: &podSandboxID,
|
LabelSelector: map[string]string{types.KubernetesPodUIDLabel: string(uid)},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("ListContainers error: %v", err)
|
glog.Errorf("ListContainers error: %v", err)
|
||||||
|
|||||||
@@ -876,15 +876,14 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp
|
|||||||
UID: uid,
|
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))
|
sandboxStatuses := make([]*runtimeApi.PodSandboxStatus, len(podSandboxIDs))
|
||||||
containerStatuses := []*kubecontainer.ContainerStatus{}
|
|
||||||
podIP := ""
|
podIP := ""
|
||||||
for idx, podSandboxID := range podSandboxIDs {
|
for idx, podSandboxID := range podSandboxIDs {
|
||||||
podSandboxStatus, err := m.runtimeService.PodSandboxStatus(podSandboxID)
|
podSandboxStatus, err := m.runtimeService.PodSandboxStatus(podSandboxID)
|
||||||
if err != nil {
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
sandboxStatuses[idx] = podSandboxStatus
|
sandboxStatuses[idx] = podSandboxStatus
|
||||||
@@ -893,13 +892,13 @@ func (m *kubeGenericRuntimeManager) GetPodStatus(uid kubetypes.UID, name, namesp
|
|||||||
if idx == 0 && podSandboxStatus.GetState() == runtimeApi.PodSandBoxState_READY {
|
if idx == 0 && podSandboxStatus.GetState() == runtimeApi.PodSandBoxState_READY {
|
||||||
podIP = m.determinePodSandboxIP(namespace, name, podSandboxStatus)
|
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{
|
return &kubecontainer.PodStatus{
|
||||||
|
|||||||
Reference in New Issue
Block a user