OpenEBS 배포¶
소개¶
Kubernetes 로컬 퍼시스턴트 볼륨을 사용하면 표준 PVC 인터페이스를 통해 간단하고 이식 가능한 방식으로 로컬 스토리지에 액세스할 수 있습니다. PV에는 노드 선호도 정보가 포함되어 있으며, 시스템은 이 정보를 사용하여 Pod를 올바른 노드에 스케줄링합니다. OpenEBS 동적 로컬 PV는 OpenEBS 노드 스토리지 디스크 관리자(NDM)를 사용하여 Kubernetes 로컬 PV가 제공하는 기능을 확장합니다. 주요 차이점은 다음과 같습니다:
- 사용자는 노드에서 장치를 사전 포맷하거나 마운트할 필요가 없습니다.
- 동적 로컬 PV 지원 - 장치를 CAS 솔루션 및 애플리케이션에서 사용할 수 있습니다. CAS 솔루션은 일반적으로 장치에 직접 액세스합니다. OpenEBS NDM이 지원하는 블록디바이스클레임을 사용하여 OpenEBS 로컬 PV는 CAS 솔루션(직접 액세스)과 애플리케이션(PV를 통해) 간에 사용되는 스토리지 장치 관리를 간소화합니다.
- hostpath를 사용하여 로컬 PV를 제공하는 것을 지원합니다. 실제로 일부 경우 Kubernetes 노드에 연결된 스토리지 장치 수가 제한적일 수 있으며, hostpath 기반 로컬 PV는 노드에서 사용 가능한 스토리지를 효율적으로 관리할 수 있도록 합니다.
전제 조건¶
- Kubernetes 클러스터가 배포되어 있어야 합니다. 배포되지 않은 경우 Kubernetes 배포를 참조하세요.
- (선택 사항) Helm 도구가 배포되어 있어야 합니다. 배포되지 않은 경우 Helm 설치를 참조하세요.
기본 정보 및 호환성¶
| 이름 | 버전 | 오프라인 배포 지원 여부 | 지원 아키텍처 | 지원 클러스터 버전 |
|---|---|---|---|---|
| localpv-provisioner | 2.0 | 예 | amd64/arm64 | 1.18+ |
배포 단계¶
1. 설치¶
다음 명령을 실행하여 설치합니다:
helm install localpv localpv-provisioner --repo https://pubrepo.guance.com/chartrepo/dataflux-chart -n kube-system
출력 결과:
NAME: localpv
LAST DEPLOYED: Wed Nov 2 12:44:53 2022
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The OpenEBS Dynamic LocalPV Provisioner has been installed.
Check its status by running:
$ kubectl get pods -n kube-system
Use `kubectl get bd -n kube-system` to list the
blockdevices attached to the Kubernetes cluster nodes.
Get started with the Dynamic LocalPV Provisioner Quickstart guide at:
https://github.com/openebs/dynamic-localpv-provisioner/blob/develop/docs/quickstart.md
For more information, visit our Slack at https://openebs.io/community or view
the OpenEBS documentation online at https://openebs.io/docs
STATUS: deployed는 배포 성공을 의미합니다.
2. 배포 확인¶
2.1 Pod 상태 확인¶
출력 결과:
NAME READY STATUS RESTARTS AGE
localpv-localpv-provisioner-c7dd598dc-wtrgg 1/1 Running 0 27m
localpv-openebs-ndm-65987 1/1 Running 0 27m
localpv-openebs-ndm-6h2x4 1/1 Running 0 27m
localpv-openebs-ndm-krf47 1/1 Running 0 27m
localpv-openebs-ndm-operator-8d67c79dd-482sb 1/1 Running 0 27m
2.2 StorageClass 생성¶
/data 디렉터리 아래의 localpv StorageClass를 생성합니다.
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data" ## hostpath 경로
name: openebs-data
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer ## Pod 스케줄링 시 생성
다음 명령을 실행하여 설치합니다:
생성 성공 여부를 확인합니다:
결과:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
openebs-data openebs.io/local Retain WaitForFirstConsumer true 24m
2.3 PVC 생성¶
다음 yaml을 test-pvc.yaml로 저장합니다.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-pvc
spec:
storageClassName: openebs-data ## 위에서 배포한 StorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
다음 명령을 실행하여 설치합니다:
상태를 확인합니다:
pvc 상태는 다음과 같습니다:
StorageClass의
volumeBindingMode모드가WaitForFirstConsumer로 설정되어 있으므로 pvc 상태가Pending인 것은 정상입니다.
2.4 테스트 Deployment 생성¶
다음 yaml을 test-deploy.yaml로 저장합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-pvc
spec:
selector:
matchLabels:
app: nginx-pvc
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx-pvc
spec:
containers:
- name: nginx-pvc
image: nginx:1.14.1
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 30Mi
limits:
cpu: 100m
memory: 30Mi
volumeMounts:
- mountPath: "/var/www/html" ## 컨테이너의 디렉터리를 pvc nfs의 디렉터리에 마운트
name: storage ## storage 추가
volumes:
- name: storage ## 앞의 내용과 대응
persistentVolumeClaim: ## pvc 선언
claimName: test-pvc ## 생성된 pvc lab name
다음 명령을 실행하여 설치합니다:
상태를 확인합니다:
Pod 상태:
pvc 상태:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-pvc Bound pvc-4023bf79-235e-4310-8fb6-a4f13b3900f2 1Gi RWO openebs-data 2m1s