본문 바로가기

Development

GKE 클러스터 생성 및 Docker 이미지 배포

1. docker 이미지에 포함시킬 node 앱 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
const os = require('os');
const http = require('http');
const handleRequest = function(request, response) {
  response.writeHead(200);
  response.end('Hello World! I\'m '+os.hostname());
  // log
  console.log('['+
               Date(Date.now()).toLocaleString()+
               '\'] '+os.hostname());
};
const www = http.createServer(handleRequest);
www.listen(8080);
 
cs

2. docker 파일 작성

1
2
3
4
FROM node:carbon
EXPOSE 8080
COPY server.js .
CMD node server.js > log.out
cs

3. docker 이미지 빌드
docker build -t asia.gcr.io/asj-kube/hello-node:v1 .
* 이미지 명명 규칙 참고 > gcr위치/프로젝트ID/앱네임:태그 

4.2 도커 컨테이너 실행 
$docker run -d -p 8080:8080 asia.gcr.io/asj-kube/hello-node:v1

4.3 컨테이너 실행 확인

$docker ps

$curl http://localhost:8080

4.4 컨테이너 shell 접속
$docker exec -it [container id]

5. 도커 이미지 GCR(Google Container Registry) 올리기

5.1 GCR 인증

$ gcloud auth configure-docker

5.2 GCR에 도커 이미지 올리기
$ docker push [image name]

6. 쿠버네티스 클러스터 생성

클라우드 코드에서 인증하기


6.1 vscode에서 쿠버네티스 클러스터 생성하기

6.2 클러스터 생성 확인
$gcloud container clusters list

7. ReplicationController 만들기

*** cloud code에서 인증을 하지 않은 경우 이거나 Shell에서 사용할 경우 다음 명령으로 사전 인증 필요 ***

$gcloud container clusters get-credentials iverson-gke-12

****************************************************************************************************************

$kubectl create -f hello-node-rc.yaml

$kubectl get all

$kubectl describe pod hello-node-rc-c45t9

$kubectl exec -it hello-node-rc-c45t9 -- curl 10.20.1.6:8080

8. Service 만들기

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
  name: hello-node-svc
spec:
  selector:
    app: hello-node #pod들 중에 라벨의 키가 app이고 값이 hello-node인 pod 들만 서비스에 연결하도록 지정하
  ports:
    - port: 80 #서비스 포트
      protocol: TCP
      targetPort: 8080 #pod의 서비스 포트
  type: LoadBalancer
cs

$kubectl create -f hello-node-svc.yaml