안녕하세요 쿠버네티스 프로젝트를 진행한 지도 어느덧 3개월이 지났네요. 쿠버네티스 클러스터 구축법을 저도 다시 상기시킬 겸 프로젝트 회고록 겸 정보글을 작성해 보겠습니다. 1. ‘쿠버네티스’ 란? 여러분이 만약 애플리케이션을 컨테이너를 사용해 배포했을 때 가장 중요한 것이 무엇일까요? 무엇보다 애플리케이션을 실행하는 컨테이너의 가동 중지 시간이 없는지, 즉 갑자기 컨테이너가 다운되더라도 고장 난 컨테이너 대신 다른 컨테이너가 자동 실행돼서 뜻하지 않는 서비스 중단 사태가 벌어지지 않도록 신경 써야 합니다. 그럼 이것을 시스템이 자동으로 관리하고 처리해 준다면 좋겠죠? 그걸 구현한 것이 바로 쿠버네티스입니다. 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임워크를 제공합니다. 예를 들면 애플리케이..
1. 실시간 채팅 기능을 위한 웹소켓에서 발생하는 에러 우리 서비스의 주요 기능이기도 한 실시간 대화방은 소켓 통신을 활용해서 구현했다. 클라이언트와 서버는 TCP의 3 way handshake 방식을 사용해서 네트워크를 형성하고, 클라이언트가 메시지를 보내면 해당 메시지를 데이터베이스에 저장하고 Broadcast 하여 대화방에 다른 사용자들에게도 실시간으로 메시지를 던져주는 방식이다. 로컬에서는 분명 잘 작동하던 소켓 통신... 하지만 쿠버네티스에 적용하려니 정말 끝도 없는 오류를 쏟아냈다. 우선 가장 난감했던 것은 ws 프로토콜로 이뤄진 웹소켓 연결 request url인데, http를 고칠 때와 다르게 어떤 url을 써줘야 하는지 여러 번의 실험을 시도해야 했다. 또한 웹소켓 연결 에러가 거의 3초..
1. node server.js 명령어 미실행 오류 해결 백엔드 서버 파드는 생성 후 바로 'node server.js' 명령어를 실행해야 동작하고 프론트 엔드로부터 오는 api request를 받을 수 있다. 그렇기 때문에 도커파일을 아래와 같이 구성하여 컨테이너 생성 후 곧바로 서버 파드가 작동하도록 했다. Backend Dockerfile FROM debian:buster RUN apt-get -y update && apt-get -y upgrade && apt-get -y installnodejs npm curl git RUN npm cache clean -f && npm install -g n && npm update -g && n 16.17.1 WORKDIR /home RUN git clone..
1. Ingress External IP로 접속 시 502 Bad gateway 에러 해결 저번 2주 차 회고에서 인그레스의 external IP로 접속했을 때 프론트엔드 파드 통신조차 동작하지 않았다. (원인은 502 gateway) 원인을 풀어보자면 Ingress ➡️ 프론트엔드 서비스 ➡️ 프론트엔드 파드로 포워딩이 이뤄지지 않은 것인데 구체적으로 어떤 걸 고쳐야 하는지 전혀 알 수 없어서 정말 많이 헤맸다. 크롬의 개발자 도구를 띄워보아도 도움 될만한 힌트는 찾을 수 없었다. 이 과정에서 Kubectl이 제공하는 기능 중 '파드의 로그'를 확인할 수 있는 명령어가 있어서 프론트엔드 파드를 확인해 보았다. kubectl logs -f [파드 명] -f를 붙이면 로그가 실시간으로 출력된다. 여기서 빨..
1. Database를 구성하는 StatefulSet 프론트, 백엔드, 데이터 베이스 각각의 모든 오브젝트 매니페스트 파일을 만들고 실행 한 뒤 파드 로그를 띄웠을 때 백엔드 서버 파드가 가동되자마자 죽는 CrashLoopBackOff 에러가 발생했다. 또한 인그레스와 서비스가 잘 연결됐는지 확인하는 명령어를 실행했을 때 아래와 같이 백엔드 서비스가 빈칸으로 비워져 있었다. 당연히 인그레스의 External IP로 접속하면 오류가 나왔다. 나는 위에서 언급한 이유들로 인해 현재 오류가 백엔드 파드에서 발생했다고 생각했다. 백엔드 파드에서 오류가 발생하는 여러 원인을 생각해 봤는데, 우리가 구성한 백엔드 파드는 DB 파드가 제대로 동작하지 않으면 절대 작동할 수 없다. 또한 백엔드의 디플로이먼트와 서비스 ..
Backend Pod : CrashLoopBackOff 에러 Backend 디플로이먼트를 작성하고 apply 한 뒤, 생성된 파드들을 띄워보니 모두 정상적인 'Running' status가 아닌 ' CrashLoopBackOff'로 비정상적인 가동을 하고 있었다. 이렇게 오류가 나는 파드들의 정확한 원인을 알고 싶다면, kubectl describe pod [파드 명] 명령어를 입력해서 exit code를 확인하면 된다. 문제의 파드에 대한 디테일 정보를 확인해 보니 exit code가 0이다. 이는 보통 백엔드 서버 역할을 하는 컨테이너에서 주로 일어나는 오류인데 '컨테이너가 기동되자마자 실행할 프로세스가 없어서 발생하는 오류'이다. 해결 방법은 디플로이먼트에 아래 명령어를 추가해 컨테이너가 기동 되자..
2023 클라우드 컴퓨팅 1팀 프로젝트 쿠버네티스를 처음 다루면서 정말 많이 헤매고 힘들었다. 아직 진행 중인 미완성 프로젝트지만 더 열심히 해보려고 블로그에 기록해보려고 한다. 프로젝트 최종 발표를 약 일주일 남겨두고 있는 시점, 아직 여기저기서 에러가 터지지만 그래도 여러 가지 시도를 기록해 보겠다! 꼭 완성하자 화이팅 ⚓ 배포할 서비스 설명 및 Github 🔗 배포할 기존 서비스 Source: GitHub - ash0814/sc_chatting Contribute to ash0814/sc_chatting development by creating an account on GitHub. github.com ⚓ 클러스터 구성 우리 서비스는 크게 프론트엔드, 백엔드, 데이터베이스 부분으로 나눌 수 있다...