hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

build server 부터 배포까지 - 2. GKE   Spring   MySQL 배포 - GKE 클러스터 생성 및 spring 예제 배포
DevOps/Tutorial

build server 부터 배포까지 - 2. GKE Spring MySQL 배포 - GKE 클러스터 생성 및 spring 예제 배포

내 프로젝트에서 FE가 필요없고 BE와 DB만 있으면 되기 때문에 이에 대한 kubernetes 환경을 구축하고자 한다.

 

1. GKE 클러스터 생성

만들기
표준

공부하는 게 목적이니까, 표준으로 일단 해보자.

 

클러스터 생성

기본 사항에선 딱히 건들 게 없고, 수정할 거라면 default-pool - 노드 - 머신 계열 정도만 골라주면 될 것이다.그러면 클러스터 하나가 생성된다.

 

vm instance들

VM instance 목록에 들어가 보면 3개의 vm이(노드들) 생성되어 있다.

 

gcloud shell 실행

이후 우상단의 gcloud shell을 실행시킨다. 나는 지금 활성화되어 있어서 꺼져 있다.

 

https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl?hl=ko

그러면 master node로 접속되는 상황, 그러나 kubernetes 명령어인

 

kubectl get node

 

를 치면 실행이 안되었다고 한다. 이렇게 나오는 이유는 gcloud는 단순히 사용자 정보를 이용해서 gcloud shell을 활성화 시켰을 뿐 어떤 cluster를 사용할지 결정하지 않았기 떄문이다. 위 링크를 참조해서 어떤 cluster를 사용할지 만들자.

 

gcloud container clusters get-credentials {cluster-name}

 

나의 경우 cluster 이름이 "cluster-1"이므로 이대로 설정해 주고 kubectl get node를 입력하면 node 개수가 출력된다.

 

 

 


 

 

 

2. Spring 예제 배포

원래는, gcloud shell을 vs code로 열고 싶었는데 그게 잘 되지 않았다. 그래서 local에서 git push하고, gcloud에서 pull하는 방식을 채택했다.

 

"GCP build server 구성 - GCP + Docker + Jenkins + Gitlab + JUnit + SonarQube + GCR image push"

 

포스팅에서 gcr에 image push를 했다. 그 image 이름은 gcr.io/numeric-replica-320807/testspring이었는다. 이 gcr을 가져올 것이다.(현재 내 계정은 owner이기 때문에 가능하다. 그렇지 않다면 추가 설정을 해 주어야 한다.)

 

아래 yml 파일은 예제 spring 파일의 deploy, service 내용이다.

 

/home/hyelie/spring.yml

apiVersion: apps/v1
kind: Deployment
metadata: # deployment의 metadata
  name: hello-spring
spec: # deployment의 spec
  replicas: 4
  selector:
    matchLabels:
      app: spring
      tier: backend
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 2
  template: # 다음 줄부터는 각각 pod의 설정
    metadata:
      labels: # 각 pod들의 metadata
        app: spring
        tier: backend
    spec: # pod의 spec
      containers:
        - name: echo
          image: gcr.io/numeric-replica-320807/testspring
          ports:  # 
            - containerPort: 8080


---


apiVersion: v1
kind: Service
metadata: # Service의 metadata
  name: hello-spring
spec:
  type: LoadBalancer
  ports:
    - port: 8080  # Service가 생성할 Port
      targetPort: 8080  # Service가 접근할 pod의 port
  selector: # Service가 접근할 pod의 label 조건
    app: spring
    tier: backend
​

 

yml 파일에 여러가지를 배포할 때는 ---를 구분자로 사용한다. 설명은 주석을 달았으니 패스.

 

gcloud에서

kubectl apply -f spring.yml

을 실행시킨 뒤

 

kubectl get all

을 입력하면 아래와 같은 결과가 출력된다.

 

kubectl 결과

잘 출력되고 있고, service의 external ip가 나와 있다. 이 ip로 접속하면

 

잘된다!

 

잘 된다!!!

 

다음에는 GKE에 mysql을 올리고, secret으로 비밀번호를 숨겨볼 것이다. 그러면 spring application.properties 안에 정보를 잘 주면 build 서버에서도 돌아갈 것이다!

다만 걸리는 것은, db user/pw가 git에 올라가고, 앱 내에 정보로 남게 되는 게 아닐까? 보통 어디까지 해결하는지 궁금하다.

이후로는 spring+mysql을 이용해 구현한 게시판 예제를 kubernetes에 올려볼 예정이다.

'DevOps > Tutorial' 카테고리의 다른 글

build server 부터 배포까지 - 4. GKE Spring MySQL 배포 - Local, CI Server, Deploy Server에서 MySQL 연동  (0) 2022.10.05
build server 부터 배포까지 - 3. GKE Spring MySQL 배포 - MySQL 배포 및 Mysql + Spring 배포  (0) 2022.10.05
build server 부터 배포까지 - 1. GCP + Docker + Jenkins + Gitlab + JUnit + SonarQube + GCR image push  (0) 2022.10.05
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 6. 수정사항, ECR push  (0) 2022.10.05
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 5. jenkins pipeline - JUnit + SonarQube  (0) 2022.10.05
    hyelie
    hyelie

    티스토리툴바