Kubernetes 클러스터에서 Pod 스토리지 관리

완료됨

Azure Stack HCI의 AKS에 배포하려는 대부분의 애플리케이션은 상태 비저장이지만, Contoso 개발자는 자사가 컨테이너화하려고 계획 중인 일부 상태 저장 워크로드를 식별했습니다. 이 요구 사항을 수용하려면 Kubernetes 영구 볼륨을 사용하여 실행 중인 Pod의 상태를 유지하는 지원을 살펴보아야 합니다.

Azure Stack HCI의 AKS에 대한 영구 볼륨 구현

기본적으로 개별 Pod는 상태 비저장 리소스로 작동합니다. 배포에 포함된 Pod가 어떠한 이유로 실패하면 Kubernetes 스케줄러는 일치하는 기능을 제공하는 새 Pod를 자동으로 만들어 컨테이너화된 애플리케이션을 계속 사용할 수 있도록 유지합니다. 그러나 상태를 유지하기 위한 추가 프로비전이 없으면 실패한 Pod가 작업 중이었을 수도 있는 모든 데이터가 손실됩니다.

일부 시나리오에서는 Pod가 데이터와 상태를 유지하고 공유할 수 있어야 합니다. 이러한 시나리오에서는 개별 Pod의 수명이 끝난 후에도 컨테이너화된 워크로드의 데이터를 저장할 수 있도록 돕는 클러스터 리소스인 영구 볼륨을 사용할 수 있습니다.

Kubernetes 클러스터에서 볼륨을 구현하려면 특정 스토리지 클래스에 대해 영구 볼륨 클레임을 정의해야 합니다. 스토리지 클래스는 기본 스토리지의 특징(예: 공유 액세스의 지원 또는 성능)을 나타냅니다. 영구 볼륨 클레임에는 필요한 액세스 모드 및 볼륨 크기에 대한 정보가 포함됩니다. Kubernetes API 서버는 영구 볼륨 클레임 정의를 사용하여 배포된 Pod에 필요할 때마다 적절한 스토리지 볼륨을 동적으로 프로비전합니다.

참고

Azure Stack HCI의 AKS는 VHDX 기반 디스크를 구현하는 기본 스토리지 클래스를 제공합니다.

해당하는 매니페스트 파일에 영구 볼륨 사양을 포함하여 배포된 Pod의 스토리지 요구 사항을 정의합니다. 동적 프로비저닝을 트리거하는 것 외에도 Pod 내에서 볼륨을 자동으로 탑재합니다.

예를 들어 다음 매니페스트는 기본 스토리지 클래스를 사용하는 비공유 디스크 100GB의 영구 볼륨 클레임을 정의합니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: pvc-akshci
spec:
 accessModes:
 - ReadWriteOnce
 resources:
  requests:
   storage: 100Gi

이 영구 볼륨 클레임은 이 매니페스트를 YAML 파일로 저장하고 kubectl 명령줄 유틸리티를 실행하여 해당하는 리소스를 생성함으로써 구현할 수 있습니다(여기서 pvc_definition.yaml은 YAML 파일을 나타냄).

kubectl create -f pvc_definition.yaml

Pod에 대해 해당하는 영구 볼륨은 다음 매니페스트를 사용하여 정의할 수 있습니다.

kind: Pod
apiVersion: v1
metadata:
  name: win-appserver
spec:
  containers:
    - name: win-appserver
      image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 
      volumeMounts:
      - name: akshciscsi
        mountPath: "/mnt/akshciscsi"
  volumes:
    - name: akshciscsi
      persistentVolumeClaim:
        claimName: pvc-akshci
  nodeSelector:
     kubernetes.io/os: windows

또한 이 영구 볼륨은 Pod 매니페스트를 YAML 파일로 저장하고 kubectl 명령줄 유틸리티를 실행하여 볼륨을 프로 비전하고 탑재함으로써 구현할 수 있습니다(여기서 pv_definition.yaml은 YAML 파일을 나타냄).

kubectl create -f pv_definition.yaml

결과 Pod에는 mountPath 요소의 값에 따라 지정된 파일 시스템 경로 내에서 100GB의 볼륨이 탑재됩니다.

영구 볼륨 클레임을 삭제하려면 현재 사용 중인 모든 Pod 및 배포를 먼저 삭제해야 합니다. 이 시점에는 kubectl delete PersistentVolumeClaim 명령과 그 다음의 영구 볼륨 클레임 이름을 사용하여 작업을 완료할 수 있습니다.

지식 점검

1.

Contoso 개발자는 상태 저장 워크로드를 컨테이너화하기 위해 작업 중이며, 따라서 여러분은 Azure Stack HCI의 AKS 배포를 사용하여 영구 Pod 스토리지의 구현을 테스트하려고 합니다. 먼저 무엇을 정의해야 할까요?