애플리케이션에 대한 AKS(Azure Kubernetes Service)의 스토리지 옵션

AKS(Azure Kubernetes Service)에서 실행되는 애플리케이션은 데이터를 저장하고 검색해야 할 수 있습니다. 일부 애플리케이션 워크로드는 불필요한 비워진 노드에서 로컬의 빠른 스토리지를 사용할 수 있지만, 다른 애플리케이션 워크로드는 Azure 플랫폼 내에서 더 일반적인 데이터 볼륨에 유지되는 스토리지가 필요합니다.

여러 Pod는 다음과 같은 작업을 수행해야 할 수 있습니다.

  • 동일한 데이터 볼륨을 공유합니다.
  • Pod가 다른 노드에서 다시 예약되면 데이터 볼륨을 다시 연결합니다.

중요한 데이터 또는 애플리케이션 구성 정보를 수집하여 Pod에 저장해야 할 수도 있습니다.

이 문서에서는 AKS의 애플리케이션에 스토리지를 제공하는 핵심 개념을 소개합니다.

Storage options for applications in an Azure Kubernetes Services (AKS) cluster

사용 후 삭제 OS 디스크

기본적으로 Azure는 VM을 다른 호스트로 재배치할 때 데이터 손실을 방지하기 위해 가상 머신의 운영 체제 디스크를 Azure Storage에 자동으로 복제본(replica). 그러나 컨테이너는 로컬 상태를 유지하도록 설계되지 않았기 때문에 이 동작은 몇 가지 단점을 제공하면서 제한된 값을 제공합니다. 이러한 단점에는 노드 프로비저닝 속도가 느리고 읽기/쓰기 대기 시간이 높아지지만 이에 국한되지 않습니다.

반면 임시 OS 디스크는 임시 디스크와 마찬가지로 호스트 컴퓨터에만 저장됩니다. 이 구성을 사용하면 더 빠른 노드 크기 조정 및 클러스터 업그레이드와 함께 읽기/쓰기 대기 시간이 줄어듭니다.

참고 항목

OS에 대한 Azure 관리 디스크를 명시적으로 요청하지 않으면 AKS는 지정된 노드 풀 구성에 대해 가능한 경우 임시 OS로 기본 설정됩니다.

임시 OS 디스크에 대한 크기 요구 사항 및 권장 사항은 Azure VM 설명서에서 사용할 수 있습니다. 다음은 몇 가지 일반적인 크기 조정 고려 사항입니다.

  • 기본 OS 디스크 크기가 100GiB인 AKS 기본 VM 크기 Standard_DS2_v2 SKU를 사용하도록 선택한 경우 기본 VM 크기는 임시 OS를 지원하지만 캐시 크기는 86GiB에 불과합니다. 명시적으로 지정하지 않으면 이 구성은 관리 디스크로 기본 설정됩니다. 임시 OS를 요청하면 유효성 검사 오류가 발생합니다.

  • 60GiB OS 디스크를 사용하여 동일한 Standard_DS2_v2 SKU를 요청하는 경우 이 구성은 기본적으로 임시 OS로 설정됩니다. 요청된 크기 60GiB는 최대 캐시 크기인 86GiB보다 작습니다.

  • 100GB OS 디스크가 있는 Standard_D8s_v3 SKU를 선택하는 경우 이 VM 크기는 임시 OS를 지원하며 캐시 공간이 200GiB입니다. OS 디스크 형식을 지정하지 않으면 노드 풀은 기본적으로 임시 OS를 수신합니다.

최신 세대의 VM 시리즈에는 전용 캐시가 없고 임시 스토리지만 있습니다. 예를 들어 기본 OS 디스크 크기가 100GiB인 Standard_E2bds_v5 VM 크기를 선택한 경우 임시 OS 디스크를 지원하지만 75GB의 임시 스토리지만 있습니다. 이 구성은 명시적으로 지정하지 않으면 기본적으로 관리되는 OS 디스크가 됩니다. 임시 OS 디스크를 요청하면 유효성 검사 오류가 발생합니다.

  • 60GiB OS 디스크와 동일한 Standard_E2bds_v5 VM 크기를 요청하는 경우 이 구성은 기본적으로 임시 OS 디스크로 설정됩니다. 요청된 크기 60GiB는 최대 임시 스토리지인 75GiB보다 작습니다.

  • 100GiB OS 디스크가 있는 Standard_E4bds_v5 SKU를 선택하는 경우 이 VM 크기는 임시 OS를 지원하며 150GiB의 임시 스토리지가 있습니다. OS 디스크 유형을 지정하지 않으면 기본적으로 Azure는 임시 OS 디스크를 노드 풀에 프로비전합니다.

