다음을 통해 공유


Azure Operator Nexus 스토리지 어플라이언스

Azure Operator Nexus는 컴퓨팅 서버, 스토리지 어플라이언스 및 네트워크 패브릭 디바이스와 같은 기본 구문을 기반으로 빌드되었습니다. Azure Operator Nexus 스토리지 어플라이언스는 랙의 영구 스토리지 어플라이언스를 나타냅니다.

각 스토리지 어플라이언스에는 단일 스토리지 풀을 제공하기 위해 집계되는 스토리지 디바이스가 여러 개 포함되어 있습니다. 그런 다음, 이 스토리지 풀은 볼륨 여러 개로 조각화되어 컴퓨팅 서버에 블록 스토리지 디바이스로 표시됩니다. 컴퓨팅 서버는 이러한 블록 스토리지 디바이스를 영구 워크로드 스토리지로 사용할 수 있습니다. 각 Azure Operator Nexus 클러스터는 모든 테넌트 워크로드에서 공유되는 단일 스토리지 어플라이언스로 프로비전됩니다.

Azure Operator Nexus 인스턴스의 스토리지 어플라이언스는 Azure 리소스로 표시됩니다. 운영자는 다른 Azure 리소스와 같은 특성을 볼 수 있는 액세스 권한을 부여받습니다.

Kubernetes 스토리지 클래스

Azure Operator Nexus 소프트웨어 Kubernetes 스택은 두 가지 형식의 스토리지를 제공합니다. 운영자는 Kubernetes StorageClass 메커니즘을 통해 스토리지를 선택합니다.

Important

Azure Operator Nexus는 임시 볼륨을 지원하지 않습니다. Nexus는 이 문서에 설명된 영구 볼륨 스토리지 메커니즘이 최고 수준의 성능 및 가용성을 제공하기에 모든 워크로드 볼륨에 사용할 것을 권장합니다. Azure Operator Nexus의 모든 스토리지는 스토리지 어플라이언스에서 제공됩니다. 운영 체제 미설치 컴퓨터 디스크에서 제공하는 스토리지는 지원되지 않습니다.

StorageClass: nexus-volume

기본 스토리지 메커니즘인 nexus-volume은 대부분의 사용자에게 선호되는 선택입니다. 최고 수준의 성능과 가용성을 제공합니다. 그러나 여러 작업자 노드에서 동시에 볼륨을 공유할 수는 없습니다. 운영자는 볼륨 리소스를 통해 Azure API 및 포털을 사용하여 이러한 볼륨에 액세스하고 관리할 수 있습니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: testPvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 107Mi
  storageClassName: nexus-volume
  volumeMode: Block
  volumeName: testVolume
status:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 107Mi
  phase: Bound

StorageClass: nexus-shared

공유 파일 시스템이 필요한 경우에는 nexus-shared 스토리지 클래스를 사용할 수 있습니다. 이 스토리지 클래스는 동일한 Nexus Kubernetes 클러스터의 여러 Pod가 동시에 동일한 볼륨에 액세스하고 공유할 수 있도록 하여 고가용성 공유 스토리지 솔루션을 제공합니다. nexus 공유 스토리지 클래스는 고가용성 NFS 스토리지 서비스에서 지원됩니다. 이 NFS 스토리지 서비스(현재 최대 크기 1TiB로 제한되는 스토리지 풀)는 CSN(Cloud Service Network)당 사용할 수 있습니다. NFS 스토리지 서비스는 CSN 리소스를 만들 때 자동으로 배포됩니다. CSN에 연결된 모든 Nexus Kubernetes 클러스터는 이 공유 스토리지 풀에서 영구 볼륨을 프로비전할 수 있습니다. nexus-shared는 RWO(Read Write Once) 및 RWX(Read Write Many) 액세스 모드를 모두 지원합니다. 즉, 워크로드 애플리케이션은 이러한 액세스 모드 중 하나를 사용하여 공유 스토리지에 액세스할 수 있습니다.

