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로 빌드하고 해당 이미지를 가져와서 로드밸런서를 통해 외부에 노출시켜주었다.
지속적으로 환경을 개선해보겠지만 확실히 단순하게 도커를 사용하는 것 보다는 귀찮은 작업이 몇몇 더 있는 것 같다.
하지만 잘 구축된 서버와 배포 환경이라면 득이 될 것 같다.