[Kubernetes]Volume

ksp7331·2024년 2월 6일

볼륨(Volume)은 컨테이너 간에 데이터를 공유하고, 컨테이너의 데이터를 영속적으로 보존하기 위해 사용한다.

볼륨은 컨테이너와 별도로 존재하며, 파드(Pod) 내의 여러 컨테이너가 해당 볼륨을 공유할 수 있다.

EmptyDir

Pod가 만들어질때 만들어지는 volume으로, 파드 내에서 일시적인 데이터를 저장하는 데 사용된다.

Pod가 삭제되면 volume도 같이 삭제된다.

yaml 파일

  • spec
    • volumes.emptyDir : 해당 속성이 있어야 emptyDir로 설정된다.
    • containers.volumeMounts.name : volumes.name과 같아야 한다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: container1
    image: ksp7331/sp-app:1.1
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - name: container2
    image: nginx
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
  volumes:
  - name : empty-dir
    emptyDir: {}

container1에 접속해서 mount1에 파일을 추가하면 container2의 mount2에도 파일이 추가된다.

HostPath

호스트 노드의 파일 시스템 경로를 파드에 마운트하여 사용하는 볼륨이다. 호스트 노드의 파일 시스템에 직접 접근할 수 있다. 노드에 있는 데이터를 Pod에서 사용하기 위해 사용한다.

yaml 파일

  • spec
    • hostPath : path를 지정해야 하며, 지정한 path를 mount한다.
    • containers.volumeMounts.name : volumes.name과 같아야 한다.
apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-2
spec:
  containers:
  - name: container
    image: ksp7331/sp-app:1.1
    volumeMounts:
    - name: host-path
      mountPath: /mount1
  volumes:
  - name : host-path
    hostPath:
      path: /node-v

pod에 접속해서 /mount1에 파일을 추가하면 minikube ssh 명령어로 노드에 접속해서 해당 파일을 확인할 수 있다.

PV/PVC

PV

PV(Persistent Volume)은 이름 그대로 영속적인 저장소를 나타내는 객체이다. PV를 생성할 때는 저장소에 대한 세부 사항을 정의한다. 이러한 정의를 토대로 PV는 실제 저장소, 즉 로컬 스토리지나 클라우드에 연결된다.

kubectl 리소스명

pv, persistentvolume, persistentvolumes

yaml 파일

  • spec
    • capacity.storage : PV의 저장용량을 나타낸다.
    • accessModes : https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/#접근-모드 ReadWriteOnce 하나의 노드에서 해당 볼륨이 읽기-쓰기로 마운트 될 수 있다. ReadWriteOnce 접근 모드에서도 파드가 동일 노드에서 구동되는 경우에는 복수의 파드에서 볼륨에 접근할 수 있다. ReadOnlyMany 볼륨이 다수의 노드에서 읽기 전용으로 마운트 될 수 있다. ReadWriteMany 볼륨이 다수의 노드에서 읽기-쓰기로 마운트 될 수 있다.
    • local : 로컬로 사용할 경우 nodeAffinty 속성이 필요하다.
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-01
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-v
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube

Status

PV에는 4가지 상태가 있다.

  1. Available : PV가 사용 가능한 상태임을 의미한다. PV가 어떠한 PVC에도 바인딩되지 않은 상태이다. 다른 PVC가 해당 PV를 요청하면 바인딩되어 Bound 상태로 변경된다. PV를 처음에 생성하면 이 상태가 된다.
  2. Bound : PV가 PVC에 성공적으로 바인딩되어 사용 중인 상태임을 의미한다. Pod와 PVC의 연결이 끊어지더라도 상태는 그대로 유지된다.
  3. Released : PVC와의 연결이 끊어지면 PV는 Released 상태로 전환된다. 이는 PV가 현재 어떠한 PVC에도 바인딩되어 있지 않지만, 데이터는 남아있을 수 있다.
  4. Failed : PV와 실제 데이터간에 문제가 발생하는 경우에 발생할 수 있다.

PVC

PVC(Persistent Volume Claim)는 필요한 PV를 요청하기 위해 사용하는 객체이다.

kubectl 리소스명

pvc, persistentvolumeclaim, persistentvolumeclaims

yaml 파일

  • storageClassName : dynamic provisioning에 사용하는 객체이다. “”로 지정할 경우 클래스가 없는 PV와 연결된다.

0개의 댓글