우노
[Kubernetes] 간단한 일반 서버, 도커, 쿠버네티스 비교 실습 본문
들어가기 앞서,
- 해당 포스트는 인프런의 ‘대세는 쿠버네티스 [초급~중급]’ 강의를 기반으로 작성되었으며,
- [기초편] 기초 다지기 - ‘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 에 이미지를 저장
- https://hub.docker.com/
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 클러스터 구축
- 추후 포스팅 예정
- 환경 별 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
참고
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] MacOS 에서 VirtualBox 로 Kubernetes Cluster 구성하기 (0) | 2022.02.21 |
---|---|
[Kubernetes] MacOS Kubernetes 및 Dashboard 설치 (0) | 2022.02.20 |
[Kubernetes] VM 과 Container 의 차이 (0) | 2022.02.16 |
[Kubernetes] 쿠버네티스를 사용해야하는 이유 (0) | 2022.02.16 |
[Kubernetes] CKA (Certified Kubernetes Administrator) 자격증이란? (5) | 2022.02.14 |
Comments