mongo-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc # 클레임 사용 때 필요
spec:
resources:
requests:
storage: 1Gi # 요청하는 스토리지 양
accessModes:
- ReadWriteOnce # 단일 클라이언트에 읽기 쓰기 지원
storageClassName: "" # 동적 프로비저닝에서 사용
(PV는 네임스페이스에 속하지 않음)
mongo-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce # 하나의 파드만 읽기 쓰기 가능
- ReadOnlyMany # 여러 개의 파드가 동시에 읽기 가능
persistentVolumeReclaimPolicy: Retain
gcePersistentDisk:
pdName: mongodb
fsType: ext4
Reclaiming | 설명 |
---|---|
Retain (유지) | PVC를 삭제하더라도 PV는 존재 |
Delete (삭제) | 외부 인프라의 연관된 스토리지 자산을 모두 제거 |
Recycle (재사용) | rm -rf /thevolume/* 볼륨에 대한 기본 스크럽( )을 수행 하고 새 클레임에 대해 다시 사용할 수 있도록 함 |
mongodb.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: mongodb
name: mongodb
spec:
volumes:
- name: mongodb-data
gcePersistentDisk:
pdName: mongodb
fsType: ext4
containers:
- image: mongo
name: mongodb
volumeMounts:
- mountPath: /data/db
name: mongodb-data
ports:
- containerPort: 27017
protocol: TCP
status: { }
변경
apiVersion: v1
kind: Pod
metadata:
labels:
run: mongodb
name: mongodb
spec:
volumes:
- name: mongodb-data
persistentVolumeClaim:
claimName: mongodb-pvc
containers:
- image: mongo
name: mongodb
volumeMounts:
- mountPath: /data/db
name: mongodb-data
ports:
- containerPort: 27017
protocol: TCP
status: { }
imkunyoung@cloudshell:~/storage (k8s-inflearn)$ kubectl exec -it mongodb -- mongosh
Current Mongosh Log ID: 64eb962f10ddb58c777c4638
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.5
Using MongoDB: 7.0.0
Using Mongosh: 1.10.5
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2023-08-27T18:25:02.984+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2023-08-27T18:25:04.561+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2023-08-27T18:25:04.562+00:00: vm.max_map_count is too low
------
test> use mystore
switched to db mystore
mystore> db.foo.find()
[
{
_id: ObjectId("64e24753d55cdec56609311f"),
name: 'test',
value: '1234'
}
]
참고
PV 상태 | 설명 | 주요 특징 및 동작 |
---|---|---|
Available | PV가 클러스터에서 사용 가능한 상태입니다. 아무런 할당이나 연결이 없는 초기 상태입니다. | 클러스터에서 새로운 PVC에 할당될 준비가 되어 있는 상태 |
Bound | PV가 PVC에 할당되어 연결된 상태입니다. 해당 PVC에서 사용되고 있습니다. | PVC가 해당 PV와 성공적으로 연결되었음을 의미 |
Released | 이전에 할당된 PVC와의 연결이 끊어진 상태입니다. PV는 더 이상 PVC와 연결되지 않았습니다. | 새로운 PVC에 다시 할당되기 위해 대기하며, 데이터는 여전히 보존됩니다 |
Failed | PV 생성 또는 연결 중 오류가 발생하여 PV가 사용 불가능한 상태입니다. | PV 생성 오류, 외부 스토리지의 문제 등으로 인해 발생할 수 있음 |
Terminating | PV가 삭제 중인 상태입니다. | PV를 삭제하는 동안 해당 상태로 유지되며, 완전히 삭제되면 해당 PV는 클러스터에서 사라짐 |
Reclaiming | PV가 삭제되었지만, 외부 스토리지에서 볼륨을 정리하고 회수 중인 상태입니다. | PV 삭제 후 스토리지의 데이터 정리 및 볼륨 회수 과정을 진행 중 |
ReleasedToFree | PV의 reclaim 정책이 Retain으로 설정된 경우, PV가 이전 PVC와의 연결이 끊어진 상태입니다. | 기존 데이터가 여전히 유지되지만, 다른 클레임으로 재할당되지 않고 해당 상태로 유지됨 |
BoundToReleased | PV의 reclaim 정책이 Retain으로 설정된 경우, PV가 이전 PVC와의 연결이 끊어진 후 PVC와 동시에 삭제된 상태입니다. | 기존 데이터가 유지되지만 클러스터와의 연결이 완전히 끊어지고, 클러스터에서 완전히 삭제됨 |
Reclaim 정책 | 설명 |
---|---|
Retain | PV가 삭제되더라도 외부 스토리지 리소스는 유지됩니다. 데이터는 삭제되지 않고 수동으로 회수 가능합니다. |
Delete | PV가 삭제되면 외부 스토리지 리소스도 함께 삭제됩니다. 데이터가 완전히 제거됩니다. |
Recycle | 현재 사용되지 않는 PV 데이터를 삭제하고, 새 PVC 할당 시 PV 내부를 초기화하는 단순한 정책입니다. 사용 권장되지 않습니다. |