이 문서에서는 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=30CIFS 클라이언트가 파일 및 디렉터리 특성을 캐시하는 시간을 늘리려면 (또는 그 이상) -
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 지원 리소스에 대해 알아봅니다.