오늘의 인기 글
최근 글
최근 댓글
Today
Total
11-15 01:02
관리 메뉴

우노

[Kubernetes] 간단한 일반 서버, 도커, 쿠버네티스 비교 실습 본문

DevOps/Kubernetes

[Kubernetes] 간단한 일반 서버, 도커, 쿠버네티스 비교 실습

운호(Noah) 2022. 2. 16. 23:18

들어가기 앞서,

  • 해당 포스트는 인프런의 ‘대세는 쿠버네티스 [초급~중급]’ 강의를 기반으로 작성되었으며,
  • [기초편] 기초 다지기 - ‘Getting started - Kubernetes - 실습’ 에 해당하는 내용입니다.
  • Nodejs 앱을 일반 서버, 도커, 쿠버네티스 환경에서 각각 실행시켜보며,
  • 각각의 차이점에 대해서 이해할 수 있습니다.

실습 순서

  • Linux 를 사용한 Nodejs 앱 배포
  • Docker 를 사용한 Nodejs 앱 배포
  • Kubernetes 를 사용한 Nodejs 앱 배포

Linux 를 사용한 Nodejs 앱 배포

  • 전체적인 구조

  • CentOS 에 nodejs 설치

      curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
      yum -y install nodejs
  • hello.js 앱 생성

      var http = require('http');
      var content = function(req, resp) {
       resp.end("Hello Kubernetes!" + "\n");
       resp.writeHead(200);
      }
      var w = http.createServer(content);
      w.listen(8000);
  • nodejs 를 사용해 hello.js 앱 실행

      node hello.js
  • 정상적인 서버 구동 확인

      "서버IP":8000

Docker 를 사용한 Nodejs 앱 배포

  • 전체적인 구조

  • Docker 설치

    • 환경에 따라 설치 진행
  • Dockerfile 작성

      # Nodejs slim 버전이 설치되어있는 Base Image
      FROM node:slim
      # 컨테이너 포트
      EXPOSE 8000
      # Host 에서 Container 내부로 hello.js 앱 복사
      COPY hello.js .
      # 컨테이너를 실행할 때, hello.js 앱 실행
      CMD node hello.js
  • Docker Hub Site 가입

    • https://hub.docker.com/
      • 가입 후, Image 를 저장할 Repository 생성
      • 해당 포스트에서는, yms04089 계정의 hello Repository 에 이미지를 저장
  • Dockerfile 을 Image 로 빌드

      # 현재 Directory 에 있는 Dockerfile 을 Image 로 빌드
      docker build -t yms04089/hello .
    
      # 생성된 Image 확인
      docker images  
    • -t : [이미지를 저장할 DockerHub 의 레파지토리명/이미지명:버전]
  • Image 로 Container 생성

      # yms04089/hello Image 를 사용해 hello 라는 이름의 Container 를 생성하고, 
      # Host 에 8100 포트로 접근될 경우, 8000 번 컨테이너로 포트포워딩
      docker run --name hello -d -p 8100:8000 yms04089/hello
    
      # 생성된 Container 확인
      docker ps
    • --name : 생성할 Container 명
    • -d : Container를 백그라운드로 계속 실행시키기 위한 설정
    • -p : 포트 포워딩 설정
  • Container 접속

      # hello Container 접속
      docker exec -it hello /bin/bash
    • -it : Container 실행 시, /bin/bash 상태로 접근하기 위한 설정
  • 정상적인 서버 구동 확인

      "서버IP":8100
  • Container 에서 나온 뒤, Host 에 존재하는 Docker Image 를 Docker Hub 에 Push

      docker login
      # Docker Hub 의 Username 입력
      # Docker Hub 의 Password 입력
      docker push yms04089/hello

Kubernetes 를 사용한 Nodejs 앱 배포

  • 전체적인 구조

  • Kubernetes 설치

    • 환경 별 Kubernetes 클러스터 구축
      • 추후 포스팅 예정
  • Pod 생성을 위한 yaml 파일 작성

      apiVersion: v1
      kind: Pod                        # Pod 를 위한 yaml 파일
      metadata:
        name: hello-pod                # Pod 이름
        labels:
          app: hello                   # Service 와 매칭하기 위한 label
      spec:
        containers:
        - name: hello-container        # Pod 내부에 생성할 Container 명
          image: yms04089/hello        # 컨테이너 생성에 사용할 Image
          ports:
          - containerPort: 8000        # Container 포트
  • Pod 를 외부에서 접근할 수 있도록하는 Service 를, yaml 파일을 통해 생성 (v1.22)

      apiVersion: v1
      kind: Service                    # Service 를 위한 yaml 파일
      metadata:
        name: hello-svc                # Service 이름
      spec:
        selector:                  
          app: hello                   # Pod 와 매칭하기 위한 label
        ports:
          - port: 8200                 # 외부 접근용 포트
            targetPort: 8000           # Container 포트
        externalIPs: 
        - 192.168.56.30                # 외부 접근 IP

참고

Comments