고객 관리형 키

AKS 클러스터에서 사용자 고유의 키를 사용하여 임시 OS 디스크에 대한 암호화를 관리할 수 있습니다. 자세한 내용은 AKS의 Azure 디스크에서 고객 관리형 키 사용을 참조 하세요.

볼륨

Kubernetes는 일반적으로 개별 Pod를 삭제 가능한 삭제 가능한 리소스로 처리합니다. 애플리케이션은 데이터를 사용하고 유지하는 데 사용할 수 있는 다양한 방법을 제공합니다. 볼륨Pod 간 및 애플리케이션 수명 주기를 통해 데이터를 저장, 검색 및 유지하는 방법을 나타냅니다.

기존 볼륨은 Azure Storage에서 지원되는 Kubernetes 리소스로 만들어집니다. Pod에 직접 할당할 데이터 볼륨을 수동으로 만들거나 Kubernetes에서 자동으로 만들 수 있습니다. 데이터 볼륨은 Azure Disk, Azure Files, Azure NetApp Files 또는 Azure Blob을 사용할 수 있습니다.

참고 항목

사용 중인 VM SKU에 따라 Azure Disk CSI 드라이버에 노드당 볼륨 제한이 있을 수 있습니다. 일부 고성능 VM(예: 16개 코어)의 경우 한도는 노드당 64개 볼륨입니다. VM SKU당 제한을 식별하려면 제공된 각 VM SKU에 대한 최대 데이터 디스크 열을 검토합니다. 제공되는 VM SKU 목록 및 해당 세부 용량 제한은 범용 가상 머신 크기를 참조 하세요.

Azure Files와 Azure NetApp Files 간의 워크로드에 가장 적합한지 확인하려면 Azure Files 및 Azure NetApp Files 비교 문서에 제공된 정보를 검토합니다.

Azure Disk

Azure Disk를 사용하여 Kubernetes DataDisk 리소스를 만듭니다. 디스크 유형에는 다음이 포함됩니다.

  • Ultra Disks
  • 프리미엄 SSD
  • 표준 SSD
  • 표준 HDD

대부분의 프로덕션 및 개발 워크로드에는 Premium SSD를 사용하세요.

Azure Disk는 ReadWriteOnce탑재되므로 단일 노드에서만 사용할 수 있습니다. 여러 노드의 Pod에서 동시에 액세스할 수 있는 스토리지 볼륨의 경우 Azure Files를 사용합니다.

Azure 파일

Azure Files를 사용하여 Azure Storage 계정에서 지원되는 SMB(서버 메시지 블록) 버전 3.1.1 공유 또는 NFS(네트워크 파일 시스템) 버전 4.1 공유를 Pod에 탑재합니다. Azure Files를 통해 여러 노드 및 Pod 간에 데이터를 공유하고 다음을 사용할 수 있습니다.

  • 고성능 SSD로 지원되는 Azure Premium 스토리지
  • 일반 HDD로 지원되는 Azure Standard 스토리지

Azure NetApp Files

  • Ultra Storage
  • Premium Storage
  • Standard Storage

Azure Blob Storage

Azure Blob Storage를 사용하여 Blob 스토리지 컨테이너를 만들고 NFS v3.0 프로토콜 또는 BlobFuse를 사용하여 이를 탑재합니다.

  • 블록 Blob

볼륨 유형

Kubernetes 볼륨은 정보를 저장하고 검색하기 위한 기존 디스크 이상을 나타냅니다. Kubernetes 볼륨은 컨테이너에서 사용하기 위해 Pod에 데이터를 삽입하는 방법으로 사용할 수도 있습니다.

Kubernetes의 일반적인 볼륨 유형은 다음과 같습니다.

emptyDir

일반적으로 Pod의 임시 공간으로 사용됩니다. Pod 내의 모든 컨테이너는 볼륨의 데이터에 액세스할 수 있습니다. 이 볼륨 형식에 기록된 데이터는 Pod의 수명 기간 동안에만 지속됩니다. Pod를 삭제하면 볼륨도 삭제됩니다. 이 볼륨은 일반적으로 기본 로컬 노드 디스크 스토리지를 사용하지만 노드의 메모리에만 존재할 수도 있습니다.

