개요
홈서버에서 쿠버네티스를 운용하는 건 흔치 않지만, 마침 제가 실험적으로 운용하고 있어서 포스팅합니다.
환경은 Proxmox에 마스터 노드 3대, 워커 노드 3대의 Rocky Linux로 이루어진 클러스터이며, 사용되는 저장소는 csi-driver-smb를 이용해 TrueNAS로부터 마운트한 삼바공유 저장소입니다.
MetalLB를 이용하여 사설망IP를 할당하고 있으며, Ingress-nginx를 이용해 외부 도메인을 연동하고 있습니다.
Helm Chart로 설치하기
TrueNAS가 아닌, 일반적인 쿠버네티스 환경에서 헬름으로 설치할 수도 있습니다.
Library PVC 준비
Immich는 사진이 저장되는 Library에 대해 동적 생성을 지원하지 않고 아래처럼 PVC를 미리 생성하여 매칭하도록 되어 있습니다.
TrueNAS에 Photos로 SMB공유를 생성하고 csi-driver-smb를 이용해 PV/PVC를 생성해 주겠습니다.
spec.csi.volumeAttributes.source의 SMB공유경로를 개별 환경에 맞게 수정해야 합니다.
spec.capacitry.storage의 용량은 신경쓰지 않아도 됩니다. NFS나 SMB는 지정된 크기는 무시하고 파일시스템 상 사용할 수 있는 용량을 사용하기 때문입니다.
#smb-photos.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: smb-truenas-photo
spec:
capacity:
storage: 1Gi # 필요한 크기로 설정
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: smb.csi.k8s.io
volumeHandle: smb-truenas-photo
volumeAttributes:
source: "//10.10.10.10/photos"
nodeStageSecretRef:
name: smbcreds
namespace: default
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: smb-truenas-photo
namespace: immich
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: smb-truenas-photo
spec.csi.nodeStageSecretRef의 smbcreds는 csi를 이용해 smb를 사용할 때마다 사용될 ID/PW를 포함하고, PV혹은 SC를 생성할 때 이용합니다.
맨 아래 username과 password는 실제 SMB인증에 사용되는 ID와 PW를 암호화해서 집어넣습니다.
echo -n "username" | base64
echo -n "password" | base64
# smbcreds.yaml
apiVersion: v1
kind: Secret
metadata:
name: smbcreds
namespace: default
type: Opaque
data:
username:
password:
작성이 끝난 파일을 적용합니다.
kubectl create ns immich
kubectl apply -f smbcreds.yaml
kubectl apply -f smb-photos.yaml
Immich 설치하기
먼저 헬름 차트를 추가합니다.
helm repo add immich https://immich-app.github.io/immich-charts
helm repo update
values.yaml는 아래와 같이 확인할 수 있습니다.
helm show values immich/immich >> values.yaml
nano등의 편집기를 활용할 수도 있지만, 삼바 공유를 통해 VSCode등을 이용해 보시면 향후 업데이트 시에도 값을 비교해서 보는 등 더 편리하게 환경을 꾸릴 수 있습니다.
먼저 변경해야 하는 값들은 아래와 같습니다.
그리고 쿠버네티스 환경 내 default로 지정된 storageClass가 있다면 문제없이 진행이 되겠지만, 제 경우 default strorageClass가 없어 immich-server와 redis 컨테이너가 pending되는 문제가 있었습니다.
그래서 아래 사진과 같이 직접 해당 부분의 persistence를 지정했습니다.
postgresql:
primary:
persistence:
enabled: true
storageClass: nfs-truenas-db
accessModes:
- ReadWriteOnce
size: 10Gi
redis:
master:
persistence:
enabled: true
storageClass: nfs-truenas-data
accessModes:
- ReadWriteOnce
size: 8Gi
작성이 끝났다면 파일을 저장하고 설치를 시작합니다.
helm install immich immich/immich -f values.yaml -n immich
초기생성되는 파드를 지켜보려면 아래처럼 입력합니다.
kubectl get pods -n immich -o wide --watch
파드 생성이 완료되었다면 LoadBalancerIP:2283이나 Ingress로 접속하여 초기 설정을 진행할 수 있게 됩니다.
이후 실사용에 대한 부분은 아래 글을 참조해 주세요.
2025.01.23 - [Apps] - Immich로 시놀로지 포토 대체하기
Immich로 시놀로지 포토 대체하기
2024년 10월 30일 변경 내용 : TrueNAS가 24.10업데이트 대응 docker compose 설치방법 추가2025년 1월 22일 변경 내용 : 쿠버네티스 설치 내용 분리, 일반 docker compose내용 추가개요사진과 비디오를 동기화하
worklazy.net
출처
1. https://github.com/immich-app/immich-charts/blob/main/README.md
immich-charts/README.md at main · immich-app/immich-charts
Helm chart implementation of Immich. Contribute to immich-app/immich-charts development by creating an account on GitHub.
github.com