Partilhar via


Criar um StorageClass dos Ficheiros do Azure no Azure Red Hat OpenShift 4

Neste artigo, você criará um StorageClass para o Red Hat OpenShift 4 do Azure que provisiona dinamicamente o armazenamento ReadWriteMany (RWX) usando o Azure Files. Irá aprender a:

  • Configure os pré-requisitos e instale as ferramentas necessárias
  • Criar um Azure Red Hat OpenShift 4 StorageClass com o provisionador de arquivos do Azure

Se você optar por instalar e usar a CLI localmente, este tutorial exigirá que você esteja executando a CLI do Azure versão 2.6.0 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Antes de começar

Implantar um cluster do Azure Red Hat OpenShift 4 em sua assinatura, consulte Criar um cluster do Azure Red Hat OpenShift 4

Configurar a conta de armazenamento do Azure

Esta etapa cria um grupo de recursos fora do grupo de recursos do cluster do Azure Red Hat OpenShift (ARO). Este grupo de recursos contém os compartilhamentos do Azure Files que criaram o provisionador dinâmico do Azure Red Hat OpenShift.

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

Definir permissões

Definir permissões de grupo de recursos

A entidade de serviço ARO requer a permissão 'listKeys' no novo grupo de recursos da conta de armazenamento do Azure. Atribua a função 'Colaborador' para conseguir isso.

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

Definir permissões de cluster ARO

A conta de serviço de fichário de volume persistente OpenShift requer a capacidade de ler segredos. Crie e atribua uma função de cluster OpenShift para conseguir isso.

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

Criar StorageClass com o provisionador de Arquivos do Azure

Esta etapa cria um StorageClass com um provisionador de Arquivos do Azure. No manifesto StorageClass, os detalhes da conta de armazenamento são necessários para que o cluster ARO saiba examinar uma conta de armazenamento fora do grupo de recursos atual.

Durante o provisionamento de armazenamento, um segredo nomeado por secretName é criado para as credenciais de montagem. Em um contexto de multilocação, é altamente recomendável definir o valor para secretNamespace explicitamente, caso contrário, as credenciais da conta de armazenamento podem ser lidas por outros usuários.

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

As opções de montagem para Arquivos do Azure geralmente dependerão da carga de trabalho que você está implantando e dos requisitos do aplicativo. Especificamente para arquivos do Azure, há outros parâmetros que você deve considerar usar.

Parâmetros obrigatórios:

  • "mfsymlinks" para mapear links simbólicos para um formulário que o cliente pode usar
  • "noperm" para desativar as verificações de permissão no lado do cliente

Parâmetros recomendados:

  • "nossharesock" para desativar a reutilização de soquetes se o cliente já estiver conectado através de um ponto de montagem existente
  • "actimeo=30" (ou superior) para aumentar o tempo que o cliente CIFS armazena em cache atributos de arquivo e diretório
  • "nobrl" para desativar o envio de solicitações de bloqueio de intervalo de bytes para o servidor e para aplicativos que têm desafios com bloqueios posix

Alterar o StorageClass padrão (opcional)

O StorageClass padrão no ARO é chamado managed-premium e usa o provisionador azure-disk. Altere isso emitindo comandos de patch nos manifestos 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"}}}'

Verificar o Azure File StorageClass (opcional)

Crie um novo aplicativo e atribua armazenamento a ele.

Nota

Para usar o httpd-example modelo, você deve implantar seu cluster ARO com o segredo de pull habilitado. Para obter mais informações, consulte Obter um segredo de pull da 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

O arquivo test.txt também ficará visível por meio do Gerenciador de Armazenamento no portal do Azure.

Próximos passos

Neste artigo, você criou armazenamento dinâmico persistente usando o Microsoft Azure Files e o Azure Red Hat OpenShift 4. Aprendeu a:

  • Criar uma Conta de Armazenamento
  • Configurar um StorageClass em um cluster do Azure Red Hat OpenShift 4 usando o provisionador do Azure Files

Avance para o próximo artigo para saber mais sobre os recursos suportados pelo Azure Red Hat OpenShift 4.