티스토리 뷰

728x90

볼륨

컨테이너 내의 디스크에 있는 파일은 임시적이며, 컨테이너에서 실행될 때 어플리케이션에 몇 가지 문제가 발생합니다.


첫 번째 문제는 컨테이너가 Crash되더라도 kubelet은 컨테이너를 초기화된 상태로 재시작하기 때문에 파일이 손실되는 문제가 발생합니다.
두 번째 문제는 pod에서 같이 실행되는 컨테이너간에 파일을 공유할 때 발생합니다.

 

이러한 문제로 마운트하여 볼륨을 사용하기도 합니다.

 

 

 

 

1. 컨피그맵(ConfigMap)

컨피그맵은 구성 데이터를 파드에 주입하는 방법을 제공합니다. 컨피그에 저장된 데이터는 configMap 유형의 볼륨에서 참조된 후 파드에서 사용합니다.
컨피그맵을 참조할 때, 볼륨에 ConfigMap의 이름을 명시합니다. 컨피그맵의 특정 항목에 사용할 경로를 사용자 정의할 수 있습니다.


아래는 log-config를 configmap-pod라 불리는 pod에 마운트 하는 파일입니다.

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
    - name: test
      image: busybox:1.26
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: log-config
        items:
          - key: log_level
            path: log_level

 

log-config 컨피그맵은 볼륨으로 마운트 되며, log_level 항목에 저장된 모든 컨텐츠는 파드의 /etc/config/log_level 경로에 마운트 됩니다. 이 경로는 볼륨의 mountPath와 log_level로 key가 지정된 path에서 파생됩니다.


2. emptyDir

emptyDir 볼륨은 파드가 노드에 할당될 때 처음 생성되며, 해당 노드에서 파드가 실행되는 동안에만 존재합니다. 이름에서 알 수 있듯이 emptyDir은 처음에는 비어있습니다.

 

파드 내 모든 컨테이너는 emptyDir 볼륨에서 동일한 파일을 읽고 쓸 수 있지만, 해당 볼륨은 각각의 컨테이너에서 동일하거나 다른 경로에 마운트 될 수 있습니다. 어떤 이유로든 노드에서 파드가 제거되면 emptyDir의 데이터가 영구적으로 삭제됩니다.


- 컨테이너가 Crash되는 것은 노드에서 파드를 제거하지 않습니다. 따라서, emptyDir의 데이터는 컨테이너 Crash로부터 안전합니다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: registry.k8s.io/test-web
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}


3. hostPath

hostPath 볼륨은 호스트 노드의 파일시스템에 있는 파일이나 디렉터리를 파드에 마운트합니다.


- hostPath 볼륨에는 많은 보안 위험이 있으며, 가능하면 hostPath를 사용하지 않는 것이 좋습니다. hostPath를 사용해야하는 경우, 필요한 파일 또는 디렉터리로만 범위를 지정하고 ReadOnly로 마운트 합니다.


- AdmissionPolicy를 사용하여 특정 디렉터리로의 hostPath 엑세스를 제한하는 경우, readOnly 마운트를 사용하는 정책이 유효하려면 volumeMounts가 반드시 지정되어야 합다.

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: registry.k8s.io/test-web
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data
      tyep: Directory

 

4. persistentVolumeClaim

persistentVolumeClaim은 퍼시스턴트볼륨(PV)를 파드에 마운트하는데 사용됩니다. 아래에서 더 자세히 살펴보겠습니다.

 


 

persistentVolume

퍼시스턴트볼륨(PV)은 관리자가 프로비저닝하거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지입니다. 노드가 클럿스터의 리소스인 것처럼 PV는 클러스터의 리소스 입니다. PV는 PV를 사용하는 개별 파드와는 별개의 라이프사이클을 가집니다.


persistentVolumeClaim(PVC)은 사용자의 스토리지에 대한 요청입니다. 파드와 유사하게 생각할 수 있습니다. 파드는 노드 리소스를 사용하고 PVC는 PV리소스를 사용합니다. 파드는 특정 수준의 리소스(CPU 및 Memory)를 요청할 수 있고, 클레임은 특정 볼륨 크기 및 접근 모드를 요청할 수 있습니다.


1. 퍼시스턴트볼륨 생성하기

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv # PV 명
spec:
  accessModes:
  - ReadWriteMany # 접근 모드
  capacity:
    storage: 5Gi  # 마운트 용량
  persistentVolumeClaimPolicy: Retain
  volumeMode: Filesystem
  nfs:
    path: /tmp    # NAS 서버 경로
    server: 172.16.0.2 # NAS 서버 IP
  claimRef:
    kind: persistentVolumeClaim
    namespace: test-namespaces # 바인딩 대상 pvc 네임스페이스명
    name: test-pvc

2. 볼륨모드(volumeMode)

퍼시스턴트볼륨의 볼륨모드에는 Filesystem과 Block 두 가지를 제공하며, volumeMode가 생략될 경우 Filesystem이 기본 모드로 동작됩니다.


3. 접근모드(accessModes)

접근모드는 다음과 같습니다.
1) ReadWriteOnce: 하나의 노드에서 해당 볼륨이 읽기-쓰기로 마운트 될 수 있습니다. 다만 파드가 동일 노드에서 구동되는 경우에는 복수의 파드에서 볼륨에 접근할 수 있습니다.
2) ReadOnlyMany: 볼륨이 다수의 노드에서 읽기 전용으로 마운트 될 수 있습니다.
3) ReadWriteMany: 볼륨이 다수의 노드에서 읽기-쓰기로 마운트 될 수 있습니다.


4. 반환정책(persistentVolumeClaimPolicy)

반환정책은 다음과 같습니다.
1) Retain(보존) : 저장(수동 반환)
2) Recycle(재활용) : 기본 스크럽 (rm -rf /thevolume/* )

 

 


 

persistentVolumeClaim

 


1. 퍼시스턴트볼륨클레임 생성하기

apiVersion: v1
kind: persistentVolumeClaim
metadata:
  name: test-pvc  # PVC 명
  namespace: test-namespaces # PVC 네임스페이스명
spec:
  accessModes:
    - ReadWriteMany  # PVC 접근 모드
  volumeMode: Filesystem  # PVC 볼륨모드
  resources:
    requests:
      storage: 5Gi # PVC 요청 용량


2. 볼륨모드(volumeMode)

퍼시스턴트볼륨의 볼륨모드에는 Filesystem과 Block 두 가지를 제공하며, volumeMode가 생략될 경우 Filesystem이 기본 모드로 동작됩니다.


3. 접근모드(accessModes)

접근모드는 다음과 같습니다.
1) ReadWriteOnce: 하나의 노드에서 해당 볼륨이 읽기-쓰기로 마운트 될 수 있습니다. 다만 파드가 동일 노드에서 구동되는 경우에는 복수의 파드에서 볼륨에 접근할 수 있습니다.
2) ReadOnlyMany: 볼륨이 다수의 노드에서 읽기 전용으로 마운트 될 수 있습니다.
3) ReadWriteMany: 볼륨이 다수의 노드에서 읽기-쓰기로 마운트 될 수 있습니다.

728x90
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크