09.퍼스시턴스 볼륨과 퍼시스턴트 볼륨 클레

2020-08-18

9. 퍼시스턴스 볼륨과 퍼시스턴트 볼륨 클레임

  • 어느 노드에서도 접근해 사용할 수 있는 퍼시스턴트 볼륨을 사용.
  • 워커 노드들이 네트워크상에서 스토리지를 마운트해 영속적으로 데이터를 저장할 수 있는 볼륨
  • eg) NFS, EBS(AWS), Ceph, ClusterFS등

docker 에서는 볼륨으로 해결 했다.

docker volume create myvolume
docker run -it --name test -v myvolume:/mnt ubuntu:16.04

9.1 로컬 볼륨: hostPath, emptyDir

  1. HostPath - 호스트와 볼륨을 공유하기 위해 사용 ```yaml hostpath-pod.yaml apiVersion: v1 kind: Pod metadata: name: hostpath-pod spec: containers:
    • name: my-container image: busybox args: [ “tail”, “-f”, “/dev/null”] volumeMounts: # 참조 사용
      • name: my-hostpath-volume mountPath: /etc/data volumes: # 볼륨을 정의
    • name: my-hostpath-volume hostPath: path: /tmp # 볼륨에서 hostPath 항목을 정의함으로써 호스트의 /tmp를 포드의 /etc/data에 마운트함

kubectl apply -f hostpath-pod.yaml kubectl exec -it hostpath-pod – touch /etc/data/mydata

디플로이먼트의 포드에 장애가 생겨 다른 노드로 포드가 옮겨갔을 경우, 이전 노드에 저장된 데이터 사용 불가.
CAdvisor와 같은 모니터링 툴을 쿠버네티스의 모든 워커노드에 배포야하한다면 옳은 선택


2. emptyDir - 포드의 컨테이너 간에 볼륨을 공유하기 위해서 사용
- 비어있는 상태로 생성되며 포드가 삭제되면 emptyDir에 저장돼 있던 데이터도 함께 삭제됨
```yaml
emptydir-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: emptydir-pod
spec:
  containers:
  - name: content-creator
    image: alicek106/alpine-wget:latest
    args: ["tail", "-f", "/dev/null"]
    volumeMounts:
    - name: my-emptydir-volume
      mountPath: /data #1.이 컨테이너가 /data파일을 생성하면
      
  - name: apache-webserver
    image: httpd:2
    volumeMounts:
    - name: my-emptydir-volume
      mountPath: /usr/local/apache2/htdocs/ # 2. 아파치 웹 서버에 접근 할 수 있다.
  volumes:
  - name: my-emptydir-volume
    emptyDir: {} # 포드 내에서 파일을 공유하는 emptyDir