티스토리 뷰

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 install	nodejs npm curl git
RUN npm cache clean -f && npm install -g n && npm update -g && n 16.17.1
WORKDIR /home
RUN git clone https://github.com/ash0814/SC_backend.git
WORKDIR /home/SC_backend
RUN npm install

CMD ["node","server.js"]		# 컨테이너 생성 후 바로 서버를 실행하도록 하기

 
하지만 왜인지 클러스터 내 백엔드 컨테이너는 생성했을 때 서버가 실행되지 않고 직접 클러스터의 bash로 들어가 수동으로 `node server.js` 명령어를 입력해야지만 서버가 실행됐다. 
이를 해결하기 위해 백엔드의 deployment 매니페스트 파일을 검토해 봤고 놓친 부분을 확인했다. 
 
나는 이전에 백엔드 파드가 실행되자마자 바로 죽는 CrashLoopBackOff 에러를 해결하기 위해 디플로이먼트 매니페스트 파일에 아래와 같은 명령어를 추가했었다. 

imagePullPolicy : Always
command: ['sh', '-c', 'echo The app is running! && sleep 3600']

당시에는 검색 결과 백엔드 서버 파드가 가동되자마자 실행할 프로세스가 없어서 발생하는 오류라는 것을 알게 되어 백엔드 파드를 실행 후 잠시 재워두는 방식으로 에러를 임시로 막았는데, 이것 때문에 컨테이너가 sleep 상태여서 서버 실행 명령어를 실행할 수 없었던 것이다. 해당 명령어를 주석처리하고 디플로이먼트 삭제 후 다시 apply를 해줬더니 이제는 서버가 자동으로 잘 실행된다. 
 
🔗해당 오류를 다뤘었던 포스팅

 

[Kubernetes] 백엔드 파드 status : CrashLoopBackOff 에러 해결 방법

Backend Pod : CrashLoopBackOff 에러 Backend 디플로이먼트를 작성하고 apply 한 뒤, 생성된 파드들을 띄워보니 모두 정상적인 'Running' status가 아닌 ' CrashLoopBackOff'로 비정상적인 가동을 하고 있었다. 이렇게

yuejeong.tistory.com

 


2. 데이터베이스에 시크릿 오브젝트 추가

민감한 정보를 다루는 데이터베이스의 경우 보안이 필요한 데이터를 암호화해 저장할 수 있는 시크릿 오브젝트를 꼭 적용해야 한다. 그래서 우리 데이터베이스의 root 비밀번호를 암호화해 시크릿 파일에 저장해 두고 이를 데이터베이스 statefulset에 적용해 보았다.
 
[1] 비밀번호 base64로 인코딩
매니페스트로 시크릿을 등록할 때는 텍스트를 base64로 인코딩해야 한다. 명령어는 다음과 같다.

echo -n '[비밀번호]' | base64

명령어를 입력해서 나오는 인코딩 값을 시크릿 매니페스트 파일에 복사해 붙여 넣어 준다.
 
[2] 시크릿 매니페스트 작성 및 배포
sc-db-secret.yml

#secret
apiVersion: v1
kind: Secret
metadata:
  name: sc-db-secret
type: Opaque
data:
  password: [비밀번호를 base64로 인코딩한 값]

 
[3] Statefulset 매니페스트 파일에 시크릿을 사용하도록 수정
database.yml

.... 
 containers:
      - name: mysql
        image: youjung819/sc_database:3.0    ## Docker Hub MySQL 리포지터리 지정
        env:
          - name: MYSQL_ROOT_PASSWORD # 환경 변수
            valueFrom:
              secretKeyRef:
                name: sc-db-secret    ## 시크릿명
                key: password         ## 시크릿 키
....

 
이제 웹소켓만 해결하면 된다!
배포까지 얼마 안남았다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함