LoadBalancer란?
- 사용자들이 접근할때 여러 서버로 부하분산하는 방법
Terraform GKE 구축
# GKE.tf##
resource "google_container_cluster" "primary" {
name = "gke-cluster-1"
location = var.region
remove_default_node_pool = true
initial_node_count = 1
}
resource "google_container_node_pool" "primary_preemptible_nodes" {
name = "my-node-pool"
cluster = google_container_cluster.primary.id
node_count = 1
node_config {
preemptible = true
machine_type = "e2-medium"
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
}
}
- 테스트용이기 때문에 e2-medium을 사용
Docker Image Artifact_Registry에 배포
# artifact.tf resource "google_artifact_registry_repository" "my-repo" { location = "asia-northeast3" repository_id = "my-repo" description = "docker repository" format = "DOCKER" }
# dockerfile FROM openjdk:17-jdk-slim ENV APP_HOME=/usr/app/ WORKDIR $APP_HOME COPY ./*.jar ./app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
#GCP Region 인증
sudo gcloud auth configure-docker asia-northeast3-docker.pkg.dev
#이미지 Tag 연결
sudo docker tag spring asia-northeast3-docker.pkg.dev/ictgcp001/my-repo/spring:version1
#이미지 Push
sudo docker push asia-northeast3-docker.pkg.dev/ictgcp001/my-repo/spring:version1
K8s 클러스터에 접근 및 배포
#Spring Replicaset 3개 선언 포트는 8080
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-load
spec:
replicas: 3
selector:
matchLabels:
app: spring-boot-load
template:
metadata:
labels:
app: spring-boot-load
spec:
containers:
- name: spring-boot-load
image: asia-northeast3-docker.pkg.dev/ictgcp001/my-repo/spring:version1
imagePullPolicy: Always
ports:
- protocol: TCP
containerPort: 8080
---
# 로드밸런스 사용을 위한 Service 구축
apiVersion: v1
kind: Service
metadata:
name: spring-boot-load
labels:
app: spring-boot-load
annotations:
cloud.google.com/neg: '{"ingress": true}'
spec:
selector:
app: spring-boot-load
type: LoadBalancer
ports:
- protocol: TCP
port: 8080
targetPort: 8080
nodePort: 32000
---
# 구현한 LoadBalancer를 접근 가능하게 Ingress 정의
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: spring-boot-load
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: spring-boot-load
port:
number: 8080