1. emptyDir Volume

emptyDir Volume은 아무 데이터도 없는 빈 디렉토리를 제공해 주는 볼륨이다. Pod가 생성한 데이터를 저장할 수 있으며, 동일한 Pod내 Container 간에 데이터를 공유할 때 유용하게 사용할 수 있다.

또한, 빅 데이터와 같은 큰 데이터 셋트를 처리하기 위한 임시 저장소로도 사용 가능하다.

실습

---
apiVersion: apps/v1
kind: ReplicaSet
metadata: 
  name: myapp-rs-fortune
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp-rs-fortune
  template: 
    metadata:
      labels:
        app: myapp-rs-fortune
    spec:
      containers:
        - name: web-server
          image: nginx:alpine
          volumeMounts:
            - name: web-fortune
              mountPath: /usr/share/nginx/html
              readOnly: true
          ports:
            - containerPort: 8
        - name: html-generator
          image: ghcr.io/c1t1d0s7/fortune
          volumeMounts:
            - name: web-fortune
              mountPath: /var/htdocs
      volumes:
        - name: web-fortune
          emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc-fortune
spec: 
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: myapp-rs-fortune

명언을 자동 생성해주는 html-generator container와 nginx를 사용한 web-fortune container를 생성해주었다.

둘은 같은 volume을 공유한다

아래 코드를 통해 같은 볼륨을 공유하는 것을 확인할 수 있다

vagrant@kube-control1:~/20240624-storage$ kubectl exec myapp-rs-fortune-xskl2 -c web-server -- cat /usr/share/nginx/html/index.html
If your life was a horse, you'd have to shoot it.

vagrant@kube-control1:~/20240624-storage$ kubectl exec myapp-rs-fortune-xskl2 -c html-generator -- cat var/htdocs/index.html
Q:      What's tan and black and looks great on a lawyer?
A:      A doberman.

gitRepo Volume

gitRepo Volume은 EmptyDir volume에 지정한 Git Repository의 파일을 채워서 제공해주는 볼륨이다

volumes:
	- name: VOLUME_NAME
		gitRepo:
			repository: GIT_REPO_URL
			revision: BRANCH
			directory: PATH

InitContainer

gitRepo Volume 유형은 더 이상 사용되지 않는다. Git 저장소에 있는 컨테이너를 프로비저닝 하려면, InitContainer에 EmptyDir Volume을 마운트하고, 여기에 git 명령을 사용해서 Git 저장소를 복제하고, Pod Container에서 empty Volume을 마운트한다.