Merge pull request #1720 from steveperry-53/debug-message
Write new task: Determining the Reason for Pod Failure.
This commit is contained in:
@@ -15,6 +15,14 @@ toc:
|
|||||||
section:
|
section:
|
||||||
- title: Using Port Forwarding to Access Applications in a Cluster
|
- title: Using Port Forwarding to Access Applications in a Cluster
|
||||||
path: /docs/tasks/access-application-cluster/port-forward-access-application-cluster/
|
path: /docs/tasks/access-application-cluster/port-forward-access-application-cluster/
|
||||||
|
|
||||||
|
|
||||||
|
- title: Debugging Applications in a Cluster
|
||||||
|
section:
|
||||||
|
- title: Determining the Reason for Pod Failure
|
||||||
|
path: /docs/tasks/debug-application-cluster/determine-reason-pod-failure/
|
||||||
|
|
||||||
|
|
||||||
- title: Accessing the Kubernetes API
|
- title: Accessing the Kubernetes API
|
||||||
section:
|
section:
|
||||||
- title: Using an HTTP Proxy to Access the Kubernetes API
|
- title: Using an HTTP Proxy to Access the Kubernetes API
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
{% capture overview %}
|
||||||
|
|
||||||
|
This page shows how to write and read a Container
|
||||||
|
termination message.
|
||||||
|
|
||||||
|
Termination messages provide a way for containers to write
|
||||||
|
information about fatal events to a location where it can
|
||||||
|
be easily retrieved and surfaced by tools like dashboards
|
||||||
|
and monitoring software. In most cases, information that you
|
||||||
|
put in a termination message should also be written to
|
||||||
|
the general
|
||||||
|
[Kubernetes logs](/docs/user-guide/logging/).
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
|
||||||
|
{% capture prerequisites %}
|
||||||
|
|
||||||
|
{% include task-tutorial-prereqs.md %}
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
|
||||||
|
{% capture steps %}
|
||||||
|
|
||||||
|
### Writing and reading a termination message
|
||||||
|
|
||||||
|
In this exercise, you create a Pod that runs one container.
|
||||||
|
The configuration file specifies a command that runs when
|
||||||
|
the container starts.
|
||||||
|
|
||||||
|
{% include code.html language="yaml" file="termination.yaml" ghlink="/docs/tasks/debug-pod-container/termination.yaml" %}
|
||||||
|
|
||||||
|
1. Create a Pod based on the YAML configuration file:
|
||||||
|
|
||||||
|
export REPO=https://raw.githubusercontent.com/kubernetes/kubernetes.github.io/master
|
||||||
|
kubectl create -f $REPO/docs/tasks/debug-pod-container/termination.yaml
|
||||||
|
|
||||||
|
In the YAML file, in the `cmd` and `args` fields, you can see that the
|
||||||
|
container sleeps for 10 seconds and then writes "Sleep expired" to
|
||||||
|
the `/dev/termination-log` file. After the container writes
|
||||||
|
the "Sleep expired" message, it terminates.
|
||||||
|
|
||||||
|
1. Display information about the Pod:
|
||||||
|
|
||||||
|
kubectl get pod termination-demo
|
||||||
|
|
||||||
|
Repeat the preceding command until the Pod is no longer running.
|
||||||
|
|
||||||
|
1. Display detailed information about the Pod:
|
||||||
|
|
||||||
|
kubectl get pod --output=yaml
|
||||||
|
|
||||||
|
The output includes the "Sleep expired" message:
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
...
|
||||||
|
lastState:
|
||||||
|
terminated:
|
||||||
|
containerID: ...
|
||||||
|
exitCode: 0
|
||||||
|
finishedAt: ...
|
||||||
|
message: |
|
||||||
|
Sleep expired
|
||||||
|
...
|
||||||
|
|
||||||
|
1. Use a Go template to filter the output so that it includes
|
||||||
|
only the termination message:
|
||||||
|
|
||||||
|
```
|
||||||
|
{% raw %} kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"{% endraw %}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting the termination log file
|
||||||
|
|
||||||
|
By default Kubernetes retrieves termination messages from
|
||||||
|
`/dev/termination-log`. To change this to a different file,
|
||||||
|
specify a `terminationMessagePath` field for your Container.
|
||||||
|
|
||||||
|
For example, suppose your Container writes termination messages to
|
||||||
|
`/tmp/my-log`, and you want Kubernetes to retrieve those messages.
|
||||||
|
Set `terminationMessagePath` as shown here:
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: msg-path-demo
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: msg-path-demo-container
|
||||||
|
image: debian
|
||||||
|
terminationMessagePath: "/tmp/my-log"
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% capture whatsnext %}
|
||||||
|
|
||||||
|
* See the `terminationMessagePath` field in
|
||||||
|
[Container](/docs/api-reference/v1/definitions#_v1_container).
|
||||||
|
* Learn about [retrieving logs](/docs/user-guide/logging/).
|
||||||
|
* Learn about [Go templates](https://golang.org/pkg/text/template/).
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
|
||||||
|
{% include templates/task.md %}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: termination-demo
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: termination-demo-container
|
||||||
|
image: debian
|
||||||
|
command: ["/bin/sh"]
|
||||||
|
args: ["-c", "sleep 10 && echo Sleep expired > /dev/termination-log"]
|
||||||
Reference in New Issue
Block a user