mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Describe and get should show init containers
This commit is contained in:
parent
f2008152f4
commit
2a53330700
@ -163,5 +163,28 @@ func PodRequestsAndLimits(pod *Pod) (reqs map[ResourceName]resource.Quantity, li
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// init containers define the minimum of any resource
|
||||||
|
for _, container := range pod.Spec.InitContainers {
|
||||||
|
for name, quantity := range container.Resources.Requests {
|
||||||
|
value, ok := reqs[name]
|
||||||
|
if !ok {
|
||||||
|
reqs[name] = *quantity.Copy()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if quantity.Cmp(value) > 0 {
|
||||||
|
reqs[name] = *quantity.Copy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for name, quantity := range container.Resources.Limits {
|
||||||
|
value, ok := limits[name]
|
||||||
|
if !ok {
|
||||||
|
limits[name] = *quantity.Copy()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if quantity.Cmp(value) > 0 {
|
||||||
|
limits[name] = *quantity.Copy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -524,7 +524,10 @@ func describePod(pod *api.Pod, events *api.EventList) (string, error) {
|
|||||||
}
|
}
|
||||||
fmt.Fprintf(out, "IP:\t%s\n", pod.Status.PodIP)
|
fmt.Fprintf(out, "IP:\t%s\n", pod.Status.PodIP)
|
||||||
fmt.Fprintf(out, "Controllers:\t%s\n", printControllers(pod.Annotations))
|
fmt.Fprintf(out, "Controllers:\t%s\n", printControllers(pod.Annotations))
|
||||||
describeContainers(pod.Spec.Containers, pod.Status.ContainerStatuses, EnvValueRetriever(pod), out, "")
|
if len(pod.Spec.InitContainers) > 0 {
|
||||||
|
describeContainers("Init Containers", pod.Spec.InitContainers, pod.Status.InitContainerStatuses, EnvValueRetriever(pod), out, "")
|
||||||
|
}
|
||||||
|
describeContainers("Containers", pod.Spec.Containers, pod.Status.ContainerStatuses, EnvValueRetriever(pod), out, "")
|
||||||
if len(pod.Status.Conditions) > 0 {
|
if len(pod.Status.Conditions) > 0 {
|
||||||
fmt.Fprint(out, "Conditions:\n Type\tStatus\n")
|
fmt.Fprint(out, "Conditions:\n Type\tStatus\n")
|
||||||
for _, c := range pod.Status.Conditions {
|
for _, c := range pod.Status.Conditions {
|
||||||
@ -782,12 +785,16 @@ func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, descri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Do a better job at indenting, maybe by using a prefix writer
|
// TODO: Do a better job at indenting, maybe by using a prefix writer
|
||||||
func describeContainers(containers []api.Container, containerStatuses []api.ContainerStatus, resolverFn EnvVarResolverFunc, out io.Writer, space string) {
|
func describeContainers(label string, containers []api.Container, containerStatuses []api.ContainerStatus, resolverFn EnvVarResolverFunc, out io.Writer, space string) {
|
||||||
statuses := map[string]api.ContainerStatus{}
|
statuses := map[string]api.ContainerStatus{}
|
||||||
for _, status := range containerStatuses {
|
for _, status := range containerStatuses {
|
||||||
statuses[status.Name] = status
|
statuses[status.Name] = status
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "%sContainers:\n", space)
|
if len(containers) == 0 {
|
||||||
|
fmt.Fprintf(out, "%s%s: <none>\n", space, label)
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(out, "%s%s:\n", space, label)
|
||||||
|
}
|
||||||
for _, container := range containers {
|
for _, container := range containers {
|
||||||
status, ok := statuses[container.Name]
|
status, ok := statuses[container.Name]
|
||||||
nameIndent := ""
|
nameIndent := ""
|
||||||
@ -1037,7 +1044,10 @@ func DescribePodTemplate(template *api.PodTemplateSpec, out io.Writer) {
|
|||||||
if len(template.Spec.ServiceAccountName) > 0 {
|
if len(template.Spec.ServiceAccountName) > 0 {
|
||||||
fmt.Fprintf(out, " Service Account:\t%s\n", template.Spec.ServiceAccountName)
|
fmt.Fprintf(out, " Service Account:\t%s\n", template.Spec.ServiceAccountName)
|
||||||
}
|
}
|
||||||
describeContainers(template.Spec.Containers, nil, nil, out, " ")
|
if len(template.Spec.InitContainers) > 0 {
|
||||||
|
describeContainers("Init Containers", template.Spec.InitContainers, nil, nil, out, " ")
|
||||||
|
}
|
||||||
|
describeContainers("Containers", template.Spec.Containers, nil, nil, out, " ")
|
||||||
describeVolumes(template.Spec.Volumes, out, " ")
|
describeVolumes(template.Spec.Volumes, out, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ func TestDescribeContainers(t *testing.T) {
|
|||||||
ContainerStatuses: []api.ContainerStatus{testCase.status},
|
ContainerStatuses: []api.ContainerStatus{testCase.status},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
describeContainers(pod.Spec.Containers, pod.Status.ContainerStatuses, EnvValueRetriever(&pod), out, "")
|
describeContainers("Containers", pod.Spec.Containers, pod.Status.ContainerStatuses, EnvValueRetriever(&pod), out, "")
|
||||||
output := out.String()
|
output := out.String()
|
||||||
for _, expected := range testCase.expectedElements {
|
for _, expected := range testCase.expectedElements {
|
||||||
if !strings.Contains(output, expected) {
|
if !strings.Contains(output, expected) {
|
||||||
|
@ -594,22 +594,51 @@ func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error {
|
|||||||
reason = pod.Status.Reason
|
reason = pod.Status.Reason
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := len(pod.Status.ContainerStatuses) - 1; i >= 0; i-- {
|
initializing := false
|
||||||
container := pod.Status.ContainerStatuses[i]
|
for i := range pod.Status.InitContainerStatuses {
|
||||||
|
container := pod.Status.InitContainerStatuses[i]
|
||||||
restarts += int(container.RestartCount)
|
switch {
|
||||||
if container.State.Waiting != nil && container.State.Waiting.Reason != "" {
|
case container.State.Terminated != nil && container.State.Terminated.ExitCode == 0:
|
||||||
reason = container.State.Waiting.Reason
|
continue
|
||||||
} else if container.State.Terminated != nil && container.State.Terminated.Reason != "" {
|
case container.State.Terminated != nil:
|
||||||
reason = container.State.Terminated.Reason
|
// initialization is failed
|
||||||
} else if container.State.Terminated != nil && container.State.Terminated.Reason == "" {
|
if len(container.State.Terminated.Reason) == 0 {
|
||||||
if container.State.Terminated.Signal != 0 {
|
if container.State.Terminated.Signal != 0 {
|
||||||
reason = fmt.Sprintf("Signal:%d", container.State.Terminated.Signal)
|
reason = fmt.Sprintf("Init:Signal:%d", container.State.Terminated.Signal)
|
||||||
|
} else {
|
||||||
|
reason = fmt.Sprintf("Init:ExitCode:%d", container.State.Terminated.ExitCode)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
reason = fmt.Sprintf("ExitCode:%d", container.State.Terminated.ExitCode)
|
reason = "Init:" + container.State.Terminated.Reason
|
||||||
|
}
|
||||||
|
initializing = true
|
||||||
|
case container.State.Waiting != nil && len(container.State.Waiting.Reason) > 0 && container.State.Waiting.Reason != "PodInitializing":
|
||||||
|
reason = "Init:" + container.State.Waiting.Reason
|
||||||
|
initializing = true
|
||||||
|
default:
|
||||||
|
reason = fmt.Sprintf("Init:%d/%d", i, len(pod.Spec.InitContainers))
|
||||||
|
initializing = true
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if !initializing {
|
||||||
|
for i := len(pod.Status.ContainerStatuses) - 1; i >= 0; i-- {
|
||||||
|
container := pod.Status.ContainerStatuses[i]
|
||||||
|
|
||||||
|
restarts += int(container.RestartCount)
|
||||||
|
if container.State.Waiting != nil && container.State.Waiting.Reason != "" {
|
||||||
|
reason = container.State.Waiting.Reason
|
||||||
|
} else if container.State.Terminated != nil && container.State.Terminated.Reason != "" {
|
||||||
|
reason = container.State.Terminated.Reason
|
||||||
|
} else if container.State.Terminated != nil && container.State.Terminated.Reason == "" {
|
||||||
|
if container.State.Terminated.Signal != 0 {
|
||||||
|
reason = fmt.Sprintf("Signal:%d", container.State.Terminated.Signal)
|
||||||
|
} else {
|
||||||
|
reason = fmt.Sprintf("ExitCode:%d", container.State.Terminated.ExitCode)
|
||||||
|
}
|
||||||
|
} else if container.Ready && container.State.Running != nil {
|
||||||
|
readyContainers++
|
||||||
}
|
}
|
||||||
} else if container.Ready && container.State.Running != nil {
|
|
||||||
readyContainers++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if pod.DeletionTimestamp != nil {
|
if pod.DeletionTimestamp != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user