생명주기 이벤트에 핸들러 연결하기
생명주기 이벤트에 핸들러 연결하기 (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 핸들러가 성공할 때까지 파드를 종료하지 않아요.