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 결과를 확인한다.