생명주기 이벤트에 핸들러 연결하기

생명주기 이벤트에 핸들러 연결하기 (Attach Handlers to Container Lifecycle Events)

이 페이지에서는 컨테이너 수명주기 이벤트에 핸들러를 연결하는 방법을 보여드려요. kubelet은 컨테이너 관리 이벤트에 핸들러를 실행할 수 있어요.

출처: 문서

본문

시작하기 전에 (Before you begin)

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

컨테이너 수명주기 이벤트 핸들러 구성하기 (Configure lifecycle event handlers)

쿠버네티스는 두 가지 컨테이너 수명주기 이벤트를 지원해요.

  • PostStart: 컨테이너가 시작된 직후 실행돼요.
  • PreStop: 컨테이너가 종료되기 직전에 실행돼요.

컨테이너 수명주기 이벤트 핸들러는 파드 스펙의 lifecycle 필드로 구성해요. 다음은 포스트스타트 이벤트 핸들러와 프리스톱 이벤트 핸들러를 모두 가진 예시 파드 매니페스트예요.

apiVersion: v1
kind: Pod
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"]

pods/lifecycle-events.yaml — 이 구성 파일의 파드가 이벤트 핸들러를 어떻게 사용하는지 살펴보죠.

  • postStart 핸들러는 /bin/sh -c "echo Hello from the postStart handler > /usr/share/message" 명령을 실행해요. 컨테이너가 시작된 직후에요. 이 핸들러는 컨테이너에 메시지를 포함하는 /usr/share/message 파일을 만들기 위한 것이에요.
  • preStop 핸들러는 nginx -s quit; while killall -0 nginx; do sleep 1; done 명령을 실행해요. 컨테이너가 종료되기 직전에요. 이 핸들러는 종료되는 nginx 프로세스가 깨끗하게 종료되도록 하기 위한 것이에요.

lifecycle-events.yaml 파일에서 파드를 생성해요.

kubectl apply -f https://k8s.io/examples/pods/lifecycle-events.yaml

파드가 생성되고 컨테이너가 시작된 후에 postStart 핸들러가 실행되는데, 이는 컨테이너에서 메시지 파일을 확인해 볼 수 있어요.

kubectl exec lifecycle-demo -- cat /usr/share/message

출력은 핸들러가 실행됐다는 것을 보여줘요.

Hello from the postStart handler

주의 사항 (Notes)

수명주기 이벤트 핸들러는 성공을 위해 서로 의존하지 않아요.

  • kubelet은 PostStart 핸들러가 성공할 때까지 컨테이너의 status를 RUNNING으로 설정하지 않아요.
  • kubelet은 PreStop 핸들러가 성공할 때까지 파드를 종료하지 않아요.

더 알아보기 (Learn more)