Nexus-shared가 Nexus Kubernetes 클러스터에서 워크로드에 대한 볼륨을 프로비전하는 방법을 보여 주는 다이어그램

그림: Nexus 공유 볼륨

대부분의 애플리케이션에서는 nexus-shared 성능과 가용성만으로도 충분하지만 I/O 요구 사항이 많은 워크로드에서는 최적의 성능을 위해 nexus-volume 옵션을 사용하는 것이 좋습니다.

RWO(Read Write Once)

RWO(읽기 쓰기 한 번) 모드에서는 한 번에 하나의 노드 또는 클레임자만 nexus 공유 볼륨을 탑재할 수 있습니다. ReadWriteOnce 액세스 모드를 계속 사용하면 Pod가 같은 노드에서 실행 중일 때 Pod 여러 개가 볼륨에 액세스할 수 있습니다.

apiVersion: v1
items:
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: test-pvc
    namespace: default
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 5Gi
    storageClassName: nexus-shared
    volumeMode: Filesystem
    volumeName: TestVolume
  status:
    accessModes:
    - ReadWriteOnce
    capacity:
      storage: 5Gi
    phase: Bound

RWX(Read Write Many)

RWX(읽기 쓰기 다) 모드에서 여러 노드 또는 클레임자가 동시에 nexus 공유 볼륨을 탑재할 수 있습니다.

apiVersion: v1
items:
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: test-pvc
    namespace: default
  spec:
    accessModes:
    - ReadWriteMany
    resources:
      requests:
        storage: 5Gi
    storageClassName: nexus-shared
    volumeMode: Filesystem
    volumeName: TestVolume
  status:
    accessModes:
    - ReadWriteMany
    capacity:
      storage: 5Gi
    phase: Bound

예제

nexus-volume 스토리지 클래스를 사용하는 RWO(Read Write Once)

이 예제 매니페스트는 ReadWriteOnce 모드에서 nexus-volume Storage 클래스를 사용하여 PersistentVolumeClaimTemplate을 사용하여 StatefulSet을 만듭니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: test-sts-rwo
  labels:
    app: test-sts-rwo
spec:
  serviceName: test-sts-rwo-svc
  replicas: 3
  selector:
    matchLabels:
      app: test-sts-rwo
  template:
    metadata:
      labels:
        app: test-sts-rwo
    spec:
      containers:
      - name: busybox
        command:
        - "/bin/sh"
        - "-c"
        - while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
        image: busybox
        volumeMounts:
        - name: test-volume-rwo
          mountPath: /mnt/
  volumeClaimTemplates:
    - metadata:
        name: test-volume-rwo
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 10Gi
        storageClassName: nexus-volume

StatefulSet의 각 Pod에는 하나의 PersistentVolumeClaim이 생성됩니다.

# kubectl get pvc
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-volume-rwo-test-sts-rwo-0   Bound    pvc-e41fec47-cc43-4cd5-8547-5a4457cbdced   10Gi       RWO            nexus-volume   8m17s
test-volume-rwo-test-sts-rwo-1   Bound    pvc-1589dc79-59d2-4a1d-8043-b6a883b7881d   10Gi       RWO            nexus-volume   7m58s
test-volume-rwo-test-sts-rwo-2   Bound    pvc-82e3beac-fe67-4676-9c61-e982022d443f   10Gi       RWO            nexus-volume   12s
# kubectl get pods -o wide -w
NAME             READY   STATUS    RESTARTS   AGE     IP              NODE                                         NOMINATED NODE   READINESS GATES
test-sts-rwo-0   1/1     Running   0          8m31s   10.245.231.74   nexus-cluster-6a8c4018-agentpool2-md-vhhv6   <none>           <none>
test-sts-rwo-1   1/1     Running   0          8m12s   10.245.126.73   nexus-cluster-6a8c4018-agentpool1-md-27nw4   <none>           <none>
test-sts-rwo-2   1/1     Running   0          26s     10.245.183.9    nexus-cluster-6a8c4018-agentpool1-md-4jprt   <none>           <none>
# kubectl exec test-sts-rwo-0 -- cat /mnt/hostname.txt
Thu Nov  9 21:57:25 UTC 2023 -- test-sts-rwo-0
Thu Nov  9 21:57:26 UTC 2023 -- test-sts-rwo-0
Thu Nov  9 21:57:27 UTC 2023 -- test-sts-rwo-0

