K8S SIGTERM
Graceful Shutdown
λλΆλΆμ μλ²/μμ§μ ꡬνν λ, 무μ€λ¨ λ°°ν¬μ νΉμ μμ μ’ λ£μμ μ μμ μΌλ‘ μ’ λ£λλλ‘ νλ κ²μ΄ μ’λ€.
Graceful shutdown μ νλ‘κ·Έλ¨μ΄ μ’ λ£λ λ μ΅λν Side effect κ° μλλ‘ λ‘μ§λ€μ μ κ°λ¬΄λ¦¬νκ³ μ’ λ£νλλ‘ νλ κ²μ λ»νλ€.
λ‘μ§μ΄ μ§νλκ³ μλ μμ€μ νλ‘μΈμ€κ° μ’ λ£λμ΄λ²λ¦¬λ©΄ μ²λ¦¬μ€μΈ λ°μ΄ν°κ° μ¦λ°ν μλ μκ³ , μ΄λκΉμ§ μ²λ¦¬μ€μ λ©μΆμλμ§ μΆμ νκΈ° νλ€μ΄μ§λ κ²½μ°λ μλ€.
λ³΄ν΅ SIGTERM μ μ΄μ©ν΄μ ꡬννλ€. μλλ graceful shutdown μ μν΄ Go μμ μ£Όλ‘ μ¬μ©νλ λ°©λ²μ΄λ€.
func main() {
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
<-stop
// ...
}
μμ κ°μ΄ ꡬννλ©΄, SIGINT μ SIGTERM μ νΈκ° μμλ λ°λ‘ μ’ λ£λλ κ²μ΄ μλλΌ Catch ν΄μ μ΄ν λ‘μ§μ μ΄μ΄κ°κ² λ€λ λ»μ΄λ€.
μ΅κ·Ό νμ¬μμ EKS νκ²½μμ λ€μκ³Ό κ°μ μν©μ΄ μμλ€.
A μλ²λ multi pod λ‘ λμνλ©°, μΌλ°μ μΌλ‘ 3κ°μ podκ° νμ λμν¨.
μ΄ λ, νλμ pod μμλ§ νΉμ μμ μ μνν΄μΌ νκ³ , ν΄λΉ pod κ° μ’ λ£λμ§ μλ ν λ€λ₯Έ pod λ κ·Έ μμ μ μλνλ©΄ μλ¨.
μ΄λ₯Ό 보μ₯νκΈ° μν΄ redis μ SETNX λ₯Ό μ΄μ©ν΄ λ½μ μ§λ λ°©μ.
μμ μ μννλ μλ²λ SIGTERM μ νΈλ₯Ό λ°μΌλ©΄ ν΄λΉ λ½μ μμ νκ³
os.Exit(1)
μ’ λ£.
λ¬Έμ λ μ¬κΈ°μ μμλλλ°, pod κ° κ΅μ²΄λλ©΄μ ν΄λΉ μμ μ μννμ§ λͺ»νκ³ λ°λ‘ μ’ λ£λμλ€.
μ μ΄μ λ‘κ·Έμ‘°μ°¨λ μ°νμ§ μμκΈ°λλ¬Έμ, SIGKILL μ λ°μκ²μΌλ‘ 보μλ€.
k8s λ SIGTERM μ 보λΈμ§ 30μ΄κ° μ§λλ ν΄λΉ 컨ν μ΄λκ° μ’ λ£λμ§ μμΌλ©΄ SIGKILLμ 보λΈλ€.
μλ²κ° SIGTERM μ λ°μ§ λͺ»νλ€κ³ κ°μ νκ³ λλ²κΉ μ μμνλ€.
μ SIGTERM μ λͺ»λ°μμκΉ?
μ°μ μλ λͺ λ Ήμ΄λ₯Ό μ΄μ©ν΄μ μ€νμ€μΈ pod μμ μνλ₯Ό 체ν¬ν΄λ³΄κΈ°λ‘ νλ€.
kubectl exec -it "..." -- /bin/sh
$ > ps -ef
νμΈν΄λ³΄λ μ΄μν μ μ΄ λ³΄μλ€.
1λ² νλ‘μΈμ€κ° /bin/sh ./run
1λ² νλ‘μΈμ€λ₯Ό λΆλͺ¨λ‘ κ°μ§λ μμ νλ‘μΈμ€ /bin/bash ./server
1λ² νλ‘μΈμ€μ μμ£Ό(μμ μμ νλ‘μΈμ€) ./server
./server λ μ»΄νμΌ ν λμ¨ outfile (binary)
k8s λ SIGTERM μ 1λ² νλ‘μΈμ€μ 보λΈλ€.
λ΄ μλ²λ μμ£Ό νλ‘μΈμ€κ° λμ΄μκΈ° λλ¬Έμ λ°μ§ λͺ»ν κ²μ΄κ³ , Dockerfile μ νμΈν΄λ³΄λ νμ¬μ λͺ¨λ μλ²λ μλμ κ°μ΄ μ€νλκ³ μμλ€.
...
CMD ./run
run
μ΄λΌλ μ€ν¬λ¦½νΈλ₯Ό CMD λ₯Ό μ΄μ©ν΄μ μ€ννκΈ° λλ¬Έμ, 1λ² νλ‘μΈμ€κ° /bin/sh κ° λλ κ².
μ¬μ€ ν΄λΉ μ€ν¬λ¦½νΈλ λ κ±°μμ κ°κΉκ³ νλ‘μΈμ€ μ€ν μΈμ μν μ΄ μμ μμκΈ° λλ¬Έμ μλμ κ°μ΄ λ°κΎΈκ³ μ€νν΄λ³΄μλ€.
...
ENTRYPOINT ./server
μμ κ°μ΄ ENTRYPOINT λ‘ μ€ννκ² λλ©΄ 1λ² νλ‘μΈμ€κ° λμ μλ²κ° λκΈ° λλ¬Έμ, SIGTERM μ λ°μ μ μκ² λλ€.
μ¬μ€ ν΄κ²° λ°©λ²μΌλ‘ Helm chart μμ preStop
λ±μ μ΄μ©ν΄ SIGTERM μ μ νν κΉλ μΆμμ§λ§, κ΅³μ΄ κ·Έλ΄ νμκ° μλ μΆμ΄μ νμλ μμ κ°μ΄ ν΄κ²°νλ€.
ν
μ€νΈ νκ³ μΆλ€λ©΄ μ§μ λ°°ν¬λ₯Ό λ€μ ν΄λ΄λ λκ³ kubectl delete pod ββ¦β
컀맨λλ₯Ό μ€νν΄μ λ‘κ·Έλ₯Ό μ΄ν΄λ΄λ λκ³ , deployment λ₯Ό μμ νλ©΄μ ν
μ€νΈ νλκ°β¦ λ λ°©λ²μ΄μΌ λ§μ κ² κ°λ€.
νΈν λ°©μλλ‘ νμ.
Last updated