kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: claim-log-1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi

179. Storage - Section Introduction

여러가지 스토리지 옵션에 대해서 배워보자 

 

 

180. Introduction to Docker Storage

도커의 스토리지가 어떻게 동작하는지 먼저 알아보자 

Docker Storage

스토리지 드라이버, 볼륨 드라이버로 나뉜다. 

 


181. Storage in Docker

File System

docker 호스트의 파일 시스템

Layered architecture

읽고넘어가

 

레이어 형식이 라서 엔트리포인트는 용량이 없다

비슷한 내용으로 도커 빌드를 할 때 중복되는 레이어는 다시 생성하지 않는다. 
소스 코드와 엔트리포인트만 업데이트한다. 

공간 절약! & 빠른 실행

엔트리 포인트까지 업데이트한 것이 이미지 레이어이다.

이미지 레이어는 read only 로서 변경할려면 다시 초기화 해야한다. 

 

빌드후 run 하면 컨테이너가 생긴다. - 컨테이너 레이어 

컨테이너가 제거되면 컨테이너 레이어도 제거된다. 

 

Copy on write

 

이미지 레이어의 뭔가 하고 싶다면 컨테이너 레이어로 복사한 후 작성하라

 

컨테이너 레이어 삭제하면 데이터 모두 사라진다. 

volumes

데이터를 보존하고 싶다면?

1. 볼륨을 생성하고

2. 컨테이너 생성할 때 마운트 옵션으로 

볼륨 마운팅

 

이제 컨테이너가 사라져도 데이터가 남아있다. 

 

컨테이너 생성전에 볼륨 생성안했다면? 

 

도커가 볼륨을 자동으로 생성해준다.

bind mount

다른 경로와 연결

 

요즘은 v 옵션 대신 이렇게 사용

Storage drivers

 


182. Volume Driver Plugins in Docker

스토리지 드라이버 

볼륨 드라이버 플러그인

 다 다르다. 

도커에서 실행시 특정 볼륨 드라이버를 고를 수 있다.


183. Containter Storage Interface

container 는 cri

네트워크는 cni 

스토리지는 csi

인터페이스로 통신한다.

csi는 쿠버네티스 뿐만 아니라 다른 오케스트레이션 에서도 사용된다. 

 


185. Volumes

컨테이너에서 데이터는 컨테이너가 죽으면 같이 사라진다. 

컨테이너를 볼륨에 연결하면 데이터를 유지할 수 있다.

Volumes & Mounts

랜덤 숫자를 생성하는 파드를 만든다.

volumes에 마운트할 디렉토리를 명시한다.(호스트의)

volumeMounts 에는 컨테이너의 마운트할 경로를 작성한다.

컨테이너가 사라져도 데이터는 볼륨에 남아있다.

Volume Types

노드가 많아질 경우 다 똑같은 호스트 경로를 쓰면 비효율 적이다. 

쿠버네티스는 다양한 스토리지를 지원한다. 

 

ebs 에 담자 

 


186. Persistent Volumes

파드가 많아지면 스토리지 구성이 어렵다. 

 

persistent volume is a cluster-wide pool of storage volumes configured by an adminstrator

PV- 여러 파드들이 쓸 수 있는 클러스터 단위의 스토리지

여기에 요청 pvc 를 해야한다?

 

Persistent Volume 만들기 

pv를 먼저 구성한다. 


187. Persistent Volume Claims

pv와 pvc를 별개다.

관리자는 pv 를 만들고 사용자는 pvc를 만든다 .

pv와 pvc를 정렬하고 쿠버네티스가 매치되는 것과 바인딩한다. 

여러가지 모드도 고려해야함.

pvc 와 매치되는 pv 가 없으면 해당pvc는 pending 상태가 된다. 

pvc 생성하기

생성하자마자 pending 상태가 된다. 

쿠버네티스가 매칭되는 pv를 찾는다. 

매칭되면 bound 가 된다.

 

pvc를 제거 옵션

persistentVolumeReclaimPolicy -pvc 제거시 옵션

retain - pv는 남지만 다른 요청으로 재사용될 수 없음.

delete- pv도 삭제

recycle - 볼륨안의 데이터만 삭제

 


188. Using PVCs in PODs

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: myfrontend
          image: nginx
          volumeMounts:
          - mountPath: "/var/www/html"
            name: mypd
      volumes:
        - name: mypd
          persistentVolumeClaim:
            claimName: myclaim

pod, deploy, rs 등 pvc를 쓰고 싶다면 spec 아래에 volumes 

pvc 옵션을 추가해서 사용한다. 

 

 


189. Practice Test - Persistent Volumes and Persistent Volume Claims

1. We have deployed a POD. Inspect the POD and wait for it to start running.

2. The application stores logs at location /log/app.log. View the logs.

 

You can exec in to the container and open the file:
kubectl exec webapp -- cat /log/app.log

 

애플리케이션 로그 저장하는 곳

 

 

3. If the POD was to get deleted now, would you be able to view these logs.

 

no

 

4. Configure a volume to store these logs at /var/log/webapp on the host.

