Criar uma classe de armazenamento Arquivos do Azure no Red Hat OpenShift no Azure 4

Neste artigo, você criará uma classe de armazenamento para Red Hat OpenShift no Azure 4 que provisiona dinamicamente o armazenamento usando Arquivos do Azure. Você aprenderá como:

  • Configurar os pré-requisitos e instalar as ferramentas necessárias
  • Criar uma classe de armazenamento Red Hat OpenShift no Azure 4 com o provisionador de Arquivos do Azure

Se você optar por instalar e usar a CLI localmente, este tutorial exigirá o CLI do Azure versão 2.6.0 ou posterior. Para localizar a versão, execute o comando az --version. Se você precisar instalar ou atualizar, consulte Instale o CLI do Azure.

Antes de começar

Implante um cluster Red Hat OpenShift no Azure 4 em sua assinatura. Para obter mais informações, consulte Criar um cluster Red Hat OpenShift no Azure 4.

Configure uma conta de armazenamento do Azure

Esta etapa cria um grupo de recursos fora do grupo de recursos do cluster de Red Hat OpenShift no Azure. Esse grupo de recursos contém os compartilhamentos de Arquivos do Azure que criaram o provisionador dinâmico Red Hat OpenShift no Azure.

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

Defina permissões de grupo de recursos e defina permissões de cluster.

Para permissões de grupo de recursos, a entidade de serviço requer a permissão listKeys no novo grupo de recursos da conta de armazenamento do Azure. Atribua a função de colaborador.

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

Para permissões de cluster, a conta de serviço do associador de volume persistente precisa da capacidade de ler segredos. Crie e atribua uma função de cluster no Red Hat OpenShift no Azure.

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 uma classe de armazenamento com o provisionador do Arquivos do Azure

Esta etapa cria uma classe de armazenamento com um provisionador de Arquivos do Azure. Você deve incluir os detalhes da conta de armazenamento no manifesto da classe de armazenamento. Com esses detalhes, o cluster sabe examinar uma conta de armazenamento fora do grupo de recursos atual.

Durante o provisionamento de armazenamento, a especificação secretName especifica um segredo usado nas credenciais de montagem. Em um contexto multilocatário, defina explicitamente o valor do parâmetro secretNamespace. Caso contrário, outros usuários poderão ler as credenciais da conta de armazenamento.

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 dependem da carga de trabalho que você está implantando e dos requisitos do aplicativo. Especificamente para Arquivos do Azure, considere usar outros parâmetros.

Parâmetros obrigatórios:

  • mfsymlinks para mapear symlinks para um formulário que o cliente pode usar.

  • noperm para desabilitar 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 por um ponto de montagem existente.

  • actimeo=30 (ou superior) para aumentar o tempo em que o cliente CIFS (Common Internet File System) Protocol armazena em cache os atributos de arquivo e diretório.

  • nobrl para desativar o envio de solicitações de bloqueio de intervalo de bytes para o servidor. Esse parâmetro também é recomendado para aplicativos que têm desafios com bloqueios na Interface do Sistema Operacional Portátil para Unix (POSIX).

Alterar a classe de armazenamento padrão (opcional)

A classe de armazenamento padrão é chamada premium gerenciado, e usa o provisionador azure-disk. Altere essa configuração emitindo comandos de patch nos manifestos da classe de armazenamento.

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 a classe de armazenamento Arquivos do Azure (opcional)

Criar um novo aplicativo e atribuir armazenamento a ele.

Observação

Para usar o template httpd-example, você deve implantar seu cluster com o pull secret habilitado. Para obter mais informações, consulte Obtenha 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

Você pode ver o arquivo test.txt por meio do Gerenciador de Armazenamento no portal do Azure.