쿠버네티스(K8S) 환경에서 Immich 설치하기

개요

홈서버에서 쿠버네티스를 운용하는 건 흔치 않지만, 마침 제가 실험적으로 운용하고 있어서 포스팅합니다.

환경은 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로 접속하여 초기 설정을 진행할 수 있게 됩니다.

이후 실사용에 대한 부분은 아래 글을 참조해 주세요.

Immich로 시놀로지 포토 대체하기


출처

https://github.com/immich-app/immich-charts/blob/main/README.md

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