상세 컨텐츠

본문 제목

노드js앱을 컨테이너 배포 플랫폼인 쿠버네티스에 배포하고 실행하기

노드js·자바스크립트

by 김일국 2024. 1. 2. 15:13

본문

지난 시간에는 [노드js앱을 컨테이너기반 도커용 앱으로 실행하기] 작업을 하였다.

이번 시간에는 [노드js앱을 컨테이너 배포 플랫폼인 쿠버네티스에 배포하고 실행하기]로서 미니쿠베(MiniKube)를 사용하는 대신 도커데스크탑에 내장된 kubernetes 메뉴를 이용하여 도커 이미지를 쿠버네티스로 배포하고, 실행하도록 합니다.

-------------------------------------------------------------------------------------------------------------------------------

1. 먼저, 도커데스크탑 Settings 메뉴에서 쿠버네티스를 사용가능하게 설정 후 도커데스크탑을 재 실행 합니다.(아래)

- 위 쿠버네티스 실행 결과 kubernetes running 확인 (아래)

-------------------------------------------------------------------------------------------------------------------------------

- 쿠버네티스용 대시보드는 설치하지 않고, CLI 명령어로만 작동 하겠습니다. 참고로, 이 후 포스트에 있는 K-PaaS 클라우드를 사용하면 쿠버네티스 대시보드 화면을 사용 하실 수 있게 됩니다.

- 참고로, 도커 데스트탑용 대시보드 정보는 여기에서 확인 가능합니다.( https://mydailylogs.tistory.com/120 )

2. 쿠버네티스 배포용 yaml 파일을 사용하여 kubectl apply -f deployments.yaml 명령으로 kubernetes 서비스에 배포한다.(아래 deployments.yaml 파일내용중 containerPort 부분이 80으로 해도 작동됨, 구별하기 위해서 3000으로 넣어 두었음)

# 실행 예 : kubectl apply -f deployments.yaml ,  kubectl delete -f deployments.yaml
# 기술참조: https://learnk8s.io/deploying-nodejs-kubernetes, https://blog.naver.com/techshare/222630235507
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejsboard # kubectl expose deployment nodejsboard --type=NodePort, kubectl delete service nodejsboard -> kubectl get service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodejsboard
  template:
    metadata:
      labels:
        app: nodejsboard
    spec:
      containers:
        - name: nodejsboard
          image: nodejsboard
          imagePullPolicy: Never # Always 는 doker hub에 올린 이미지를 사용할 때
          ports:
            - name: nodejsboard
              hostPort: 80 # Dockerfile 파일의 순서와는 반대이다.
              containerPort: 3000
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: nodejsboard
spec:
  type: LoadBalancer
  ports:
    - name: nodejsboard
      port: 80
      protocol: TCP
  selector:
    app: nodejsboard

- 위 deployments.yaml 파일을 실행(pod생성 및 실행) /삭제(pod삭제 및 중지)하는 화면(아래)

kubectl apply -f deployments.yaml 실행 명령 후 바로 웹으로 접속하지 말고, 3분 정도 기다리면 앱이 실행 됩니다.(위)

 

- 위 내용 중 [Dockerfile 파일의 순서와는 반대이다.] 에 해당하는 부분을 아래 [도커데스크탑]에서 확인 가능하다(아래)

붉은 박스 위 부분이 도커 컨테이너이고, 아래 부분이 쿠버네티스 컨테이너이다. 참고로, 로드밸런서 기능때문에 컨테이너가 2개 발생된다. 실제 이미지 파일은 위 그림의 아래 kubernetes 컨테이너POD인 k8s_nodejsboard_node에 노드js앱 소스가 존재한다. 클릭하면 Files 탭에서 확인 가능하다.

- 위 쿠버네티스 컨테이너에 배포된 부분 80:3000 부분의 링크 아이콘을 클릭하면 아래 처럼 결과가 나온다.(아래)

-------------------------------------------------------------------------------------------------------------------------------

3. 다 확인 되었으면, 마지막으로 컨테이너를 삭제 시킨다. (또는 도커데스크탑 프로그램에서 중지 시킨다.)

 - 삭제명령어: kubectl delete -f deployments.yaml

 - Docker Desktop 프로그램에서 중지해도 자동으로 재 시작 된다. (아래가 기본 값으로 Never는 지원하지 않는다. 그래서 deployments.yaml 파일에는 추가하지 않았다.)

spec:
   restartPolicy: Always # Never : Not Supported

- 쿠버네티스 컨테이너에서 무중단 서비스를 하기 위한 내장된 기능입니다.^^

 

- 오늘 작업한 [ 도커이미지를 생성시키는Dockerfile파일과 쿠버네티스컨테이너를 생성시키는deployments.yaml파일 ] 은 노드js엡 소스에 포함시켜 깃허브에 올려 놓았습니다.(아래)

 - https://github.com/miniplugin/nodejsboard

 

Ps. 오늘작업으로 PC에서 도커데스크탑 프로그램에 내장된 쿠버네티스를 사용한 컨테이너에 노드js앱을 배포해 보았습니다. 앞으로 K-PaaS 컨테이너 플랫폼에도 위 yaml 파일을 수정하여 배포해 보는 시간을 갖겠습니다.

참고로, 지난 포스트에서 기존 노드js앱은 K-PaaS 사이트카라는 애플리케이션 플랫폼(k8s대신 Cloud Foundry 사용)에 배포한 경우 입니다.

- K-PaaS 애플리케이션 플랫폼(사이트카+앱소스zip파일)지원 : 이용신청= https://digitalsolveup.kr/platform.do , 실행화면= https://nodejsboard.apps.emergency-cloudplatform.kr/  

- K-PaaS 컨테이너 플랫폼(쿠버네티스+ 앱소스도커이미지 ) 지원 : 2주이용신청= https://k-paas.or.kr/exp/expApply ,  실행화면= http://playpark.k-paas.org/

- 다양한 public 클라우드에서 쿠베네티스 사용정보(아래 참조 URL)

https://wiki.yowu.dev/ko/Knowledge-base/Kubernetes/kubernetes-on-azure-deploying-clusters-on-microsoft-azure

관련글 더보기

댓글 영역