1 분 소요

서론

대세는 쿠버네티스 초급편 강의를 듣고 k8s 공식문서를 참고해 volume을 살짝 정리했습니다. 중급편의 Dynamic Provisioning과 PV같은 것은 나중에 알아보도록 하겠습니다.

Volume

k8s에서 volume은 pod안에 컨테이너끼리 데이터를 저장하고 공유하기 위한 추상적인 개념입니다. 볼륨을 사용하는 이유는 크게 2가지가 있습니다. 첫 번째는 컨테이너를 다시 시작하면 초기화된 상태로 시작됩니다. 두 번째는 pod 안 컨테이너들은 서로 격리되도록 설계되었는데, 볼륨이 없다면 공통 데이터를 공유할 방법이 없습니다.

emptyDir

임시 볼륨인 emptyDir은 이름의 뜻과 똑같이 텅 빈 dir을 생성합니다. 파드가 노드에 할당될 때 생성되고, 라이프사이클이 파드와 동일합니다. 즉 파드가 죽으면 dir 역시 사라지게 됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14.2
    ports:
    volumeMounts:
    - mountPath: /test-dir-1
      name: test-volume
  - name: jenkins-container
    image: jenkins/jenkins:latest
    ports:
    volumeMounts:
    - mountPath: /test-dir-2
      name: test-volume
  volumes:
  - name: test-volume
    emptyDir: {}

life

위의 사진에서 볼 수 있듯이 nginx, jenkins container가 “test-volume”을 공유하고 있는 모습을 확인하실 수 있습니다. 각각의 컨테이너에 생성된 dir의 이름은 다를 수 있습니다. 또, 처음 생성되면 텅 빈 상태임을 확인할 수 있습니다.

hostPath

hostPath는 호스트 노드에 있는 dir을 공유합니다. 하지만 공식 문서에는 hostPath를 사용하지 말라고 경고하고 있습니다. 첫 번째 이유는 컨테이너 격리를 위반하기 때문입니다. 컨테이너 기술의 장점은 컨테이너와 호스트의 격리인데, hostPath는 이러한 격리를 약화시킵니다. 두 번째 이유는 호스트 머신의 작업에 민감한 dir에 volume을 걸어두면 위험하기 때문입니다. /etc나 /var/log 등 중요한 dir에 컨테이너가 엑세스하면 안됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14.2
    ports:
    volumeMounts:
    - mountPath: /test-dir-1
      name: test-volume
  - name: jenkins-container
    image: jenkins/jenkins:latest
    ports:
    volumeMounts:
    - mountPath: /test-dir-2
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /node-v
      type: DirectoryOrCreate

life

위의 사진에서 볼 수 있듯이 nginx, jenkins의 컨테이너가 하나의 dir을 공유하고 있습니다. 하지만 emptyDir과 다르게 파드가 죽어도 파일의 내용은 유지됩니다. 왜냐하면 hostPath는 호스트 노드의 파일을 사용하기 때문입니다.

결론

k8s의 볼륨은 컨테이너끼리 파일을 공유하기 위함과 데이터 휘발성을 낮추기 위해 사용합니다. 대표적으로 emptyDir이 있는데, 파드와 라이프사이클이 동일해, 캐쉬 같은 파일일 때 주로 사용합니다. hostPath는 보안적으로 취약하기 때문에 사용 하지 말라고 합니다. 호스트 노드 파일을 공유하거나 데이터가 휘발되면 안될 때 사용합니다.

다른 PV/PVC는 클라우드 서비스의 volume을 사용해 볼 기회가 생긴다면, 정리하도록 하겠습니다.

카테고리:

업데이트: