Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
e7dcec07
Commit
e7dcec07
authored
Aug 07, 2015
by
Sam Abed
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
show LastTerminationState in kubectl describe pod
Signed-off-by:
Sam Abed
<
samsabed@gmail.com
>
parent
d04fce04
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
74 additions
and
43 deletions
+74
-43
compute-resources.md
docs/user-guide/compute-resources.md
+19
-17
describe.go
pkg/kubectl/describe.go
+32
-26
describe_test.go
pkg/kubectl/describe_test.go
+23
-0
No files found.
docs/user-guide/compute-resources.md
View file @
e7dcec07
...
...
@@ -185,26 +185,30 @@ on the pod you are interested in:
```
console
[12:54:41] $
./cluster/kubectl.sh describe pod simmemleak-hra99
Name: simmemleak-hra99
Namespace: default
Image(s): saadali/simmemleak
Node: kubernetes-minion-tf0f/10.240.216.66
Labels: name=simmemleak
Status: Running
Name:
simmemleak-hra99
Namespace:
default
Image(s):
saadali/simmemleak
Node:
kubernetes-minion-tf0f/10.240.216.66
Labels:
name=simmemleak
Status:
Running
Reason:
Message:
IP: 10.244.2.75
Replication Controllers: simmemleak (1/1 replicas created)
IP:
10.244.2.75
Replication Controllers:
simmemleak (1/1 replicas created)
Containers:
simmemleak:
Image: saadali/simmemleak
Limits:
cpu: 100m
memory: 50Mi
State: Running
Started: Tue, 07 Jul 2015 12:54:41 -0700
Ready: False
Restart Count: 5
cpu: 100m
memory: 50Mi
State: Running
Started: Tue, 07 Jul 2015 12:54:41 -0700
Last Termination State: Terminated
Exit Code: 1
Started: Fri, 07 Jul 2015 12:54:30 -0700
Finished: Fri, 07 Jul 2015 12:54:33 -0700
Ready: False
Restart Count: 5
Conditions:
Type Status
Ready False
...
...
@@ -219,9 +223,7 @@ Events:
The
`Restart Count: 5`
indicates that the
`simmemleak`
container in this pod was terminated and restarted 5 times.
Once
[
#10861
](
http://issue.k8s.io/10861
)
is resolved the reason for the termination of the last container will also be printed in this output.
Until then you can call
`get pod`
with the
`-o template -t ...`
option to fetch the status of previously terminated containers:
You can call
`get pod`
with the
`-o template -t ...`
option to fetch the status of previously terminated containers:
```
console
[13:59:01] $
./cluster/kubectl.sh get pod
-o
template
-t
'{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
simmemleak-60xbc
...
...
pkg/kubectl/describe.go
View file @
e7dcec07
...
...
@@ -500,33 +500,10 @@ func describeContainers(pod *api.Pod, out io.Writer) {
fmt
.
Fprintf
(
out
,
" %s:
\t
%s
\n
"
,
name
,
quantity
.
String
())
}
switch
{
case
state
.
Running
!=
nil
:
fmt
.
Fprintf
(
out
,
" State:
\t
Running
\n
"
)
fmt
.
Fprintf
(
out
,
" Started:
\t
%v
\n
"
,
state
.
Running
.
StartedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
case
state
.
Waiting
!=
nil
:
fmt
.
Fprintf
(
out
,
" State:
\t
Waiting
\n
"
)
if
state
.
Waiting
.
Reason
!=
""
{
fmt
.
Fprintf
(
out
,
" Reason:
\t
%s
\n
"
,
state
.
Waiting
.
Reason
)
}
case
state
.
Terminated
!=
nil
:
fmt
.
Fprintf
(
out
,
" State:
\t
Terminated
\n
"
)
if
state
.
Terminated
.
Reason
!=
""
{
fmt
.
Fprintf
(
out
,
" Reason:
\t
%s
\n
"
,
state
.
Terminated
.
Reason
)
}
if
state
.
Terminated
.
Message
!=
""
{
fmt
.
Fprintf
(
out
,
" Message:
\t
%s
\n
"
,
state
.
Terminated
.
Message
)
}
fmt
.
Fprintf
(
out
,
" Exit Code:
\t
%d
\n
"
,
state
.
Terminated
.
ExitCode
)
if
state
.
Terminated
.
Signal
>
0
{
fmt
.
Fprintf
(
out
,
" Signal:
\t
%d
\n
"
,
state
.
Terminated
.
Signal
)
}
fmt
.
Fprintf
(
out
,
" Started:
\t
%s
\n
"
,
state
.
Terminated
.
StartedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
fmt
.
Fprintf
(
out
,
" Finished:
\t
%s
\n
"
,
state
.
Terminated
.
FinishedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
default
:
fmt
.
Fprintf
(
out
,
" State:
\t
Waiting
\n
"
)
describeStatus
(
"State"
,
state
,
out
)
if
status
.
LastTerminationState
.
Terminated
!=
nil
{
describeStatus
(
"Last Termination State"
,
status
.
LastTerminationState
,
out
)
}
fmt
.
Fprintf
(
out
,
" Ready:
\t
%v
\n
"
,
printBool
(
status
.
Ready
))
fmt
.
Fprintf
(
out
,
" Restart Count:
\t
%d
\n
"
,
status
.
RestartCount
)
fmt
.
Fprintf
(
out
,
" Variables:
\n
"
)
...
...
@@ -555,6 +532,35 @@ func envValueFrom(pod *api.Pod, e api.EnvVar) string {
return
valueFrom
}
func
describeStatus
(
stateName
string
,
state
api
.
ContainerState
,
out
io
.
Writer
)
{
switch
{
case
state
.
Running
!=
nil
:
fmt
.
Fprintf
(
out
,
" %s:
\t
Running
\n
"
,
stateName
)
fmt
.
Fprintf
(
out
,
" Started:
\t
%v
\n
"
,
state
.
Running
.
StartedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
case
state
.
Waiting
!=
nil
:
fmt
.
Fprintf
(
out
,
" %s:
\t
Waiting
\n
"
,
stateName
)
if
state
.
Waiting
.
Reason
!=
""
{
fmt
.
Fprintf
(
out
,
" Reason:
\t
%s
\n
"
,
state
.
Waiting
.
Reason
)
}
case
state
.
Terminated
!=
nil
:
fmt
.
Fprintf
(
out
,
" %s:
\t
Terminated
\n
"
,
stateName
)
if
state
.
Terminated
.
Reason
!=
""
{
fmt
.
Fprintf
(
out
,
" Reason:
\t
%s
\n
"
,
state
.
Terminated
.
Reason
)
}
if
state
.
Terminated
.
Message
!=
""
{
fmt
.
Fprintf
(
out
,
" Message:
\t
%s
\n
"
,
state
.
Terminated
.
Message
)
}
fmt
.
Fprintf
(
out
,
" Exit Code:
\t
%d
\n
"
,
state
.
Terminated
.
ExitCode
)
if
state
.
Terminated
.
Signal
>
0
{
fmt
.
Fprintf
(
out
,
" Signal:
\t
%d
\n
"
,
state
.
Terminated
.
Signal
)
}
fmt
.
Fprintf
(
out
,
" Started:
\t
%s
\n
"
,
state
.
Terminated
.
StartedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
fmt
.
Fprintf
(
out
,
" Finished:
\t
%s
\n
"
,
state
.
Terminated
.
FinishedAt
.
Time
.
Format
(
time
.
RFC1123Z
))
default
:
fmt
.
Fprintf
(
out
,
" %s:
\t
Waiting
\n
"
,
stateName
)
}
}
func
printBool
(
value
bool
)
string
{
if
value
{
return
"True"
...
...
pkg/kubectl/describe_test.go
View file @
e7dcec07
...
...
@@ -172,6 +172,29 @@ func TestDescribeContainers(t *testing.T) {
},
expectedElements
:
[]
string
{
"test"
,
"State"
,
"Terminated"
,
"Ready"
,
"True"
,
"Restart Count"
,
"7"
,
"Image"
,
"image"
,
"Reason"
,
"potato"
,
"Started"
,
"Finished"
,
"Exit Code"
,
"2"
},
},
// Last Terminated
{
container
:
api
.
Container
{
Name
:
"test"
,
Image
:
"image"
},
status
:
api
.
ContainerStatus
{
Name
:
"test"
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{
StartedAt
:
util
.
NewTime
(
time
.
Now
()),
},
},
LastTerminationState
:
api
.
ContainerState
{
Terminated
:
&
api
.
ContainerStateTerminated
{
StartedAt
:
util
.
NewTime
(
time
.
Now
()
.
Add
(
time
.
Second
*
3
)),
FinishedAt
:
util
.
NewTime
(
time
.
Now
()),
Reason
:
"crashing"
,
ExitCode
:
3
,
},
},
Ready
:
true
,
RestartCount
:
7
,
},
expectedElements
:
[]
string
{
"test"
,
"State"
,
"Terminated"
,
"Ready"
,
"True"
,
"Restart Count"
,
"7"
,
"Image"
,
"image"
,
"Started"
,
"Finished"
,
"Exit Code"
,
"2"
,
"crashing"
,
"3"
},
},
// No state defaults to waiting.
{
container
:
api
.
Container
{
Name
:
"test"
,
Image
:
"image"
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment