콘텐츠로 이동

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는 배포 성공을 의미합니다.

ebs.yaml을 다운로드합니다.

다음 명령을 실행하여 설치합니다:

kubectl apply -f ebs.yaml

2. 배포 확인

2.1 Pod 상태 확인

kubectl get pods -n kube-system -l release=localpv

출력 결과:

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 스케줄링 시 생성

다음 명령을 실행하여 설치합니다:

kubectl apply -f sc-data.yaml

생성 성공 여부를 확인합니다:

kubectl get sc

결과:

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

다음 명령을 실행하여 설치합니다:

kubectl apply -f test-pvc.yaml

상태를 확인합니다:

kubectl get pvc

pvc 상태는 다음과 같습니다:

NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc   Pending                                      openebs-data   18s

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

다음 명령을 실행하여 설치합니다:

kubectl apply -f test-deploy.yaml

상태를 확인합니다:

kubectl get pods -l app=nginx-pvc

Pod 상태:

NAME                         READY   STATUS    RESTARTS   AGE
nginx-pvc-6654f7478c-sjm88   1/1     Running   0          7m5s

pvc 상태:

NAME        STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc    Bound     pvc-4023bf79-235e-4310-8fb6-a4f13b3900f2   1Gi        RWO            openebs-data   2m1s

제거 방법

helm uninstall -n kube-system localpv
kubectl delete -f ebs.yaml

문서 평가

이 페이지가 도움이 되었나요?