전체 글

전체 글

    Redis OOM 장애

    거의 1년만에 아티클을 작성하게 되었는데, 오랜만에 작성하게된 아티클의 주제는 제가 직접 겪어본 Redis OOM으로 인한 장애에 대해서 공유를 해보고자합니다. 해당 아티클의 순서는 아래의 순서로 전개될 예정입니다.Redis OOM이 일어나게 된 배경Redis 아키텍처 돌아보기단기적인 장애 대응 방법최종적인 장애 대응 방법, 그리고 회고글 마무리Redis OOM 장애가 일어나게 된 배경제가 운영하던 백엔드의 API 일부 중에는 Redis를 적극 활용하여 대용량 데이터를 프로세싱하여 클라이언트에게 추천 데이터를 반환해주는 로직이 하나 있었습니다.그리고 API 서버는 ECS 환경에서 운영되어 트래픽이 늘어나거나, 혹은 CPU, MEM 사용량을 관측하여 일정 임계치를 넘어가면 태스크의 개수를 스케일 아웃하도록..

    Docker File System (Overlay2)

    얼마전 회사에서 트러블슈팅을 진행하면서 docker exec 명령어를 이용해서 container의 bash쉘을 연 다음에, 바로 컨테이너 내부의 파일을 변경한 적이 있었습니다. 그런데 저는 여기서 의아한 부분이 하나 있었습니다. 과연 Docker 컨테이너 내부의 파일을 저렇게 바로 변경해도 되는가? 였습니다. 이에 대해서 공부를 하던 중에, Ubuntu의 docker는 기본적인 파일시스템으로 Overlay2를 채택하고 있었고, 또한 Overlay2 스토리지 시스템의 특징으로 인해서 컨테이너 내부의 파일을 바로 변경한다고 해서, 근간이 되는 image의 레이어가 훼손되지는 않는다는 것을 알게되었습니다. Overlay2 스토리지 시스템에 대해서 공부한 내용들을 이 포스트를 통해서 공유드려볼까 합니다. 1. ..

    엘리스 3차 프로젝트 후기 (feat. 엘리스 AI트랙의 끝)

    오랜만에 글을 쓰게 되었습니다. 최근에 엘리스 3차 프로젝트를 하느라 글을 못 쓰고 있던 상황이었는데, 얼마 전에 엘리스 3차 프로젝트가 끝남과 동시에 수료를 하게 되었습니다. 따라서 이번에는 엘리스 3차 프로젝트 후기 및 수료에 대한 소감에 대해서 글을 써보려고합니다. 1. 3차 프로젝트의 팀 구성 엘리스 AI 트랙의 3차 프로젝트는 4월 15일 부터 5월 20일 까지 진행되었습니다. 팀은 4월 15일 정도에 발표가 되었는데, 정말 다행스럽게도(?) 제가 평소에 이 분이랑 같이 팀으로 활동하면 정말 좋겠다... 싶은 분들이 많이 계셔서 이번엔 진짜 엄청난게 나오겠는데? 라는 생각을 무의식적으로 하게되었습니다. 저희 팀은 6인 팀으로, 프론트엔드 3명, 백엔드 3명 이렇게 구성이 되었습니다. 프론트엔드에..

    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는 사내의 모든 빌드들을 처리해야하기 때문에 리소스를..

    내가 쿠버네티스 설정하며 겪은 삽질들 (alb-controller, jenkins, monitoring)

    이번 글에서는 쿠버네티스를 설정하면서 겪은 삽질들에 대해서 다뤄보고자합니다. 해당 글에는 코드를 많이 소개하기 보다는, 원인 및 원인 분석, 해결 방법 위주로 작성해볼 예정입니다. 코드의 경우 필요할 경우 최대한 깃허브 링크로 소개해드릴 예정입니다. 0. EKS 세팅 (feat. Terraform) 우선 저는 Kubernetes 환경을 AWS에서 제공하는 EKS 매니지드 서비스를 사용해보기로 결정하였습니다. 그리고 해당 EKS를 IaC로 관리하기 위해서 terraform 이라는 툴을 사용하였는데요, 해당 코드에 대한 뼈대 코드는 아래의 링크를 참고하시면 되겠습니다. EKS 세팅을 위한 테라폼 코드 GitHub - doccilabs/terraform-codes: Repository for terraform..