Name: webapp
Image Name: kodekloud/event-simulator
Volume HostPath: /var/log/webapp
Volume Mount: /log
apiVersion: v1
kind: Pod
metadata:
  name: webapp
spec:
  containers:
  - name: event-simulator
    image: kodekloud/event-simulator
    env:
    - name: LOG_HANDLERS
      value: file
    volumeMounts:
    - mountPath: /log
      name: log-volume

  volumes:
  - name: log-volume
    hostPath:
      # directory location on host
      path: /var/log/webapp
      # this field is optional
      type: Directory

 

5. Create a Persistent Volume with the given specification.

Volume Name: pv-log
Storage: 100Mi
Access Modes: ReadWriteMany
Host Path: /pv/log
Reclaim Policy: Retain

6. Let us claim some of that storage for our application. Create a Persistent Volume Claim with the given specification.

 

Volume Name: claim-log-1
Storage Request: 50Mi
Access Modes: ReadWriteOnce

7. What is the state of the Persistent Volume Claim?

pending

 

8. What is the state of the Persistent Volume?

available

 

9. Why is the claim not bound to the available Persistent Volume?

 

access 모드 차이 때문

 

10.

Update the Access Mode on the claim to bind it to the PV.

Delete and recreate the claim-log-1.

 

pvc access mode 

readWriteMany 로 변경

 

11.  You requested for 50Mi, how much capacity is now available to the PVC?

여전히 100mi 사용가능

 

12.

Update the webapp pod to use the persistent volume claim as its storage.

 

Replace hostPath configured earlier with the newly created PersistentVolumeClaim.

 

13. What is the Reclaim Policy set on the Persistent Volume pv-log?

 

14.  What would happen to the PV if the PVC was destroyed?

 

The PV is not deleted but not available

 

 

15. Try deleting the PVC and notice what happens.

If the command hangs, you can use CTRL + C to get back to the bash prompt OR check the status of the pvc from another terminal

terminating 상태에 걸린다.

 

16. Why is the PVC stuck in Terminating state?

 

The PVC was still being used by the webapp pod when we issued the delete command. Until the pod is deleted, the PVC will remain in a terminating state.

webapp pod 가 아직 사용하고 있기 때문 파드가 삭제될때까지 대기중 

17.

Let us now delete the webapp Pod.

Once deleted, wait for the pod to fully terminate.

 

18. What is the state of the PVC now?

deleted

 

19. What is the state of the PV now?

released


193. Storage Classes 

지난 시간에 배운 pv, pvc 그리고 pod 에서 pvc 사용하기를 배웠다 .

Static Provisioning

pv 를 처음 구성할때 수동으로 기입해줘야한다. (여기선 외부 클라우드를 예시로 들었다.) 

static 프로비저닝이라고 한다.

당연히 이게 귀찮으니.... 

Dynamic Provisioning

pv 대신 storageClass를 사용할 거다. 

기존에 pv-pvc-pod 이렇게 연결되있었다. 

sc를 쓸거면 sc-pvc-pod  이렇게 연결 가능하다. 

pvc에서 sc를 쓸 수 있게 storageClassName 을 추가한다.

여기서 중요한 건 

sc 에 연결되어도 결국 pv 는 생성한다.

pv를 수동으로 생성안할 뿐 pv 랑은 여전히 연결된다.!!! 

Storage Class

여러 회사의 스토리지 클래스를 사용할 수 있으며 여러 옵션이 존재한다.

예를 들면 이런거

1. How many StorageClasses  exist in the cluster right now?

 

 

 

2. How about now? How many Storage Classes exist in the cluster?

3개

 

3. What is the name of the Storage Class  that does not support dynamic  volume provisioning?

local-storage 

provisioner 에서 no-provisioner 이다.

 

4. What is the Volume Binding Mode  used for this storage class (the one identified in the previous question)?

waitForFirstConsumer

 

5. What is the Provisioner  used for the storage class called portworx-io-priority-high ?

portworkvolume

 

6. Is there a PersistentVolumeClaim  that is consuming the PersistentVolume  called local-pv ?

no 

 

7. Let's fix that. Create a new PersistentVolumeClaim by the name of local-pvc that should bind to the volume local-pv.

Inspect the pv local-pv for the specs.

8. What is the status of the newly created Persistent Volume Claim?

pending 

 

9. Why is the PVC in a pending state despite making a valid request to claim the volume called local-pv?

Inspect the PVC events.

Normal WaitForFirstConsumer 12s (x8 over 111s) persistentvolume-controller waiting for first consumer to be created before binding

 

waitForFirstConsummer는 사용하지 않으면 pv 에 고정되지 않는다.

사용을 기다리는 중

 

10. The Storage Class called local-storage  makes use of VolumeBindingMode  set to WaitForFirstConsumer . This will delay the binding and provisioning of a PersistentVolume until a Pod using the PersistentVolumeClaim is created.

 

11. Create a new pod called nginx with the image nginx:alpine. The Pod should make use of the PVC local-pvc and mount the volume at the path /var/www/html.

The PV local-pv should in a bound state.

 

 

12. What is the status of the local-pvc  Persistent Volume Claim now?

13. Create a new Storage Class called delayed-volume-sc that makes use of the below specs:

provisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer

+ Recent posts