다음을 통해 공유


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 계정 설정

이 단계에서는 ARO(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

권한 설정

리소스 그룹 권한 설정

ARO 서비스 주체에는 새 Azure Storage 계정 리소스 그룹에 대한 'listKeys' 권한이 있어야 합니다. 이를 위해 ‘기여자’ 역할을 할당합니다.

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

ARO 클러스터 권한 설정

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 매니페스트에서는 ARO 클러스터가 현재 리소스 그룹 외부의 스토리지 계정을 볼 수 있도록 스토리지 계정에 대한 세부 정보가 필요합니다.

스토리지를 프로비저닝하는 동안 탑재 자격 증명에 대해 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 파일의 경우 사용해야 할 다른 매개 변수가 있습니다.

필수 매개 변수:

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

권장 매개 변수:

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

기본 StorageClass 변경(선택 사항)

ARO의 기본 StorageClass는 managed premium이라고 하며 azure-disk 프로비저닝 프로그램을 사용합니다. StorageClass 매니페스트에 대해 patch 명령을 실행하여 이를 변경합니다.

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템플릿을 사용 하려면 풀 암호를 사용하도록 설정하여 ARO 클러스터를 배포해야 합니다. 자세한 내용은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 지원 리소스에 대해 알아봅니다.