주의사항
이 글은 DIOK2 스터디에서 진행한 내용을 바탕으로 작성한 내용입니다. 공부중인 내용이기때문에, 틀린 부분이 있을수 있습니다.
쿠버네티스 스토리지의 배경
Pod는 Stateless이다(파드를 끄면 데이터가 없어진다)
Pod는 기본적으로 영구히 쓰는 개념이 아니라, 일회용품처럼 쓰고-버리고-쓰고-버리고 하는 개념임
Pod내부의 데이터는 Pod가 정지되거나/에러났을때에 삭제됨
→ Pod 내부에 있는 데이터는 모두 유실됨 ⇒ Pod는 상태가없는(Stateless) 애플리케이션 이다
Stateless의 문제점
먼저 요약해주자면 ‘Pod는 기본적으로 Stateless 라는 성질’을 갖고있다. 뜻을 풀어보자면 ‘Pod에는 상태가 없다’ 라는 뜻인데, 이를 알기위해서는 Pod의 컨셉에 대해서 이해해야한다.
Pod는 쿠버네티스 쿠버네티스에서 기능을 하는 가장 최소단위 라는 정의를 갖고 있다.
여기서 Pod의 컨셉을 하나 알아야하는데, Pod는 영구히 사용하는 도구같은 컨셉이아니라, 일회용품 처럼 쓰고-고장나면 버리고-만들어서 쓰고- 고장나면 버리고 하는 컨셉이다.
만약에 어떤 기능을 담당하는 Pod가 고장났다고 가정해보자. 이 경우 새로운 Pod를 만들어서 해당기능을 작동하게 해야한다.
이때 문제는 Pod내부에 ‘데이터’가 존재하는 경우에 발생한다. ‘데이터’를 가지고 있는 Pod가 만약, 다른곳에 데이터를 동기화 시켜주지 않은상태로 없어진다면? 이는 바로 데이터유실로 이어진다.
그래서 일반적으로 Pod에는 직접 데이터를 담아두지않는다(굳이 따지자면 volume을 넣은 Pod를 만들수 있다). 이런 의미에서 Pod는 Stateless(상태가 없다) 라고 부른다.
그래서 나온 Stateful
먼저 요약해주자면 PV(Persist Volume), PVC(Persist Volume Claim)는 Stateful성질을 갖고있다. 뜻을 풀어보자면 ‘PV, PVC에는 상태가 있다’ 라는 뜻이다. Stateless에 대조되는 개념이다.
PV,PVC는 Pod 처럼 기능을 하는 단위가 아니라, PV, PVC는 굳이 따지자면 Storage의 개념이라고 보는게 맞는것같다. PV,PVC는 Pod를 스토리지 일부공간에 바인딩/마운트하는데에 사용된다.
스토리지 일부의 공간을 지정해서 Pod와 연결하면, Pod가 스토리지 공간에 직접 데이터를 읽기/쓰기 를 한다는것이다. 이렇게 했을때 Pod가 갑자기 종료되어도 데이터 유실문제를 방지할수 있다.
PV,PVC를 사용하게되었을때 논쟁이되는것은 스토리지의 위치다.
Pod내부에 스토리지를 갖고있는것인지, Pod가 스토리지를 쳐다보는것인지 에 대해서는 의견이 조금 분분한것같다. 그치만 여기서는 PV,PVC를 Pod와 연결하면 데이터를 유실없이 저장할수 있다는 정도만 알아두자.
스토리지 소개
Volume: emptyDir, hostPath, PV/PVC
emptyDir: Pod가 생성될때 Pod와 함께 생성되는 공간. Pod가 제거될때 같이제거됨
hostPath: 노드 내부의 경로에 Pod를 마운트하는 방법. 꼭 경로에 비어있어야하는것도 아님
PV/PVC: User와 Admin의 영역을 분리해서 Pod에 마운트하는 방법. 다양한 Volume을 사용할수 있다.
PVC/PV: 사용자의 요청이 생기면 Pod랑 연결하는 방법
마운트 순서
- PV생성: 스토리지 를 가리키는 PV를 생성함. 스토리지의 크기, 접근모드 등의 정보를 포함함
- PVC생성: 스토리지에 대한 요청인 PVC를 생성함. 스토리지 크기, 접근모드 등의 정보를 포함하고 PV와 매칭되는 요구사항을 명시함
- PVC와 PV 매칭: 쿠버네티스는 PVC의 요구사항을 충족하는 PV를 찾아서 자동으로 바인딩(연결)함. 적합한 PV가 없다면 바인딩되지않는 상태로 남는다.
- Pod생성: Pod를 생성할때 PVC를 사용해서 생성
- Pod와 PV마운트: PVC에 바인딩된 PV를 Pod에 마운트 진행한다
Dynamic Provisioning: 파드가 생성될때 SC와 PVC가 있다면, PV를 동적으로 만들어준다
Dynamic Provisioning순서(로컬 내부 디렉토리에 저장하는 경우)
- Local Persistent Volume Provisiner 설치
- Storage Class 생성: PV에 연결할 목적이다. SC는 Provisioner를 가리킨다
- PVC 생성: SC를 가리켜서 생성한다
- (자동 PV생성): PVC가 SC를 가리키고, SC가 Provisioner를 카리킬때 PV를 Dynamic Provisioning시켜서 생성한다.
- PV와 PVC의 바인딩
- Pod생성: Pod는 PVC에 연결하면, 동적프로비저닝된 PV와PVC 에서 보고있는 StorageClass의 Provisioner가 지정한 위치에 마운트된다.
'외부활동' 카테고리의 다른 글
[DOIK2] 스터디: GKE에서 CloudNativePG + Promethues + Grafana 연결하기 (0) | 2023.11.05 |
---|---|
[DOIK2] 스터디: Operator 를 사용하는 이유, InnoDB 주요 Component (1) | 2023.10.29 |
[DOIK2] 스터디: Kubernetes 의 Component와 멱등성에 대한 이해 (0) | 2023.10.28 |
[DOIK2] 스터디: 1주차 스터디과제 (0) | 2023.10.22 |
[구글 클라우드 쿠버네티스 스터디잼 중급] 수료했습니다 +후기 (0) | 2023.06.25 |