• HOME
  • PRODUCT
  • DEVELOP
  • NEWS
  • CONSULTING
No Result
View All Result
illunex Blog
  • HOME
  • PRODUCT
  • DEVELOP
  • NEWS
  • CONSULTING
No Result
View All Result
일루넥스 블로그
No Result
View All Result

MiniKube에서 배포해보기

최 수만 by 최 수만
2021년 1월 21일
in DEVELOP, 백엔드
MiniKube에서 배포해보기

안녕하세요, 일루넥스 개발팀 최수만입니다.

1. 배포하기

이번엔 minikube에 간단하게 만든 서버를 배포해 보겠다.

# simple-node라는 폴더를 만들고 이동 후 server.js를 생성하자
$ mkdir simple-node
$ cd simple-node
$ touch server.js 

IDE를 이용해서 다음의 내용을 작성한다

// localhost:3000을 호출하면 Hello World를 출력한다.
var http = require('http');
var handleRequest = function(req, res) {
    res.writeHead(200);
    res.end('Hello world');
};

var www = http.createServer(handleRequest);
www.listen(3000); 

터미널에서 node server.js를 실행 후 브라우져에서 localhost:3000을 실행하면 Hello world를 출력하는 걸 볼 수 있다. 이제 이걸 쿠버네티스에서 사용할 수 있게 도커파일로 만들어 줘야 한다.

IDE에서 새파일을 생성후 파일명은 Dockerfile로 하고 다음의 내용을 작성해 준다.

 

FROM node:12 # node version 12를 사용합니다.
COPY . . # 작업 디렉토리의 모든 파일을 컨테이너로 복사합니다.
EXPOSE 3000 # 3000 포트로 외부와 연결합니다.
CMD node server.js # server.js를 실행하라 

그 다음 부분에서 약간의 햇갈림이 있었다. 뜬금없이 eval~ 명령을 쓰라는 거다.

# 사용할 때
$ eval $(minikube docker-env)
$ docker build -t sample:v1 .
# 위의 명령을 실행한 폴더에서 docker images 실행
$ docker images
sample                                    v1                  f84d6e8ea36e        2 hours ago         918MB
node                                      12                  28faf336034d        7 days ago          918MB
gcr.io/k8s-minikube/storage-provisioner   v3                  bad58561c4be        3 weeks ago         29.7MB
k8s.gcr.io/kube-proxy                     v1.16.13            547ceac00533        2 months ago        116MB
k8s.gcr.io/kube-controller-manager        v1.16.13            805157ef634b        2 months ago        162MB
k8s.gcr.io/kube-apiserver                 v1.16.13            5e09a312716d        2 months ago        170MB
k8s.gcr.io/kube-scheduler                 v1.16.13            9832c7ec57b8        2 months ago        93.6MB
kubernetesui/dashboard                    v2.0.3              503bc4b7440b        3 months ago        225MB
kubernetesui/metrics-scraper              v1.0.4              86262685d9ab        6 months ago        36.9MB
k8s.gcr.io/etcd                           3.3.15-0            b2756210eeab        12 months ago       247MB
k8s.gcr.io/coredns                        1.6.2               bf261d157914        13 months ago       44.1MB
k8s.gcr.io/pause                          3.1                 da86e6ba6ca1        2 years ago         742kB
# 실행하기

# 사용하지 않을 때
$ eval $(minikube docker-env -u). 

위와 같이 메인 도커와는 다른 minikube용 클러스터가 있고 그곳에 저장됨을 알수 있다. 다른 터미널 창을 열어서 docker images를 해보면 다른 것을 알 수 있다. 이로 인해 eval 명령어는 컨테이너를 레포지토리로 올려서 그것을 다운받는 방식이 아닌 eval을 이용해 로컬 생성 컨테이너를 바로 minikube의 클러스터에 집어넣는 것만 다르게 작동한다.클러스터에 저장된 이미지를 실행하자.

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags]
# 명령의 옵션도 한번 찾아봐야 겠다.
$ kubectl run sample --image=sample:v1 --port=3000 --image-pull-policy=Never
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/sample created
# 배포확인
$ kubectl get deployments
# pods 확인 (약간의 시간 필요)
$ kubectl get pods       
NAME                      READY   STATUS    RESTARTS   AGE
sample-775fcc85b4-wk9ks   1/1     Running   0          117s 

그런데 처음에 run으로 잘 되었는데 그 다음에 하니 오류가 발생했다. 보니까 run을 하니 pod은 만드는데 deployment, replica set을 생성하지 않았다. 그래서 다음과 같이 진행했다.

위의 문제는 다시 원인을 찾아봐야겠다.

# 변경된 배포 명령
$ kubectl create deployment sample --image=sample
# 변경된 서비스 명령
kubectl expose deployment sample --port=8080 --type=LoadBalancer 

외부에 연결을 만들기위해 다음 명령을 실행하자

$ kubectl expose deployment sample --type=LoadBalancer
service/sample exposed
$ kubectl get service   
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          3d
sample       LoadBalancer   10.103.58.154   <pending>     3000:31149/TCP   10m
# 브라우저에 띄우자
$ minikube service sample 

2. 새 버전 배포하기

이제 내용을 바꾸고 새 버전을 배포해 보자

# 새버전 배포하기
$ kubectl set image deployment/sample sample=sample:v2
# 확인해보기
$ minikube service sample 

이상태로 minikube를 종료했다 다시 시작하면 위의 pod, service 설정은 동일하게 작동한다. 그동안 학습 및 테스트용으로 쿠버네티스를 사용하기 힘든 사람들은 이것을 이용해서 간단하게 학습할 수 있게 만들었다는 것 자체가 마음에 든다.

환경 정리하기 – 이것을 하지 않는 경우는 전의 환경이 연결되어 있으므로 계속해서 사용할 수 있다.

# 이제 서비스와 배포를 종료해보자
$ kubectl delete service sample
$ kubectl delete deploy sample
# minikube 클러스터의 이미지를 삭제하자
$ docker rmi sample:v1 sample:v2
$ minikube stop
$ eval $(minikube docker-env -u)
$ minikube delete 

기타 이벤트, 설정 보기

$ kubectl get events
$ kubectl config view 

kubectl에 대한 더 많은 명령은 이곳 에서

마치며

지금까지 미니쿠베에서 배포해보기에 대해 알아보았습니다.
읽어주셔서 감사합니다.

Tags: MiniKube미니쿠베배포쿠버네티스
ShareTweet
Previous Post

Create React Module(with Typescript)

Next Post

nginx 웹서버 띄워보기

Next Post
깃허브 블로그 만들기(지킬, Jekyll)

nginx 웹서버 띄워보기

  • Copyright © 2020 illunex., Inc., All Rights Reserved.
  • 개인정보보호정책
No Result
View All Result
  • HOME
  • PRODUCT
  • DEVELOP
  • NEWS
  • CONSULTING