Cloud/Kubernetes

Kubernetes) Kubernetes Volume

Adım Kim 2022. 10. 13. 23:26
학습 목표 : k8s의 volume이 어떻게 사용되는지 알아본다.

Kubernetes 에서 Volume 이란?

  • Volume은 Pod의 일부분으로 정의되는 요소로서 Pod와 동일한 생명주기를 갖는다.
  • Volume은 독립적인 리소스가 아니므로 자체적으로 생성/삭제할 수 없다.
  • Pod에 여러개의 container를 갖는 경우 모든 container가 Volume을 공유할 수 있다.
  • Volume은 Pod의 모든 container에서 사용 가능하며 사용시 container에서 mount해야 사용할 수 있다.
  • 각 container 파일 시스템의 어느 경로에도 mount 할 수 있다.


Volume 유형

  • emptyDir : 일시적인 데이터를 저장할 때 사용하는 빈 디렉토리
  • hostPath : 워커 노드의 파일 시스템을 Pod의 디렉토리로 mount하여 사용한다.
  • nfs : NFS 공유 Pod에 mount 한다.
  • public cloud 전용 스토리지 : AmazonEBS, GCE Persistent Disk, Azure Disk Volume 등을 사용한다.
  • configMap, secret, downwardAPI : Kubernetes 리소스나 cluster 정보를 Pod에 노출하는데 사용되는 특별한 유형의 Volume
  • persistentVolumeClaim : 사전 혹은 동적으로 프로비저닝된 persistent storage를 사용하는 방법


YAML 파일에서 Volume 사용하기

    -  exam-volume.yml 파일

apiVersion: v1
kind: Pod
metadata:
 name: fortune
 labels:
   app: exam-volume
spec:
 containers:
   - image: luksa/fortune
     name: html-generator
     volumeMounts:
       - name: html
         mountPath: /var/htdocs
   - image: nginx:alpine
     name: webserver
     volumeMounts:
       - name: html
         mountPath: /usr/share/nginx/html
         readOnly: true
     ports:
       - containerPort: 80
         protocol: TCP
 volumes:
   - name: html
     emptyDir: {}
  • html-generator(container)에서 fortune 결과를 html 형식으로 생성하여 공유하고 Volume에 저장한다.
  • webserver(container)에서 공유 Volume의 내용을 이용하여 HTML 형식으로 서비스 한다.
  • Pod가 실행되는 worker node에서 다음 명령어를 입력한다.
kubectl port-forward fortune 8080:80
curl http://localhost:8080

    -  host 포트를 Pod의 포트로 포워딩한다.

    -  web browser로 fortune 결과를 확인한다.