Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SecurityContextHolder
- React Native
- Configmap
- aws cli ec2
- 쿠버네티스
- linux 파일복사
- amazon ebs
- kubectl명령어
- private repostiroy
- Ansible
- statefulset
- kubectl
- cli ec2
- pod
- nexus proxy
- 쿠버네티스교과서
- 명령어
- amazon ebs종류
- describe-instances
- yaml예시
- sql 공유
- EC2
- 서버간 파일전송
- docker
- ELB
- aws cli
- docker myql
- jenkins parameter
- k8s
- amazon ebs활용
Archives
- Today
- Total
게으름을 위한 부지런한 게으름뱅리' 블로그
[K8S] K8S에서 공용 Data 사용하기 (PV와 PVC yaml 예시) 본문
반응형
- PV와 PVC 정의: PV는 스토리지를 나타내며, PVC는 해당 스토리지에 대한 요청을 나타냅니다.
- 공용 스토리지 클래스: 모든 Pod에서 공유할 수 있도록 공용 스토리지 클래스를 설정할 수 있습니다.
- Access Mode 설정: PV를 설정할 때, 여러 Pod에서 동시에 읽기/쓰기 권한을 필요로 할 경우 ReadWriteMany Access Mode를 사용할 수 있습니다.
기본 예시)
apiVersion: v1
kind: PersistentVolume
metadata:
name: shared-pv # PersistentVolume의 이름
spec:
capacity:
storage: 5Gi # 할당된 스토리지 용량
volumeMode: Filesystem # 볼륨 모드, 파일 시스템으로 설정
accessModes:
- ReadWriteMany # 볼륨에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
persistentVolumeReclaimPolicy: Retain # PV 삭제 시 재사용 가능하도록 유지
storageClassName: shared-storage-class # 사용할 스토리지 클래스 이름
hostPath:
path: /data/shared # 호스트의 경로, 이 경로의 파일 시스템이 PV로 마운트됨
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-pvc # PersistentVolumeClaim의 이름
spec:
accessModes:
- ReadWriteMany # PVC에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
resources:
requests:
storage: 5Gi # 요청한 스토리지 용량
storageClassName: shared-storage-class # 사용할 스토리지 클래스 이름
장점
- 추상화: PV와 PVC는 스토리지를 Pod에서 추상화하여, Pod의 실제 스토리지 및 클러스터 환경과 분리시킵니다.
- 동적 프로비저닝: PVC를 통해 필요에 따라 자동으로 스토리지를 프로비저닝할 수 있습니다. 이는 관리를 단순화하고 효율성을 높입니다.
- 다양한 백엔드 지원: 다양한 스토리지 백엔드를 지원하므로 클라우드 제공업체의 스토리지, 로컬 디스크, 네트워크 스토리지 등을 유연하게 사용할 수 있습니다.
- 재사용 및 재사용: PV는 재사용할 수 있으며, PVC는 여러 Pod에 재사용할 수 있어 리소스의 효율성을 높입니다.
- Access Mode 제어: PV와 PVC를 설정하여 ReadWriteOnce, ReadOnlyMany, ReadWriteMany 등 다양한 Access Mode를 지원하여 다양한 스토리지 사용 시나리오에 대응할 수 있습니다.
단점
- 복잡성: PV와 PVC를 설정하고 관리하는 것은 초기 설정에서 일정한 복잡성을 동반할 수 있습니다. 특히, 클러스터 스토리지 구성이 복잡한 경우 관리가 어려울 수 있습니다.
- 스토리지 클래스 필요: PV를 정의할 때 스토리지 클래스를 지정해야 하며, 이는 클러스터에서 지원되는 스토리지 백엔드에 따라 다를 수 있습니다. 이로 인해 특정 스토리지 백엔드에 종속될 수 있습니다.
- 동적 프로비저닝 오버헤드: 동적 프로비저닝을 사용할 경우 프로비저닝된 스토리지 리소스가 클러스터에서 사용되지 않을 때까지 비용이 발생할 수 있습니다.
- 볼륨 관리의 복잡성: 다수의 PV와 PVC를 관리하고 연결하는 것은 볼륨 관리의 복잡성을 증가시킬 수 있습니다. 특히, 여러 애플리케이션과 다양한 스토리지 사용 시나리오에서 관리가 복잡해질 수 있습니다.
예시 1 공유 NFS 스토리지 사용하기
NFS(Network File System)를 사용하여 여러 파드가 공유 스토리지에 접근하는 방법을 보여줍니다.
1. PV 정의 (shared-nfs-pv.yaml)
apiVersion: v1
kind: PersistentVolume
metadata:
name: shared-nfs-pv # PersistentVolume의 이름
spec:
capacity:
storage: 10Gi # 할당된 스토리지 용량
accessModes:
- ReadWriteMany # 볼륨에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
nfs:
server: nfs-server-ip-address # NFS 서버의 IP 주소
path: /exports/shared-data # NFS 서버에서 공유되는 경로
2. PVC 정의 (shared-nfs-pvc.yaml)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-nfs-pvc # PersistentVolumeClaim의 이름
spec:
accessModes:
- ReadWriteMany # PVC에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
resources:
requests:
storage: 10Gi # 요청한 스토리지 용량
volumeName: shared-nfs-pv # PVC가 바인드할 PersistentVolume의 이름
3. Pod에서 PVC 사용 (pod-using-nfs.yaml)
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod # Pod의 이름
spec:
containers:
- name: nginx-container # 컨테이너의 이름
image: nginx # 사용할 컨테이너 이미지
volumeMounts:
- mountPath: "/usr/share/nginx/html" # 컨테이너 내에서 볼륨을 마운트할 경로
name: shared-nfs-volume # 볼륨의 이름
volumes:
- name: shared-nfs-volume # 볼륨의 이름
persistentVolumeClaim:
claimName: shared-nfs-pvc # Pod에서 사용할 PersistentVolumeClaim의 이름
예시 2: StatefulSet을 사용한 공유 스토리지 사용하기
StatefulSet을 사용하여 각각의 Pod에 고유한 PV를 할당하고, 이 PV를 공유 스토리지로 사용하는 방법을 보여줍니다.
1.StatefulSet 정의 (statefulset-shared-storage.yaml)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web # StatefulSet의 이름
spec:
serviceName: "nginx" # StatefulSet에 의해 생성된 Headless Service의 이름
replicas: 3 # Replica 수, 즉 Pod의 개수
selector:
matchLabels:
app: nginx # Pod를 선택할 Label Selector
template:
metadata:
labels:
app: nginx # Pod의 Label
spec:
containers:
- name: nginx # 컨테이너 이름
image: nginx # 사용할 컨테이너 이미지
volumeMounts:
- name: shared-storage # 마운트할 볼륨의 이름
mountPath: /usr/share/nginx/html # 컨테이너 내에서 볼륨을 마운트할 경로
volumeClaimTemplates:
- metadata:
name: shared-storage # PVC 템플릿의 이름
spec:
accessModes: [ "ReadWriteMany" ] # PVC의 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
resources:
requests:
storage: 5Gi # 요청한 스토리지 용량
2. StatefulSet에 배포된 Pod에서 공유 스토리지 사용하기
StatefulSet을 생성하면 각 Pod에 고유한 PVC가 생성되며, 이 PVC를 통해 공유 스토리지를 마운트할 수 있습니다.
예시 3: 공유 스토리지 클래스를 이용한 PV와 PVC 사용하기
공유 스토리지 클래스를 정의하고, 이를 사용하여 여러 파드에서 공유 스토리지에 접근하는 방법을 보여줍니다.
1.스토리지 클래스 정의 (shared-storage-class.yaml)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: shared-storage-class # StorageClass의 이름
provisioner: kubernetes.io/aws-ebs # PV를 생성할 때 사용할 프로비저너 이름, AWS EBS를 사용한다는 의미
parameters:
type: gp2 # 생성할 PV의 유형 설정, 여기서는 gp2(EBS의 General Purpose SSD)를 사용
fsType: ext4 # PV에 마운트될 파일 시스템 타입 설정, 여기서는 ext4를 사용
2. PV와 PVC 정의 (shared-pv-and-pvc.yaml)
apiVersion: v1
kind: PersistentVolume
metadata:
name: shared-pv # PersistentVolume의 이름
spec:
capacity:
storage: 5Gi # 할당된 스토리지 용량
volumeMode: Filesystem # 볼륨 모드, 파일 시스템으로 설정
accessModes:
- ReadWriteMany # 볼륨에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
persistentVolumeReclaimPolicy: Retain # PV 삭제 시 재사용 가능하도록 유지
storageClassName: shared-storage-class # 사용할 스토리지 클래스 이름
awsElasticBlockStore:
volumeID: <aws-volume-id> # AWS Elastic Block Store(EBS) 볼륨의 ID
fsType: ext4 # PV에 마운트될 파일 시스템 타입 설정
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-pvc # PersistentVolumeClaim의 이름
spec:
accessModes:
- ReadWriteMany # PVC에 대한 액세스 모드 설정, 여러 파드가 읽고 쓸 수 있음
resources:
requests:
storage: 5Gi # 요청한 스토리지 용량
storageClassName: shared-storage-class # 사용할 스토리지 클래스 이름
3. Pod에서 PVC 사용 (pod-using-shared-pvc.yaml)
apiVersion: v1
kind: Pod
metadata:
name: webapp # Pod의 이름
spec:
containers:
- name: webapp # 컨테이너의 이름
image: nginx # 사용할 컨테이너 이미지
volumeMounts:
- mountPath: "/data" # 컨테이너 내에서 볼륨을 마운트할 경로
name: shared-storage # 볼륨의 이름
volumes:
- name: shared-storage # 볼륨의 이름
persistentVolumeClaim:
claimName: shared-pvc # Pod에서 사용할 PersistentVolumeClaim의 이름
이 세 가지 예시는 각기 다른 방법으로 PVs와 PVCs를 사용하여 Kubernetes 환경에서 공유 스토리지를 다루는 방법을 보여줍니다. 각 예시는 특정 상황이나 요구 사항에 맞게 선택하여 적용할 수 있습니다.
반응형
'IT > K8S' 카테고리의 다른 글
[K8S] etcd 사용 예시 (0) | 2024.07.01 |
---|---|
[K8S] K8S에서 공용 Data 사용하기 (StatefulSet yaml 예시 ) (0) | 2024.07.01 |
[K8S] 쿠버네티스 Configmap과 yaml 예시 (0) | 2024.06.30 |
[쿠버네티스 교과서] 6,7,8,9,10,11장 정리 (0) | 2024.01.28 |
[K8S] kubectl pod, deployment, service 명령어 정리 (1) | 2023.12.10 |
Comments