지난번에 우분투에 k3s를 설치했다
이번엔 설치해둔 k3s에 프로젝트 서버를 배포하려고 함.
OS : Ubuntu 24.04.LTS
사전 작업..
프론트엔드, 백엔드 코드를 도커 이미지로 빌드해서 도커 로컬 레지스트리에 이미지 보관해둔 상태임
* 프론트엔드
- React
- nginx로 프록시
* 백엔드
- NestJS
k3s라는 폴더 생성
필요한 파일들을 미리 만들어뒀다.
backend-hpa.yaml -> 오토스케일링을 위한 yaml
backend.yaml -> backend 서버 정보와 service 정의 해둔 yaml
frontend.yaml -> frontend 서버 정보와 service 정의해둠
mariadb.yaml -> mariadb 서버 정의
original-pv.yaml / original-pvc.yaml -> NAS 연결할 예정이었어서 pv, pvc 미리 만들어둠
<backend.yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
spec:
replicas: 2 # 기본 파드 수 (HPA에서 이 값을 변경할 수 있음)
selector:
matchLabels:
app: backend-app # 레이블을 통해 파드와 연결
template:
metadata:
labels:
app: backend-app # 파드에 적용할 레이블
spec:
containers:
- name: backend
image: 127.0.0.1:5000/backend:latest # 도커이미지 이름
resources:
requests:
memory: "2Gi"
cpu: "1" # CPU 요청 추가
limits:
memory: "4Gi"
cpu: "2"
env:
- name: DB_HOST
value: mariadb-service
- name: DB_PORT
value: "3306"
- name: DB_USER
value: root
- name: DB_PASSWORD
value: root
- name: DB_DATABASE
value: new_database
- name: JWT_SECRET
value: secret
- name: JWT_EXPIRE_IN
value: 1d
livenessProbe:
httpGet:
path: /app/health
port: 3001
initialDelaySeconds: 60
periodSeconds: 5
readinessProbe:
httpGet:
path: /app/ready
port: 3001
initialDelaySeconds: 60
periodSeconds: 5
volumeMounts:
- name: public-volume
mountPath: /app/public
- name: original-volume
mountPath: /app/original # 나스 연결
volumes:
- name: public-volume
hostPath:
path: /home/user/images/public
type: Directory
- name: original-volume # 나스 연결
persistentVolumeClaim:
claimName: original-pvc
---
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: backend-app
ports:
- protocol: TCP
port: 3001
targetPort: 3001
type: ClusterIP
<frontend.yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-deployment
spec:
replicas: 1 # 원하는 복제본 수
selector:
matchLabels:
app: frontend-app
template:
metadata:
labels:
app: frontend-app
spec:
containers:
- name: frontend
image: localhost:5000/frontend:latest # 도커 이미지 이름
env:
- name: BACKEND_URL
value: http://backend-service:3001 # 백엔드 서비스의 URL
---
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
type: NodePort # if no type, clusterIP is default type.
ports:
- protocol: TCP
port: 5173
targetPort: 80 # Nginx
nodePort: 31000
selector:
app: frontend-app
<mariadb.yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb-deployment # deployment name
spec:
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb # should be same with selector
spec:
containers:
- name: mariadb
image: mariadb:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "new_database"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mariadb-storage
mountPath: /var/lib/mysql
volumes:
- name: mariadb-storage
hostPath:
path: /home/user/mariadb
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: mariadb-service
spec:
selector:
app: mariadb
ports:
- protocol: TCP
port: 3306
targetPort: 3306
env의 값들을 env.yaml 파일을 따로 만들어서 관리하면 되는데 일단은 하드코딩 했슴다..
<backend-hpa.yaml>
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: backend-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: backend-deployment
minReplicas: 2 # 최소 파드 수
maxReplicas: 8 # 최대 파드 수 (트래픽 증가 시 최대 10개 파드까지 자동 생성)
targetCPUUtilizationPercentage: 90 # CPU 사용률이 90%를 넘으면 파드를 추가
<original-pv.yaml>
apiVersion: v1
kind: PersistentVolume
metadata:
name: original-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /home/dos # nfs server path
server: 192.168.20.22 # NAS server IP
storageClassName: nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: original-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: nfs
이렇게 정의해두고
yaml파일이 있는 경로로 가서
$ kubectl apply -f 파일이름
적용하면 파드들이 생성된다 !
파드 조회
$ kubectl get po
'기타 > kubernetes' 카테고리의 다른 글
[k3s] Prometheus를 사용하여 리소스 수집하기 (0) | 2024.11.18 |
---|---|
[k3s] No files matching import glob pattern 메시지 출력 문제 해결 (0) | 2024.09.23 |
[kubernetes] ubuntu에 k3s 설치하기 (삭제) (1) | 2024.09.14 |
[kubernetes] Helm으로 프로메테우스, 그라파나 설치 (0) | 2024.08.31 |
[kubernetes] Probe (Readiness probe, Liveness probe) (0) | 2024.08.29 |