아티클 관련 제품: TwinReader
들어가며
- Gunicorn에 대해 알아보겠습니다.
Gunicorn이란?
- 등장 배경
▪ Client의 요청이 다양, 복잡해지면서 동적인 파일에 대한 요청이 늘어남에 따라 Aplication server가 등장하게 되었습니다.
▪ 파이썬 스크립트의 Object 형식과 HTTP 의 text형식의 서로 요청 받는 형식이 달라 이에 대한 처리 문제가 발생되어
등장하게 되었습니다.
- gunicorn
▪ 파이썬의 Web Server Gateway interface (WSGI)를 구현하는 HTTP server입니다.
▪ Gunicorn.config.py에서 python code로 작성하거나 command line 명령어 인자로 실행 가능합니다. - Web Server Gateway interface (WSGI)
▪ 웹 서버 소프트웨어와 파이썬으로 작성된 웹 응용 프로그램 간의 표준 인터페이스입니다.
ERROR
- gunicorn과 관련하여 장애가 발생하였을 경우 다양한 발생 원인과 장애가 존재합니다.
- 여기서 다룰 ERROR의 경우 아래 2가지 상황이 동시에 발생 되었을 때입니다.
① 시스템 사용량 확인 가능한 top 명령어로 조회하였을 때 비정상적인 gunicorn 사용량이 보이며
top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 26441 root 20 0 16.4g 5.1g 1.4g S 0.3 4.0 8:16.04 gunicorn 26171 root 20 0 17.0g 5.0g 1.5g S 0.3 4.0 8:19.49 gunicorn 26398 root 20 0 17.1g 4.9g 1.5g S 0.3 3.9 8:15.46 gunicorn 26345 root 20 0 15.5g 4.9g 1.4g S 0.3 3.9 8:14.05 gunicorn 26256 root 20 0 15.8g 4.9g 1.4g S 0.3 3.9 8:14.39 gunicorn 26302 root 20 0 16.1g 4.9g 1.4g S 0.0 3.9 8:13.92 gunicorn 26140 root 20 0 11.5g 721552 609884 S 0.0 0.5 9:16.75 tritonserver 15336 root 20 0 11.5g 715908 609116 S 0.0 0.5 8:55.17 tritonserver 4181 root 20 0 575688 469660 71220 S 1.0 0.4 76:35.23 kube-apiserver 10254 systemd+ 20 0 2524064 424088 34824 S 0.0 0.3 2:08.99 mysqld 1039 root 20 0 457392 285160 275968 S 0.0 0.2 0:35.77 systemd-journal 15426 root 20 0 3388892 270196 39716 S 0.0 0.2 7:49.22 python3 2955138 root 20 0 1205336 179820 48556 S 0.0 0.1 0:12.33 node 1655 root 20 0 8451408 164704 53532 S 2.3 0.1 210:08.69 dockerd 1665 root 20 0 5339800 136496 63720 S 2.0 0.1 137:25.17 kubelet 4250 root 20 0 219320 113404 51668 S 0.3 0.1 52:56.08 kube-controller 2955425 root 20 0 659840 98940 30984 S 0.0 0.1 0:02.34 node 13630 root 20 0 1567952 98892 46276 S 0.0 0.1 1:47.91 python3 4328 root 20 0 10.1g 98516 21844 S 0.7 0.1 37:58.23 etcd 2955439 root 20 0 659840 98452 30984 S 0.0 0.1 0:02.46 node 2955432 root 20 0 659828 95836 30924 S 0.0 0.1 0:02.44 node 13629 root 20 0 1567952 94248 45680 S 0.0 0.1 1:48.47 python3
② 생성되는 pod의 비정상적인 증가
kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE twinreader core-client-7d9ccd8d74-brrrd 1/1 Running 1 8d twinreader core-server-classification-deployment-678dd7d488-fc7m2 1/1 Running 1 8d twinreader core-server-gpu-0-deployment-99dc8d8df-6tjft 0/1 Evicted 0 92s twinreader core-server-gpu-1-deployment-85f6d68878-sbmtb 0/1 Evicted 0 89s twinreader core-server-gpu-1-deployment-99dc8d8df-6tjft 0/1 Evicted 0 81s twinreader core-server-gpu-0-deployment-85f6d68878-sbmtb 0/1 Evicted 0 78s twinreader core-server-gpu-1-deployment-99dc8d8df-6tjft 0/1 Evicted 0 67s twinreader core-server-gpu-0-deployment-85f6d68878-sbmtb 0/1 Evicted 0 54s twinreader core-server-gpu-0-deployment-99dc8d8df-6tjft 0/1 Evicted 0 44s twinreader core-server-gpu-1-deployment-85f6d68878-sbmtb 0/1 Evicted 0 28s twinreader core-server-gpu-0-deployment-99dc8d8df-6tjft 0/1 Pending 0 15s twinreader core-server-gpu-1-deployment-85f6d68878-sbmtb 0/1 Pending 0 12s twinreader fs-deployment-78996664f4-4xzgh 1/1 Running 2 132d twinreader gunicorn-post-test-deploy-8b565fff6-hsghq 1/1 Running 1 14d twinreader ingress-nginx-admission-create-fllnk 0/1 Completed 0 135d twinreader ingress-nginx-admission-patch-x79v4 0/1 Completed 0 135d twinreader ingress-nginx-controller-7586f485b7-9mtwx 1/1 Running 2 135d twinreader mgr-deployment-7b54cb98fb-rklkw 1/1 Running 1 8d twinreader mysql-59f96bbcb8-t9qw7 1/1 Running 2 134d twinreader test-core-deployment-7489647d98-brqwc 1/1 Running 1 11d twinreader webui-deployment-8db895bd4-zcqhb 1/1 Running 1 11d
상태를 검색하였을 때 위의 2가지와 같다면 운영되는 서비스를 재 구동 시켜주시기 바랍니다.
- pod 삭제하기
kubectl delete pod [삭제 할 pod name]
- pod 목록 확인
kubectl get pod --all-namespaces
마무리
- python script(= Web Application)가 Web Server와 통신하기 위한 인터페이스로 Web Server 요청을 해석하여 python application으로 요청을 전달하는 역할을 하는 gunicorn에 대해 알아 보았습니다.
- pod 관련 Evicted Error 사항은 pod 상태가 evicted 일 때를 참고하여 주시기 바랍니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.