# kubectl exec test-sts-rwo-1 -- cat /mnt/hostname.txt
Thu Nov  9 21:57:19 UTC 2023 -- test-sts-rwo-1
Thu Nov  9 21:57:20 UTC 2023 -- test-sts-rwo-1
Thu Nov  9 21:57:21 UTC 2023 -- test-sts-rwo-1

# kubectl exec test-sts-rwo-s -- cat /mnt/hostname.txt
Thu Nov  9 21:58:32 UTC 2023 -- test-sts-rwo-2
Thu Nov  9 21:58:33 UTC 2023 -- test-sts-rwo-2
Thu Nov  9 21:58:34 UTC 2023 -- test-sts-rwo-2

nexus-shared 스토리지 클래스를 사용하는 RWX(Read Write Many)

다음 매니페스트는 ReadWriteMany 모드에서 nexus-shared 스토리지 클래스를 사용하여 PVC(PersistentVolumeClaim)로 배포를 만듭니다. 생성된 PVC는 배포의 모든 Pod에서 공유되며 모든 Pod에서 동시에 읽고 쓰는 데 사용될 수 있습니다.

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-volume-rwx
spec:
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 3Gi
  storageClassName: nexus-shared
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-deploy-rwx
  name: test-deploy-rwx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-deploy-rwx
  template:
    metadata:
      labels:
        app: test-deploy-rwx
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: kubernetes.azure.com/agentpool
                operator: Exists
                values: []
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: busybox
        command:
        - "/bin/sh"
        - "-c"
        - while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
        image: busybox
        volumeMounts:
        - name: test-volume-rwx
          mountPath: /mnt/
      volumes:
      - name: test-volume-rwx
        persistentVolumeClaim:
          claimName: test-volume-rwx
...

적용된 배포에는 동일한 PVC를 공유하는 세 개의 복제본이 있습니다.

# kubectl get pvc
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-volume-rwx                  Bound    pvc-32f0717e-6b63-4d64-a458-5be4ffe21d37   3Gi        RWX            nexus-shared   6s
# kubectl get pods -o wide -w
NAME                             READY   STATUS    RESTARTS   AGE     IP               NODE                                         NOMINATED NODE   READINESS GATES
test-deploy-rwx-fdb8f49c-86pv4   1/1     Running   0          18s     10.245.224.140   nexus-cluster-6a8c4018-agentpool1-md-s2dh7   <none>           <none>
test-deploy-rwx-fdb8f49c-9zsjf   1/1     Running   0          18s     10.245.126.74    nexus-cluster-6a8c4018-agentpool1-md-27nw4   <none>           <none>
test-deploy-rwx-fdb8f49c-wdgw7   1/1     Running   0          18s     10.245.231.75    nexus-cluster-6a8c4018-agentpool2-md-vhhv6   <none>           <none>

다음 출력에서는 모든 Pod가 같은 PVC에 작성됩니다.

# kubectl exec test-deploy-rwx-fdb8f49c-86pv4 -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

# kubectl exec test-deploy-rwx-fdb8f49c-9zsjf -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

# kubectl exec test-deploy-rwx-fdb8f49c-wdgw7 -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

볼륨 크기 제한 및 용량 관리

nexus-volume 및 nexus-shared를 사용하여 만든 PVC에는 최소 및 최대 클레임 크기가 있습니다.