secret

비밀 볼륨을 사용하여 암호와 같은 중요한 데이터를 Pod에 삽입할 수 있습니다.

  1. Kubernetes API를 사용하여 비밀을 만듭니다.
  2. Pod 또는 배포를 정의하고 특정 비밀을 요청합니다.
    • 비밀은 필요한 예약된 Pod가 있는 노드에만 제공됩니다.
    • 비밀은 디스크에 기록되지 않고 tmpfs에 저장됩니다.
  3. 비밀을 요구하는 노드에서 마지막 Pod를 삭제하면 해당 비밀이 노드의 tmpfs에서 삭제됩니다.
    • 비밀은 지정된 네임스페이스 내에 저장되며 동일한 네임스페이스 내의 Pod에서만 액세스됩니다.

configMap

configMap을 사용하여 애플리케이션 구성 정보와 같은 키-값 쌍 속성을 Pod에 삽입할 수 있습니다. 애플리케이션 구성 정보를 Kubernetes 리소스로 정의하여 배포할 때 Pod의 새 인스턴스에 쉽게 업데이트하고 적용합니다.

다음과 같이 비밀을 사용하는 것과 같습니다.

  1. Kubernetes API를 사용하여 ConfigMap을 만듭니다.
  2. Pod 또는 배포를 정의할 때 ConfigMap을 요청합니다.
    • 구성지도 지정된 네임스페이스 내에 저장되며 동일한 네임스페이스 내의 Pod에서만 액세스됩니다.

영구적 볼륨

Pod 수명 주기의 일부로 정의되고 생성된 볼륨은 Pod를 삭제할 때까지만 존재합니다. 유지 관리 이벤트 중에 한 Pod가 다른 호스트에, 특히 StatefulSets에 다시 예약되는 경우 Pods에서 스토리지가 남아 있을 것으로 예상합니다. PV(영구 볼륨)는 Kubernetes API에서 만들고 관리하는 스토리지 리소스로, 개별 Pod의 수명 외에 존재할 수 있습니다.

Azure Disk 또는 Azure Files를 사용하여 PersistentVolume을 제공할 수 있습니다. 볼륨 섹션에서 설명한 대로, 데이터 또는 성능 계층에 대한 동시 액세스의 필요성에 따라 Disks 또는 Files를 선택하는 경우가 많습니다.

Persistent volumes in an Azure Kubernetes Services (AKS) cluster

클러스터 관리자는 PersistentVolume을 정적으로 만들거나 Kubernetes API 서버에서 볼륨을 동적으로 만들 수 있습니다. Pod가 예약되고 현재 사용할 수 없는 스토리지를 요청하는 경우 Kubernetes는 기본 Azure Disk 또는 File Storage를 만들고 Pod에 연결할 수 있습니다. 동적 프로비저닝은 StorageClass사용하여 만들어야 하는 Azure 스토리지 유형을 식별합니다.

Important

두 운영 체제 간의 파일 시스템 지원 차이로 인해 Windows 및 Linux Pod에서 영구 볼륨을 공유할 수 없습니다.

스토리지 클래스

Premium 및 Standard와 같은 다양한 스토리지 계층을 정의하려면 StorageClass만들 수 있습니다.

회수 정책은 reclaimPolicy도 정의합니다. 영구 볼륨을 삭제하면 reclaimPolicy는 기본 Azure Storage 리소스의 동작을 제어합니다. 기본 스토리지 리소스는 삭제하거나 향후 Pod에서 사용하기 위해 보관할 수 있습니다.

CSI(컨테이너 스토리지 인터페이스) 드라이버를 사용하는 클러스터의 경우 다음 추가 StorageClasses가 만들어집니다.

