
.spec.terminationGracePeriodSeconds 로 설정하여 개별 파드마다 정의는 가능apiVersion: v1
kind: Pod
metadata:
name: random-generator
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
env:
- name: WAIT_FOR_POST_START
value: "true"
lifecycle:
postStart:
exec:
command:
- sh
- -c
- sleep 30 && echo "Wake up!" > /tmp/postStart-donapiVersion: v1
kind: Pod
metadata:
name: random-generator
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
env:
- name: WAIT_FOR_POST_START
value: "true"
lifecycle:
preStop:
httpGet:
port: 8080
path: shutdow| Hook | init container | |
|---|---|---|
| 활성화 단계 | 컨테이너 수명주기 단계 | 파드 수명주기 단계 |
| 시작 단계 동작 | postStart 명령어 | 실행될 초기화 컨테이너 목록 |
| 종료 단계 작업 | preStop 명령어 | 상응하는 기능이 아직 없음 |
| 타이밍 보장 | postStart 명령어는 컨테이너의 ENTRYPOINT와 동시에 실행 | 애플리케이션 컨테이너가 시작되기 전에 모든 초기화 컨테이너는 성공적으로 종료가 완료되어야함 |
| 사용 사례 | 컨테이너 별로 특화된 중요하지 않은 시작/ 정리 종료를 실행 | 컨테이너를 사용해 워크플로우 같은 순차적 작업 수행, 작업 실행을 위해 컨테이너를 재사용 |

#
apiVersion: v1
kind: Pod
metadata:
name: sidecar-container-demo
spec:
containers:
- image: busybox
command: ["/bin/sh"]
args:
[
"-c",
"while true; do echo echo $(date -u) 'Written by busybox sidecar container' >> /var/log/index.html; sleep 5;done",
]
name: sidecar-container
resources: {}
volumeMounts:
- name: var-logs
mountPath: /var/log
lifecycle:
postStart:
httpGet:
path: /index.html
port: 80
host: localhost
scheme: HTTP
- image: nginx
name: main-container
resources: {}
ports:
- containerPort: 80
volumeMounts:
- name: var-logs
mountPath: /usr/share/nginx/html
dnsPolicy: Default
volumes:
- name: var-logs
emptyDir: {}kubectl apply -f ./poststart.yaml
kubectl describe pod/poststart-demo

apiVersion: v1
kind: Pod
metadata:
name: prestop-demo
spec:
terminationGracePeriodSeconds: 40
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- |
echo "[preStop] start $(date)"
sleep 15
echo "[preStop] sending graceful quit to nginx $(date)"
nginx -s quit
dnsPolicy: Default
kubectl apply -f ./prestop.yaml
kubectl logs -f prestop-demo -c nginx-containerkubectl delete pod prestop-demo
사실, 잘 보면, k8s 입장에서는 컨테이너속의 app 이 k8s 에서 요구하는 기능들을 받춰줘야 정상적으로 해결이 되는 건데, 저번주에 다뤘던 probe 와 연관시켜서 말하자면, 만약 probe 에 대응 되는 기능이 컨테이너안의 app 에서 구현되지 않았다면? 그리고, preStop으로 “밖”을 정리할 기회를 만들고, SIGTERM 핸들러로 “앱 안”을 깨끗이 마무리하는 투-스텝 으로 안전하게 마무리 할 수 있도록 하고 있는데 만약 app 에서 이러한 기능을 구현하고 있지않는다면, k8s 에서는 문제가 발생하는 거네요? 현재 컨테이너에서 구동되는 많은 app 들이 컨테이너환경을 고려하지 않고 개발된 app 들도 많을 텐데, 이런 것들은 어떻게 해야 하나요?