[k8s] node.js 애플리케이션 쿠버네티스(kubernetes) 클러스터에 디플로이먼트(deployment)로 배포하기
[k8s] node.js 애플리케이션 쿠버네티스(kubernetes) 클러스터에 디플로이먼트(deployment)로 배포하기1. node.js 의 express 모듈을 활용하여 웹서버 app. 만들기 2. node.js 애플리케이션용 도커(Docker) 이미지 생성 3. node.js 애플리케이션용 디플로이먼트 및 서비스 오브젝트 생성 후 쿠버네티스 클러스터에 배포하기
1. node.js 의 express 모듈을 활용하여 웹서버 app. 만들기
express 모듈 설치
xxxxxxxxxx
npm install --save express
"Hello World"를 응답하는
index.js
파일 만들기xxxxxxxxxx
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
web 서버 테스트
xxxxxxxxxx
# node index.js
# curl localhost:3000
Hello World!
2. node.js 애플리케이션용 도커(Docker) 이미지 생성
참고 URL : https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/
node.js 애플리케이션용 Dockerfile 생성
xxxxxxxxxx
FROM node:6.9.2
RUN mkdir /app
WORKDIR /app
COPY index.js .
COPY package.json .
RUN npm install --save
EXPOSE 3000
CMD [ "node", "index.js" ]
도커 이미지 빌드
xxxxxxxxxx
docker build -t november11/node-web-app .
도커 이미지 조회
xxxxxxxxxx
docker image list | grep november11/node-web-app
november11/node-web-app latest 69bee2f636dd 11 months ago 674MB
도커로 이미지 실행한 후 node.js 애플리케이션 테스트
xxxxxxxxxx
$ docker run -p 3000:3000 -d november11/node-web-app
$ docker ps -a | grep november
e9d66a183eb5 november11/node-web-app "node index.js" About a minute ago Up 57 seconds 0.0.0.0:3000->3000/tcp
$ curl localhost:3000
Hello World!
3. node.js 애플리케이션용 디플로이먼트 및 서비스 오브젝트 생성 후 쿠버네티스 클러스터에 배포하기
디플로이먼트 YAML
deployments.yaml
xxxxxxxxxx
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-web-app
labels:
app: node-web-app
spec:
selector:
matchLabels:
app: node-web-app
replicas: 3
template:
metadata:
labels:
app: node-web-app
spec:
containers:
- name: node-web-app
image: november11/node-web-app
imagePullPolicy: Never
ports:
- containerPort: 3000
서비스 YAML 생성
services.yaml
x
apiVersion: v1
kind: Service
metadata:
name: node-web-app
spec:
selector:
app: node-web-app
ports:
- protocol: "TCP"
port: 3000
targetPort: 3000
type: LoadBalancer
디플로이먼트 및 서비스 적용으로 클러스터에 배포
xxxxxxxxxx
$ kubectl apply -f deployments.yaml
$ kubectl apply -f services.yaml
파드 및 서비스 상태 확인
xxxxxxxxxx
$ kubectl get pod | grep node
node-web-app-7fc465b977-6xtst 1/1 Running 0 34m
node-web-app-7fc465b977-ddq94 1/1 Running 0 34m
node-web-app-7fc465b977-v28nx 1/1 Running 0 34m
$ kubectl get services | grep node
node-web-app LoadBalancer 10.104.160.213 localhost 3000:31793/TCP 125m
'k8s' 카테고리의 다른 글
[k8s] kubespray로 쿠버네티스 설치 후 calico-node 에서 CrashLoopBackOff 에러가 날 경우 (0) | 2019.09.06 |
---|---|
[k8s] kubespray 를 사용한 bare-metal 서버에 쿠버네티스 설치하기 (0) | 2019.09.06 |
[K8S] Azure AKS 클러스터에서 helm 차트 사용하기 (0) | 2019.08.26 |
[K8S] Azure CLI 로 AKS 클러스터 구성 및 로컬 환경에서 kubectl 로 AKS 클러스터 연결하기 (0) | 2019.08.23 |
[k8s] 공개용 Docker Image를 다운로드하여 사설 Registry 로 옮기기 (0) | 2019.07.19 |