스토리지 클래스 최소 PVC 크기 최대 PVC 크기
nexus-volume 1MiB 12TiB
nexus-shared None 1TiB

Important

사용량 한도에 도달하는 볼륨은 사용 중인 워크로드에서 디스크 공간 오류가 발생합니다. 워크로드 요구 사항에 적합한 볼륨 크기를 프로비전해야 합니다. 스토리지 어플라이언스 및 모든 NFS 서버에서 해당 백분율 스토리지 사용량을 모니터링해야 합니다. 사용 가능한 메트릭 목록에 설명된 메트릭을 사용하여 이 작업을 수행할 수 있습니다.

  • nexus-volume 및 nexus 공유 PVC에는 모두 요청된 스토리지 용량이 소비 한도로 적용됩니다. 볼륨은 연결된 PVC 요청보다 더 많은 스토리지를 사용할 수 없습니다.
  • 모든 물리적 볼륨은 씬 프로비전됩니다. 필요한 경우 스토리지 어플라이언스의 총 스토리지 사용량을 모니터링하고 유지 관리 작업을 수행하여 스토리지 공간을 확보해야 합니다.
  • 요청된 크기가 최소 크기보다 작거나 지원되는 최대 볼륨 크기보다 큰 경우 nexus-volume PVC 프로비저닝 요청이 실패합니다.
  • Nexus 공유 볼륨은 지원 NFS 서버에서 논리적으로 씬 프로비저닝됩니다. 이 NFS 서버의 고정 용량은 1TiB입니다.
    • 1TiB 이상의 스토리지를 요청했음에도 불구하고 nexus 공유 PVC를 프로비전할 수 있지만 1TiB만 사용할 수 있습니다.
    • 용량 요청의 합계가 1TiB보다 큰 PVC 집합을 프로비전할 수 있습니다. 그러나 1TiB의 소비 한도가 적용됩니다. 연결된 PV 집합은 1TiB 이상의 스토리지를 사용하지 않을 수 있습니다.

스토리지 어플라이언스 상태

다음 속성은 스토리지 어플라이언스 작동 상태를 반영합니다.

  • Status는 상태를 스토리지 어플라이언스에서 파생됨으로 나타냅니다. 상태는 Available, Error 또는 Provisioning일 수 있습니다.

  • Provisioning State는 스토리지 어플라이언스의 현재 프로비전 상태를 제공합니다. 프로비전 상태는 Succeeded, Failed 또는 InProgress일 수 있습니다.

  • Capacity는 사용된 스토리지 어플라이언스 용량과 총 스토리지 어플라이언스 용량을 제공합니다.

  • Remote Vendor Management는 스토리지 어플라이언스에 원격 공급업체 관리를 사용하거나 사용하지 않도록 설정했는지 여부를 나타냅니다.

스토리지 어플라이언스 작업

  • 스토리지 어플라이언스 나열: 제공된 리소스 그룹이나 구독에 있는 스토리지 어플라이언스를 나열합니다.
  • 스토리지 어플라이언스 표시: 제공된 스토리지 어플라이언스의 속성을 가져옵니다.
  • 스토리지 어플라이언스 업데이트: 제공된 스토리지 어플라이언스의 속성이나 태그를 업데이트합니다.
  • 스토리지 어플라이언스에 원격 공급업체 관리 사용/사용 안 함: 제공된 스토리지 어플라이언스에 원격 공급업체 관리를 사용하거나 사용하지 않도록 설정합니다.

참고 항목

고객은 스토리지 어플라이언스를 직접 만들거나 삭제할 수 없습니다. 이러한 리소스는 클러스터 수명 주기를 구현하기 위해서만 생성됩니다. 구현에서는 모든 사용자의 만들기 또는 삭제 요청을 차단하고 내부/애플리케이션 기반 만들기 또는 삭제 작업만 허용합니다.