본문 바로가기
  • 지요미의 IT성장일기
Kubernetes

Kubernetes-volume

by 지요미=P 2024. 2. 19.
728x90

 

volume 관리

컨테이너 내의 디스크에 있는 파일은 임시적이며
컨테이너에서 실행될 때 애플리케이션에 적지 않은 몇가지 문제가 발생합니다.
한 가지 문제는 컨테이너가 크래시 될 때 파일이 손실 된다는 것임.
kubelet은 컨테이너를 다시 시작하지만 초기화된 상태!
두번째 문제는 pod에서 같이 실행되는 컨테이너 간에 파일을 공유할 때 발생합니다.
파드는 여러 볼륨 유형을 동시에 사용할 수 있다.
임시 볼륨 유형은 파드의 수명을 갖지만, 퍼시스턴트 볼륨은 파드의 수명을 넘어 존재합니다.

 

 

 

파드 안에 컨테이너가 있고.

컨테이너 안쪽에 디스크 공간이 있음.

 

쿠버네티스 저장소라는게 컨테이너 안쪽에 있을 수도 바깥쪽에 있을 수도 있다. (=파드 안/팎에 있을 수 있다.)

그래서 컨테이너/파드가 지워지더라도 데이터가 남아질 수 있도록 [바깥쪽 = 노드]에 두자고 함.

외부에 다른 인스턴스를 만들어서 NFS Server에 데이터를 두는 방식!

 

pvc에서 c는 claim=요청!

파드가 디스크가 공간이 필요한데 그 공간을 pv로 꾸미고 싶을 경우.

외부에 pv라는 공간을 만들고 중간에 pvc라는 연결매체를 만들어서 컨테이너와 바깥쪽 pv와 연결한다.

 

 


실습해보자.

 

--- Volume

- pv/pvc
# vi pv-pvc-pod.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity: #pv의 디스크공간
    storage: 10Mi
  accessModes:
    - ReadWriteOnce #1개의 컨테이너에 1개의 pod만 붙을 수 있도록. 
  hostPath:
    path: "/mnt/data" #pv가 저장될 공간 (컨테이너 안의 내용을 저장하겠다.)
---
apiVersion: v1
kind: PersistentVolumeClaim #pvc 이름
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce #pv와 pvc가 위와 동일하게 해서 위와 연결되었다고 생각하면 됨
  resources:
    requests:
      storage: 1Mi #전체 10Mi 중에서 1Mi만 사용하겠다는 뜻.
  selector: #그렇다면 어느 PV?
    matchLabels: #위의 PV의 라벨 부분을 보았더니 type:local을 찾고있으니 아래도 동일하게 매치시킴
      type: local
---
apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
  labels:
    app: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim: #앞서 만들어둔 claim의 이름을 넣어줘용
        claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html" #마운트정보임; 컨테이너 안쪽의 경로에 index.html이 위치하는 폴더
          name: task-pv-storage #위에서 정의한 볼륨이름 넣어주기
          
# kubectl apply -f pv-pvc-pod.yaml

 

pv는 /mnt/data(원래 데이터 정보가 없는 디렉토리임)에

pvc는 tast-pv-claim이름으로 만들고 보안상의 이유로 하나의 컨테이너에 하나의 pod만 붙을 수 있도록 하구

pod는 /usr/share/nginx/html의 경로에 볼륨 마운트

 

bound = 연결되었다는 의미임.

bound 전에는 available이었다.

 

방금 배포한 파드가 worker1에 위치함.

 

 

worker1에 가서 확인해보자!

ls /mnt
echo "HELLO" > /mnt/data/index.html

 

 

마스터 노드가서 확인해봄!

내가 기록한 내용이 보여짐!

728x90