DevOps, 클라우드/Container

라즈베리파이를 이용한 멀티 노드 클러스터링 (4) - Spring Boot

Floodnut 2022. 4. 6. 23:07

 

기존에 짜던 스프링부트 API 서버를 k3s 클러스터를 통해 배포해보려고 한다.

스프링부트에 대한 정리는 추후 여유가 있다면 한번 해보겠다.

 

# safe-dp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: safeapi-dp
spec:
  selector:
    matchLabels:
      app: safe-api
  template:
    metadata:
      labels:
        app: safe-api
    spec:
      containers:
      - name: safeapi-dp
        image: floodnut/apiserver-dp-arm64:latest
        imagePullPolicy: Always
        resources:
          limits:
            memory: "2Gi"
            cpu: "2"
        ports:
        - containerPort: 8080

라즈베리파이는 ARM 프로세서를 가지는 환경이다. 위와 같이 safeapi-dp 앱에 대한 yaml 파일을 작성한다.

 

여기서 가져올 이미지가 중요하다.

나는 M1 맥을 사용 중이라 이미지를 맥에서 빌드했다.

하지만 일반적인 리눅스 환경에서 빌드한다면 x86 아키텍처로 인해 파드가 에러를 만날 것이다.

kubectl create -f safe-dp.yaml
kubectl get logs <podname>

standard_init_linux.go:228: exec user process caused: exec format error

따라서 arm64로 빌드한 이미지로 당겨와야 한다.

 

 

나는 공유기 환경에서 80포트를 8080포트로 포워딩한 상태로 아래와 같이 로드밸런서를 추가했다. 

로드밸런서는 자동으로 외부에 노출되는 IP를 잡아주는데 이 IP가 호스트의 사설 IP가 된다.

kubectl expose deployment safeapi-dp --type=LoadBalancer --name=loadbalance-svc

 

정리하자면 기존에 개발 중인 서버를 arm64로 빌드하고 해당 이미지를 가져와서 로드밸런서를 통해 외부에 노출시켜주었다.

지속적으로 환경을 개선해보겠지만 확실히 단순하게 도커를 사용하는 것 보다는 귀찮은 작업이 몇몇 더 있는 것 같다.

하지만 잘 구축된 서버와 배포 환경이라면 득이 될 것 같다.