다음을 통해 공유


Azure Red Hat OpenShift 4에서 Azure Files StorageClass 만들기

이 문서에서는 Azure Files를 사용하여 RWX(ReadWriteMany) 스토리지를 동적으로 프로비전하는 Azure Red Hat OpenShift 4용 StorageClass를 만듭니다. 당신은 다음을 배우게 됩니다:

  • 필수 구성 요소 설정 및 필요한 도구 설치
  • Azure File 프로비저닝 프로그램을 사용하여 Azure Red Hat OpenShift 4 StorageClass 만들기

CLI를 로컬로 설치하여 사용하도록 선택하는 경우 이 자습서에서는 Azure CLI 버전 2.6.0 이상을 실행해야 합니다. 버전을 찾으려면 az --version 명령을 실행합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

시작하기 전 주의 사항:

구독에 Azure Red Hat OpenShift 4 클러스터 배포는 Azure Red Hat OpenShift 4 클러스터 만들기를 참조하세요.

Azure Storage 계정 설정

이 단계에서는 Azure Red Hat OpenShift 클러스터의 리소스 그룹 외부에 리소스 그룹을 만듭니다. 이 리소스 그룹에는 Azure Red Hat OpenShift의 동적 프로비저닝기를 만든 Azure Files 공유가 포함되어 있습니다.

AZURE_FILES_RESOURCE_GROUP=aro_azure_files
LOCATION=eastus

az group create -l $LOCATION -n $AZURE_FILES_RESOURCE_GROUP

AZURE_STORAGE_ACCOUNT_NAME=aroazurefilessa

az storage account create \
  --name $AZURE_STORAGE_ACCOUNT_NAME \
  --resource-group $AZURE_FILES_RESOURCE_GROUP \
  --kind StorageV2 \
  --sku Standard_LRS

권한 설정

리소스 그룹 권한 설정

서비스 주체에는 listKeys 새 Azure Storage 계정 리소스 그룹에 대한 권한이 필요합니다. 기여자 역할을 할당합니다.

ARO_RESOURCE_GROUP=aro-rg
CLUSTER=cluster
ARO_SERVICE_PRINCIPAL_ID=$(az aro show -g $ARO_RESOURCE_GROUP -n $CLUSTER --query servicePrincipalProfile.clientId -o tsv)

az role assignment create --role Contributor --scope /subscriptions/mySubscriptionID/resourceGroups/$AZURE_FILES_RESOURCE_GROUP --assignee $ARO_SERVICE_PRINCIPAL_ID

클러스터 권한 설정

OpenShift 영구 볼륨 바인더 서비스 계정에는 비밀을 읽을 수 있는 기능이 필요합니다. OpenShift 클러스터 역할을 만들고 할당합니다.

ARO_API_SERVER=$(az aro list --query "[?contains(name,'$CLUSTER')].[apiserverProfile.url]" -o tsv)

oc login -u kubeadmin -p $(az aro list-credentials -g $ARO_RESOURCE_GROUP -n $CLUSTER --query=kubeadminPassword -o tsv) $ARO_API_SERVER

oc create clusterrole azure-secret-reader \
  --verb=create,get \
  --resource=secrets

oc adm policy add-cluster-role-to-user azure-secret-reader system:serviceaccount:kube-system:persistent-volume-binder

Azure Files 프로비저닝 프로그램을 사용하여 StorageClass 만들기

이 단계에서는 Azure Files 프로비저닝 프로그램을 사용하여 StorageClass를 만듭니다. StorageClass 매니페스트 내에서 클러스터가 현재 리소스 그룹 외부의 스토리지 계정을 볼 수 있도록 스토리지 계정의 세부 정보가 필요합니다.

스토리지를 프로비저닝하는 동안 탑재 자격 증명에 대해 secretName에 의해 이름이 지정된 비밀이 생성됩니다. 다중 테넌트 컨텍스트에서 다른 사용자가 스토리지 계정 자격 증명을 secretNamespace 읽을 수 있도록 명시적으로 값을 설정하는 것이 좋습니다.

cat << EOF >> azure-storageclass-azure-file.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azure-file
provisioner: file.csi.azure.com
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - noperm
parameters:
  location: $LOCATION
  secretNamespace: kube-system
  skuName: Standard_LRS
  storageAccount: $AZURE_STORAGE_ACCOUNT_NAME
  resourceGroup: $AZURE_FILES_RESOURCE_GROUP
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF

oc create -f azure-storageclass-azure-file.yaml

Azure Files 탑재 옵션은 일반적으로 배포하는 워크로드 및 애플리케이션의 요구 사항에 따라 달라집니다. 특히 Azure 파일의 경우 사용해야 할 다른 매개 변수가 있습니다.

필수 매개 변수:

  • mfsymlinks 클라이언트에서 사용할 수 있는 양식에 symlink를 매핑하려면
  • noperm 클라이언트 쪽에서 권한 검사를 사용하지 않도록 설정하려면

권장 매개 변수:

  • nossharesock 클라이언트가 기존 탑재 지점을 통해 이미 연결된 경우 소켓 재사용을 사용하지 않도록 설정
  • actimeo=30 CIFS 클라이언트가 파일 및 디렉터리 특성을 캐시하는 시간을 늘리려면 (또는 그 이상)
  • nobrl 서버 및 posix 잠금에 문제가 있는 애플리케이션에 대한 바이트 범위 잠금 요청 전송을 사용하지 않도록 설정

기본 StorageClass 변경(선택 사항)

기본 StorageClass on은 managed-premium이라고 하며 azure-disk 프로비저닝기를 사용합니다. StorageClass 매니페스트에 대해 패치 명령을 실행하여 이 설정을 변경합니다.

oc patch storageclass managed-premium -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

oc patch storageclass azure-file -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

Azure 파일 StorageClass 확인(선택 사항)

새 애플리케이션을 만들고 스토리지를 할당합니다.

비고

템플릿을 httpd-example 사용하려면 끌어오기 비밀을 사용하도록 설정된 클러스터를 배포해야 합니다. 자세한 내용은Red Hat 풀 암호 가져오기를 참조하세요.

oc new-project azfiletest
oc new-app httpd-example

#Wait for the pod to become Ready
curl $(oc get route httpd-example -n azfiletest -o jsonpath={.spec.host})

#If you have set the storage class by default, you can omit the --claim-class parameter
oc set volume dc/httpd-example --add --name=v1 -t pvc --claim-size=1G -m /data --claim-class='azure-file'

#Wait for the new deployment to rollout
export POD=$(oc get pods --field-selector=status.phase==Running -o jsonpath={.items[].metadata.name})
oc exec $POD -- bash -c "echo 'azure file storage' >> /data/test.txt"

oc exec $POD -- bash -c "cat /data/test.txt"
azure file storage

test.txt 파일은 Azure Portal의 Storage Explorer를 통해 표시됩니다.

다음 단계

이 문서에서는 Microsoft Azure Files 및 Azure Red Hat OpenShift 4를 사용하여 동적 영구 스토리지를 만들었습니다. 당신은 다음을 배우셨습니다:

  • 스토리지 계정 만들기
  • Azure Files 프로비저닝 프로그램을 사용하여 Azure Red Hat OpenShift 4 클러스터에서 StorageClass 구성

다음 문서로 진행하여 Azure Red Hat OpenShift 4 지원 리소스에 대해 알아봅니다.