스토리지 클래스 설명
managed-csi Azure StandardSSD LRS(로컬 중복 스토리지)를 사용하여 관리 디스크를 만듭니다. 회수 정책을 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure Disk가 삭제됩니다. 또한 스토리지 클래스는 영구 볼륨을 확장 가능하도록 구성합니다. 새 크기로 영구 볼륨 클레임을 편집하기만 하면 됩니다.
managed-csi-premium Azure Premium LRS(로컬 중복 스토리지)를 사용하여 관리 디스크를 만듭니다. 회수 정책을 다시 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure Disk가 삭제됩니다. 마찬가지로 이 스토리지 클래스를 사용하면 영구 볼륨을 확장할 수 있습니다.
azurefile-csi Azure Standard Storage를 사용하여 Azure 파일 공유를 만듭니다. 회수 정책을 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure 파일 공유가 삭제됩니다.
azurefile-csi-premium Azure Premium Storage를 사용하여 Azure 파일 공유를 만듭니다. 회수 정책을 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure 파일 공유가 삭제됩니다.
azureblob-nfs-premium Azure Premium Storage를 사용하여 Azure Blob 스토리지 컨테이너를 만들고 NFS v3 프로토콜을 사용하여 연결합니다. 회수 정책을 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure Blob Storage 컨테이너가 삭제됩니다.
azureblob-fuse-premium Azure Premium Storage를 사용하여 Azure Blob 스토리지 컨테이너를 만들고 BlobFuse를 사용하여 연결합니다. 회수 정책을 사용하면 사용된 영구 볼륨이 삭제될 때 기본 Azure Blob Storage 컨테이너가 삭제됩니다.

영구 볼륨에 대해 StorageClass를 지정하지 않는 한 기본 StorageClass가 사용됩니다. 영구 볼륨을 요청할 때는 볼륨이 필요한 스토리지를 적절히 사용하도록 해야 합니다.

Important

Kubernetes 버전 1.21부터 AKS는 기본적으로 CSI 드라이버만 사용하고 CSI 마이그레이션이 사용하도록 설정됩니다. 기존 트리 내 영구 볼륨은 버전 1.26부터 계속 작동하지만 AKS는 더 이상 파일 및 디스크에 프로비전된 트리 내 드라이버 및 스토리지를 사용하여 만든 볼륨을 지원하지 않습니다.

클래스는 default .와 동일합니다 managed-csi.

를 사용하여 kubectl다른 요구 사항에 맞게 StorageClass를 만들 수 있습니다. 다음 예제에서는 프리미엄 Managed Disks를 사용하고 Pod를 삭제할 때 기본 Azure Disk를 유지해야 한다고 지정합니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_ZRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

참고 항목

AKS는 기본 스토리지 클래스를 조정하고 해당 스토리지 클래스에 대한 변경 내용을 덮어씁니다.

스토리지 클래스에 대한 자세한 내용은 Kubernetes의 StorageClass를 참조 하세요.

영구적 볼륨 클레임

PersistentVolumeClaim은 특정 StorageClass의 스토리지, 액세스 모드 및 크기를 요청합니다. 기존 리소스가 정의된 StorageClass를 기반으로 클레임을 수행할 수 없는 경우 Kubernetes API 서버는 기본 Azure Storage 리소스를 동적으로 프로비전할 수 있습니다.

볼륨이 Pod에 연결되면 Pod 정의에 볼륨 탑재가 포함됩니다.

Persistent volume claims in an Azure Kubernetes Services (AKS) cluster

사용 가능한 스토리지 리소스가 스토리지를 요청하는 Pod에 할당되면 PertantVolume은 PertantVolumeClaim에 바인딩됩니다. 영구 볼륨은 클레임에 1:1 매핑됩니다.

다음 예제 YAML 매니페스트는 managed-premium StorageClass를 사용하고 디스크 5Gi 크기를 요청하는 영구 볼륨 클레임을 보여 줍니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium-retain
  resources:
    requests:
      storage: 5Gi

Pod 정의를 만들 때는 다음도 지정합니다.

  • 원하는 스토리지를 요청하는 영구 볼륨 클레임입니다.
  • 애플리케이션에서 데이터를 읽고 쓸 수 있는 volumeMount 입니다.

다음 YAML 매니페스트 예제에서는 이전 영구 볼륨 클레임을 사용하여 /mnt/azure에서 볼륨을 탑재하는 방법을 보여줍니다.

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

Windows 컨테이너에서 볼륨을 탑재하려면 드라이브 문자 및 경로를 지정합니다. 예시:

...      
       volumeMounts:
        - mountPath: "d:"
          name: volume
        - mountPath: "c:\k"
          name: k-dir
...

다음 단계

관련 모범 사례는 AKS 및 AKS 스토리지 고려 사항의 스토리지 및 백업에 대한 모범 사례를 참조하세요.

CSI 드라이버를 사용하는 방법을 보려면 다음 방법 문서를 참조하세요.

핵심 Kubernetes 및 AKS 개념에 대한 자세한 내용은 다음 문서를 참조하세요.