정환타 개발노트

GKE를 활용한 웹어플리케이션 배포 본문

DevOps

GKE를 활용한 웹어플리케이션 배포

JungHwanTa 2020. 4. 8. 18:23

GKE를 활용한 배포

이번에는 gke를 통해 웹 어플리케이션을 배포하려 한다.

 

1. GCP에서 console로 이동 후 새 프로젝트 생성 후 Cloud shell 활성화

 

 

2. Cloud shell 에서 Dockerfile과 애플리케이션을 가져온다. 필자는 git에 모두 업로드

 

#cloud shell
git clone 자신의 repository 프로젝트
cd 프로젝트명

 

3. google cloud config에 등록된 프로젝트 ID 를 등록하고 이미지를 빌드해준다.

$ export PROJECT_ID="$(gcloud config get-value project -q)"

$ docker build -t gcr.io/${PROJECT_ID}/<project-name>:<tag> .

 

4. Container Registry에 이미지를 업로드한다. 

먼저 Container Registry에 대한 인증을 진행한다.

$ gcloud auth configure-docker

$ docker push gcr.io/${PROJECT_ID}/<project-name>:<tag>

다음으로 Google cloud platform에서 Container Registry를 검색 후 들어간다.

 

Push가 정상적으로 처리 되었다면 다음과 같이 이미지가 보인다.

 

5. 컨테이너 클러스터 생성하기

먼저 노드가 3개인 클러스터를 생성한다.

gcloud container clusters create jungstagram-cluster --num-nodes=3 --region=asia-northeast2

다음으로 static ip를 생성한다.

$ gcloud compute addresses create jungstagram-static-ip --region asia-northeast2
$ gcloud compute addresses list

 

6. 애플리케이션 배포 

먼저 설정 파일을 생성한다.

#프로젝트 단(DOCKERFILE 위치)
vi jungstagram-service-static-ip.yaml
apiVersion: v1
kind: Service
metadata:
	name: jungstagram
    labels:
    	app: jungstagram-app
spec:
	selector:
    	app: jungstagram-app
        tier: web
    ports:
      - port: 80
    	targetPort: 8080
	type: LoadBalancer
    loadBalancerIP: "<위에서 생성한 static ip>"
    
     

 

vi jungstagram-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
	name: jungstagram
    labels:
    	app: jungstagram
spec:
	selector:
    	app: jungstagram
        tier: web
    template:
    	metadata:
        	labels:
            	app: jungstagram
                tier: web
        spec:
        	containers:
              - name: jungstagram-app
                image: gcr.io/jungstagram/jungstagram:v1
                ports:
                - containerPort:8080

 

vi jungstagram-ingress-static-ip.yaml
apiVersion: extensions/vibetal
kind: Ingress
metadata:
	name: jungstagram
    annotations:
    	kubernetes.io/ingress.global-static-ip-name: jungstagram-static-ip
    labels:
    	app: jungstagram
spec:
	backend:
    	serviceName: jungstagram-backend
        servicePort: 8080
---
apiVersion: v1
kind: Service
metadata:
	name: jungstagram-backend
    labels:
		app: jungstagram
spec:
	type: NodePort
    selector:
    	app: jungstagram
        tier: web
    ports:
      - port: 8080
    	targetPory: 8080
        	containers:
              - name: jungstagram-app
                image: gcr.io/jungstagram/jungstagram:v1
                ports:
                - containerPort:8080

 

다음으로 yaml 파일을 적용해준다.

kubectl apply -f jungstagram-deployment.yaml # deployments 를 설정해준다.
$ kubectl create -f jungstagram-service-static-ip.yaml # 서비스를 생성
$ kubectl apply -f jungstagram-ingress-static-ip.yaml # ingress 적용

설정이 완료되면 이전에 생성한 static ip를 이용해 접속하여 테스트한다.

Comments