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

Neste artigo, crias uma classe de armazenamento para Azure Red Hat OpenShift 4 que provisiona armazenamento dinamicamente usando o Ficheiros do Azure. Você aprende a:

  • Configura os pré-requisitos e instala as ferramentas necessárias
  • Crie uma classe de armazenamento Azure Red Hat OpenShift 4 com o Ficheiros do Azure provisioner

Se optar por instalar e usar a CLI localmente, este tutorial requer a versão 2.6.0 ou posterior do CLI do Azure. Para localizar a versão, execute o az --version comando. Se precisar de instalar ou atualizar, veja Instalar a CLI do Azure.

Antes de começar

Implemente um cluster Azure Red Hat OpenShift 4 na sua subscrição. Para mais informações, veja Criar um cluster Azure Red Hat OpenShift 4.

Configurar uma conta de armazenamento no Azure

Esta etapa cria um grupo de recursos fora do grupo de recursos do cluster Azure Red Hat OpenShift. Este grupo de recursos contém as partilhas Ficheiros do Azure que criaram o provisionador dinâmico 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

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

Para permissões de grupos de recursos, o principal de serviço requer a listKeys permissão sobre o novo grupo de recursos da conta de armazenamento do Azure. Atribui o papel de contribuidor.

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 agrupador de volume persistente requer a capacidade de ler segredos. Criar e atribuir um papel de cluster no Azure Red Hat 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

Crie uma classe de armazenamento com o Ficheiros do Azure provisioner

Este passo cria uma classe de armazenamento com um Ficheiros do Azure provisioner. Deve incluir os detalhes da conta de armazenamento no manifesto da classe de armazenamento. Com estes detalhes, o cluster sabe que deve analisar uma conta de armazenamento fora do grupo de recursos atual.

Durante o provisionamento de armazenamento, a especificação secretName indica um segredo utilizado para as credenciais de montagem. Num contexto multiinquilino, defina explicitamente o valor do secretNamespace parâmetro. Caso contrário, outros utilizadores podem 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 Ficheiros do Azure geralmente dependem da carga de trabalho que estás a implementar e dos requisitos da aplicação. Especificamente para o Ficheiros do Azure, considera usar outros parâmetros.

Parâmetros obrigatórios:

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

  • noperm para desativar as verificações de permissões do lado do cliente.

Parâmetros recomendados:

  • nossharesock para desligar a reutilização de sockets se o cliente já estiver ligado através de um ponto de montagem existente.

  • actimeo=30 (ou superior) para aumentar o tempo durante o qual o cliente do protocolo Common Internet File System (CIFS) coloca em cache os atributos de ficheiros e diretórios.

  • nobrl para desativar o envio de solicitações de bloqueio de intervalo de bytes para o servidor. Este parâmetro é também recomendado para aplicações que enfrentam desafios com bloqueios no Portable Operating System Interface for Unix (POSIX).

Alterar a classe de armazenamento padrão (opcional)

A classe de armazenamento predefinida chama-se premium gerida e utiliza o azure-disk aprovisionador. Altere esta configuração emitindo comandos de correção contra os 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 Ficheiros do Azure (opcional)

Crie um novo aplicativo e atribua armazenamento a ele.

Observação

Para usar o httpd-example modelo, você deve implantar seu cluster com o segredo de pull habilitado. Para obter mais informações, consulte Obter um Red Hat pull secret.

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

Pode ver o ficheiro test.txt através do Explorador de Armazenamento no portal do Azure.