--- title: Attach Handlers to Container Lifecycle Events content_template: templates/task weight: 140 --- {{% capture overview %}} This page shows how to attach handlers to Container lifecycle events. Kubernetes supports the postStart and preStop events. Kubernetes sends the postStart event immediately after a Container is started, and it sends the preStop event immediately before the Container is terminated. {{% /capture %}} {{% capture prerequisites %}} {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} {{% /capture %}} {{% capture steps %}} ## Define postStart and preStop handlers In this exercise, you create a Pod that has one Container. The Container has handlers for the postStart and preStop events. Here is the configuration file for the Pod: {{< codenew file="pods/lifecycle-events.yaml" >}} In the configuration file, you can see that the postStart command writes a `message` file to the Container's `/usr/share` directory. The preStop command shuts down nginx gracefully. This is helpful if the Container is being terminated because of a failure. Create the Pod: kubectl create -f https://k8s.io/examples/pods/lifecycle-events.yaml Verify that the Container in the Pod is running: kubectl get pod lifecycle-demo Get a shell into the Container running in your Pod: kubectl exec -it lifecycle-demo -- /bin/bash In your shell, verify that the `postStart` handler created the `message` file: root@lifecycle-demo:/# cat /usr/share/message The output shows the text written by the postStart handler: Hello from the postStart handler {{% /capture %}} {{% capture discussion %}} ## Discussion Kubernetes sends the postStart event immediately after the Container is created. There is no guarantee, however, that the postStart handler is called before the Container's entrypoint is called. The postStart handler runs asynchronously relative to the Container's code, but Kubernetes' management of the container blocks until the postStart handler completes. The Container's status is not set to RUNNING until the postStart handler completes. Kubernetes sends the preStop event immediately before the Container is terminated. Kubernetes' management of the Container blocks until the preStop handler completes, unless the Pod's grace period expires. For more details, see [Termination of Pods](/docs/user-guide/pods/#termination-of-pods). {{< note >}} **Note**: Kubernetes only sends the preStop event when a Pod is *terminated*. This means that the preStop hook is not invoked when the Pod is *completed*. This limitation is tracked in [issue #55087](https://github.com/kubernetes/kubernetes/issues/55807). {{< /note >}} {{% /capture %}} {{% capture whatsnext %}} * Learn more about [Container lifecycle hooks](/docs/concepts/containers/container-lifecycle-hooks/). * Learn more about the [lifecycle of a Pod](/docs/concepts/workloads/pods/pod-lifecycle/). ### Reference * [Lifecycle](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#lifecycle-v1-core) * [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) * See `terminationGracePeriodSeconds` in [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) {{% /capture %}}