Section 13 : Kubernetes로 데이터 & 볼륨 관리하기

tein·2022년 9월 8일
0

도커 & 쿠버네티스

목록 보기
14/14
  • 볼륨은 pod에 따라 다름
    볼륨은 쿠버네티스에 의해 시작되고 관리되는 pod의 일부
  • pod가 제거되면 볼륨도 제거됨
    pod제거 후에도 볼륨을 유지시키는 과정은 다음 섹션에서 나옴
  • 도커 제공 볼륨 != 쿠버네티스 제공 볼륨
  • 쿠버네티스 볼륨이 조금 더 강력함
    • 데이터가 저장되는 위치 완벽 제어 가능
  • 쿠버네티스는 다양한 볼륨 유형과 드리이버를 지원함

Volumes 옵션

  • volumeMounts

    • mountPath : 마운트될 컨테이너 내부의 경로
    • name : 컨테이너 내부 경로에 사용할 볼륨 이름 설정
  • emptyDir

    • pod가 시작될 때마다 새로운 빈 디렉토리 생성
    • pod가 살아있는 한 디렉토리를 활성 상태로 유지, 데이터로 채움
    • pod가 제거되면 이 디렉토리도 제거됨
    • pod가 재성성 되면 비어있는 새 디렉토리 생성됨
volumes:
  - name : story-volume
    hostPath:
      path: /data
      type: DirectoryOrCreate
  • hostPath
    • 호스트 머신의 경로. 바인드 마운트와 비슷
    • 새로운 빈 경로 생상 하지 않는다.
    • 노드에 특정적
      • 여러 pod, 다른 노드에서 실행되는 여러 복제본은 동일한 데이터에 액세스 할 수 없음
      • 동일한 노드의 pod만 이 데이터에 접근 가능
    • 이미 존재하는 데이터를 컨테이너에 공유하려는 경우 유용할 수 있음
  • type
    • 위의 경로를 처리하는 방법을 알려주는 type
    • DirectoryOrCreate : 존재하는 디렉토리 또는 아직 존재하지 않는다면 생성하도록 설정

단일노드 환경

  • 모든 pod는 항상 동일한 워커노드에서 실행됨
  • minikube에서는 워커노드가 하나만 있기 때문

CSI : container storage interface

영구 볼륨 (Persistent Volume)

  • pod와 node에 독립적
  • 볼륨이 pod에서 분리됨 (== pod 수명 주기와 완전히 분리됨)
  • 영구 볼륨을 사용하면 클러스터에 새 리소스, 새 엔티티를 가지게 됨
# host-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: host-pv
spec:
  capacity: 
    storage: 1Gi
  volumeMode: Filesystem
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data
    type: DirectoryOrCreate
  • accessModes
    • ReadWriteOnce
      • 단일 노드에 의해 읽기/쓰기 볼륨으로 마운트될 수 있음
    • ReadOnlyMany
      • 읽기 전용이지만 여러 노드에서 요청할 수 있음
    • ReadWriteMany
      • 볼륨이 다수의 노드에서 읽기-쓰기로 마운트 될 수 있음

영구 볼륨 클레임 생성하기

# host-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: host-pvc
spec:
  volumeName: host-pv
  accessModes:
    - ReadWriteOnce
  storageClassName: standard
  resources:
    requests: 
      storage: 1Gi

Filesystem vs Block Storage
https://www.computerweekly.com/feature/Storage-pros-and-cons-Block-vs-file-vs-object-storage

볼륨과 클레임 라이프 사이클 : 쿠버네티스 공식 사이트 참고
https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/

일반 볼륨 vs 영구 볼륨(Persistent Volumes)

  • 일반 볼륨이든 영구 볼륨이든 상관없이 볼륨을 통해 데이터를 유지할 수 있음
  • 일반 볼륨은 pod가 제거되면 같이 제거될 수 있음
  • 반면 영구 볼륨은 pod와 함께 정의되지 않은채 pod에 연결됨
  • 영구 볼륨은 한 번만 생성하면 되고 구성이 하나의 파일에 있으므로 재사용하기 쉬움
  • 더 큰 프로젝트의 경우, 영구 볼륨을 사용하면 클러스터에서 사용할 수 있는 모든 스토리지 옵션과 모든 볼륨을 보다 쉽게 관리할 수 있음
  • 영구 볼륨을 사용하면 pod가 있는 노드와 독립적으로 작동하는 볼륨 유형만 사용 가능

환경 변수

spec:
  containers:
    - name: story
      image: academind/kub-data-demo:1
      env:
        - name: STORY_FOLDER
          value: 'story'
      vloumeMounts:
      ...

env의 내용을 ConfigMaps를 통해 설정할 수 있다.

spec:
  containers:
    - name: story
      image: academind/kub-data-demo:1
      env:
        - name: STORY_FOLDER
          valueFrom:
            configMapKeyRef:
              name: data-store-env
              key: folder
      vloumeMounts:
      ...
profile
내 시행착오 모음집

0개의 댓글