본문 바로가기
개발/AWS EKS

[EKS] Knative volume support - PVC

by 무아몽중 2024. 3. 6.
728x90

 

안녕하세요?

 

Knative를 사용하다가 pvc를 Knative의 ksvc에서 사용을 해야 해서 알아봤습니다. Knative에서 pvc를 mount를 하기 위해서는 설정을 변경해야만 합니다. pvc 이외의 configmap 등의 volume 유형에 대해서는 바로 사용이 가능합니다.

 

Knative operator를 사용하는 경우에, 아래 처럼 features에 pvc 설정을 추가하면 됩니다.

apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: knative-serving
  namespace: knative-serving
spec:
  ...
  
  config:
    features:
      # 아래 두 설정을 추가하면 됩니다.
      kubernetes.podspec-persistent-volume-claim: enabled
      kubernetes.podspec-persistent-volume-write: enabled
      
  ...

 출처: https://knative.dev/docs/serving/configuration/feature-flags/#kubernetes-emptydir-volume

 

이후, ksvc 생성 시 아래 처럼 volumes와 volumeMounts를 추가하면 ksvc의 pod에 pvc가 연결되는 것을 확인할 수 있습니다.

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
 template:
   spec:
     containers:
         ...
         volumeMounts:
           - mountPath: /data
             name: mydata
             readOnly: true
     volumes:
       - name: mydata
         persistentVolumeClaim:
           claimName: minio-pv-claim
           readOnly: true

 

다만, pvc가 ReadWriteOnce 이더라도 multi revision에 의해서 동시에 여러 pod이 하나의 pvc를 마운트하게 되면, pvc의 데이터에 대해서 보장이 안되기 때문에, 이부분은 고려를 하셔야 합니다. 

 

저 같은 경우에는 ksvc를 patch하여 새로운 revision을 추가 시 앞선, 모든 revision에 대해서는 replicas를 강제로 0으로 지정하여 pvc가 항상 하나의 revision에 대해서만 바인딩이 되도록 설정 했습니다.