클라우드/쿠버네티스(Kubernetes)

쿠버네티스 Kubernetes 스토리지 볼륨 2 / emptyDir 볼륨

두뚜 2021. 7. 12. 21:13

# emptyDir 볼륨

-아무 데이터도 없는 빈 디렉토리를 제공해 주는 볼륨이다.

파드가 생성하는 데이터를 저장 할 수 있으며, 동일한 파드 내의 컨테이너 간에 네이터를 공유할 때 유용하게 사용 할 수 있다. 또한 빅데이터와 같은 큰 데이터 셋트를 처리하기 위한 임시 저장소로도 사용이 가능하다.

 

 

# emptyDir 볼륨 생성

더보기

# emptyDir 볼륨을 사용하는 레플리카셋 정의
# ldh-rs-emptydir.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: ldh-rs-fortune
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ldh-rs-fortune
  template:
    metadata:
      labels:
        app: ldh-rs-fortune
    spec:
      containers:
      - name: web-server
        image: nginx:alpine
        volumeMounts:
        - name: web-fortune
          mountPath: /usr/share/nginx/html
          readOnly: true
        ports:
        - containerPort: 80
      - name: html-generator
        image: ghcr.io/c1t1d0s7/fortune
        volumeMounts:
        - name: web-fortune
          mountPath: /var/htdocs
      volumes:
      - name: web-fortune
        emptyDir: {}

web-fortune :  emptyDir 볼륨 이름

web-server : nginx 웹 서버 이미지 , /usr/share/nginx/html 디렉토리에 볼륨을 마운트 한다

html-generator : ghcr.io/clt1d0s7/fortune 이미지,  /var/htdos 디렉토리에 볼륨을 마운트 한다

 

 

# .spec.volumes.emptyDir

: emptyDir 타입의 볼륨 정의

- {} : 값을 비워두면 호스트의 로컬 디스크를 사용한다.

- { memory } : tmpfs (RAM 기반 파일시스템)을 사용해 고성능의 볼륨을 제공

- 파드와 파드 사이는 연결이 되지 않는다.

 

# .spec.containers.volumeMounts

: 컨테이너 마운트 할 볼륨을 선언

 

# .spec.containers.volumeMounts.mountPath

: 컨테이너 내의 마운트 포인트

 

# .spec.volumes.name

: 볼륨의 이름

 

# .spec.containers.volumeMounts.name

: 사용할 볼륨 이름


    spec:
      containers:
      - name: web-server
        image: nginx:alpine
        volumeMounts:
        - name: web-fortune
          mountPath: /usr/share/nginx/html
          readOnly: true
        ports:
        - containerPort: 80
      - name: html-generator
        image: ghcr.io/c1t1d0s7/fortune
        volumeMounts:
        - name: web-fortune
          mountPath: /var/htdocs
        volumes:
        - name: web-fortune
          emptyDir: {}

 

--> name이 같아야 한다.

 

 

 

# 서비스 생성

더보기

# 함께 사용 할 서비스 생성
# ldh-svc-emptydir.yml
apiVersion: v1
kind: Service
metadata:
  name: ldh-svc-fortune
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: ldh-rs-fortune

80번 포트 : nginx 이미지는 기본적으로 80번 포트 서비스

 

 

# emptyDir 볼륨 생성 및 확인

 

# 레플리카셋과 서비스 생성

 

# 컨트롤러 상태 확인

 

# 파드의 상태 확인

 

# 서비스 확인

 

# web-server 컨테이너의 /usr/share/nginx/html/indwx.html 파일 확인

 

# html-container 컨테이너의  /var/htdocs/index.html 파일 확인

 

# ldh-service-fortune 서비스에 접근 해 내용 확인

 

-> web-server 컨테이너와 html-container 컨테이너는 같은 emptyDir 볼륨을 공유

    html-container 컨테이너는 컨텐츠를 생성하고 web-server 컨테이너는 컨텐츠를 읽어 외부에 제공

 

더보기

# 레플리카셋 생성
vagrant@k-control:~$ kubectl create -f ldh-rs-emptydir.yml -f ldh-svc-emptydir.yml 
replicaset.apps/ldh-rs-fortune created

# 서비스 생성
vagrant@k-control:~$ kubectl create -f ldh-svc-emptydir.yml 
service/ldh-svc-fortune created


vagrant@k-control:~$ kubectl get replicasets.apps
NAME               DESIRED   CURRENT   READY   AGE
ldh-rs-fortune     1         1         1       3m59s


vagrant@k-control:~$ kubectl get pods
NAME                     READY   STATUS     RESTARTS   AGE
ldh-rs-fortune-68wb9     2/2     Running    0          4m13s


vagrant@k-control:~$ kubectl get svc ldh-svc-fortune
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP          PORT(S)   AGE
ldh-svc-fortune   LoadBalancer   10.97.213.245   192.168.200.210      80:31111/TCP    4m23s


vagrant@k-control:~$ kubectl exec ldh-rs-fortune-68wb9 -c web-server 
                     -- cat /usr/share/nginx/html/index.html
                     
랜덤으로 명언이 나온다                     


vagrant@k-control:~$ kubectl exec ldh-rs-fortune-68wb9 -c html-generator --cat
                     /var/htdocs/index.html
                     
랜덤으로 명언이 나온다                    


vagrant@k-control:~$ http://192.168.200.210

랜덤으로 명언이 나온다