instruction: Explain Attach Handlers to Container Lifecycle Events
output: Attach Handlers to Container Lifecycle Events
  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. A Container may specify one handler per event.
  Before you begin
  You need to have a Kubernetes cluster, and the kubectl command-line tool must
  be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a
  cluster, you can create one by using
  minikube
  or you can use one of these Kubernetes playgrounds:
  iximiuz Labs
  Killercoda
  KodeKloud
  Play with Kubernetes
  To check the version, enter
  kubectl version
  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:
  pods/lifecycle-events.yaml
  apiVersion
  kind
  metadata
  name
  lifecycle-demo
  spec
  containers
  name
  lifecycle-demo-container
  image
  nginx
  lifecycle
  postStart
  exec
  command
  "/bin/sh"
  "-c"
  "echo Hello from the postStart handler > /usr/share/message"
  preStop
  exec
  command
  "/bin/sh"
  "-c"
  "nginx -s quit; while killall -0 nginx; do sleep 1; done"
  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 apply -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
  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
  Pod Lifecycle
  Note:
  Kubernetes only sends the preStop event when a Pod or a container in the Pod is
  terminated
  This means that the preStop hook is not invoked when the Pod is
  completed
  About this limitation, please see
  Container hooks
  for the detail.
  What's next
  Learn more about
  Container lifecycle hooks
  Learn more about the
  lifecycle of a Pod
  Lifecycle
  Container
  terminationGracePeriodSeconds
  PodSpec
  Was this page helpful?
  Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on
  Stack Overflow
  Open an issue in the
  GitHub Repository
  if you want to
  report a problem
  suggest an improvement
  Last modified August 24, 2023 at 6:38 PM PST:
  Use code_sample shortcode instead of code shortcode (e8b136c3b3)