분류 전체보기
Kubernetes 워커노드의 OOM에 의한 클러스터 장애
이번 글에서는 Kubernetes 워커노드에 OOM이 발생하여 모든 워커노드가 연쇄적으로 장애를 일으키는 바람에 쿠버네티스 클러스터가 통째로 먹통이된 사건에 대해서 다뤄볼까합니다. 0. 상황 현재 저는 엘리스파크 라는 토이프로젝트를 진행중에 있습니다. 그리고 엘리스파크의 백엔드를 쿠버네티스 환경에서 운영중이며, 동시에 엘리스파크의 백엔드를 빌드시키는 젠킨스 서버를 모두 쿠버네티스 위에서 운영중에 있습니다. 제가 운영중이던 쿠버네티스 환경은 아래와 같습니다. Amazon EKS (Kubernetes v1.22) 각 워커노드는 t3.medium 인스턴스로 운영중에 있었음 (vcpu 2 + 4Gi Memory) 단일 노드그룹에 워커노드는 min size = 2, desired size = 2, max size..
도커파일 최적화 (Multi-Stage)
이번 글에서는 프로젝트 배포 과정에서 도커파일을 최적화 한 과정에 대해서 다뤄볼까합니다. 제가 글에서 다루는 백엔드는 TypeScript로 작성된 Node Express 프로젝트입니다. 오손도손-백엔드 GitHub - doccimann-personal-projects/osondoson-backend: Repository for osondoson backend Repository for osondoson backend. Contribute to doccimann-personal-projects/osondoson-backend development by creating an account on GitHub. github.com 0. 본격적으로 설명하기 이전에 우선 개발하고, 해당 프로젝트를 런타임으로 올리는..
프로세스의 종료
이번 글에서는 프로세스의 종료, 특히나 Graceful shutdown에 대해서 짧게만 다뤄볼 예정입니다. 0. 프로세스의 완전한 종료란? 프로세스의 종료에 대해서 언급하기 이전에, 프로세스가 어떠한 과정을 통해서 실행되는지에 대해서 아주 간략하게 알아보겠습니다. 스토리지에 있는 프로그램을 메모리에 올린다 이전에 실행된적이 있는 프로세스라면 해당 프로세스에 대응하는 PCB (Process Control Block)을 읽어내서 이전 상태로부터 시작하고, 이전에 실행된적이 없는 프로세스라면 프로그램 코드를 읽어내서 프로세스를 실행한다. 그와 동시에 PCB를 생성한다. 그리고 프로세스는 Ready 상태에 진입한다. 프로세스 스케쥴러에 의해서 CPU에 디스패치가 되면 프로세스는 자신의 작업을 수행합니다. 프로세..
Jenkins on K8S를 설정하며 겪은 일들
최근에 저는 부트캠프 내에서 프로젝트 스터디를 진행하면서 스터디의 DevOps, 그리고 백엔드 파트를 담당하고 있습니다. 그리고 현재는 백엔드 프로젝트를 Kubernetes 환경에서 운영중에 있는데요, 그 과정에서 Jenkins도 Kubernetes에서 관리하기로 결정하였습니다. 이번 글에서는 제가 왜 Jenkins를 Kubernetes로 운영하려고 하는지, 그리고 Jenkins on K8S를 설정하면서 겪은 어려움들을 여러분들께 공유해드리고자합니다. 0. 배경지식 우선 Jenkins on k8s를 설명하기 이전에, Jenkins에 대해서 조금 이야기를 해볼까합니다. 젠킨스는 여러분들도 아시다시피 CI/CD 자동화 도구입니다. 그러므로 젠킨스 agent는 사내의 모든 빌드들을 처리해야하기 때문에 리소스를..