Compartilhar via


Criar uma StorageClass dos Arquivos do Azure no Red Hat OpenShift no Azure 4

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

  • Configurar os pré-requisitos e instalar as ferramentas necessárias
  • Criar um StorageClass do 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á a execução da CLI do Azure versão 2.6.0 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Antes de começar

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

Configurar uma conta de Armazenamento do Azure

Essa etapa irá criar um grupo de recursos fora do grupo de recursos do cluster do Red Hat OpenShift no Azure (ARO). Esse grupo de recursos contém os compartilhamentos dos Arquivos do Azure que criaram provisionador dinâmico do 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

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 do vinculador de volume persistente do 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

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

Durante o provisionamento de armazenamento, um segredo nomeado secretname é criado para as credenciais de montagem. Em um contexto multilocação, é altamente recomendável definir um valor para secretNamespace explicitamente, caso contrário as credenciais da conta de armazenamento poderão 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 os Arquivos do Azure de modo geral irão depender da carga de trabalho que você está implantando e dos requisitos do aplicativo. Especificamente para arquivos do Azure, existem outros parâmetros que você deve pensar em usar.

Parâmetros obrigatórios:

  • "mfsymlinks" para mapear symlinks para um formulário que o cliente pode usar
  • "noperm" para desabilitar as verificações de permissão no lado do cliente

Parâmetros recomendados:

  • "nossharesock" para desabilitar a reutilização de soquetes se o cliente já estiver conectado por meio de um ponto de montagem existente
  • "actimeo=30" (ou mais alto) para aumentar o tempo pelo qual o cliente do CIFS armazena em cache os atributos de arquivo e diretório
  • "nobrl" para desabilitar o envio de solicitações de bloqueio de intervalo de bytes para o servidor e para aplicativos que enfrentam desafios com bloqueios POSIX

Alterar o StorageClass padrão (opcional)

O StorageClass padrão no ARO é chamado de managed-premium e usa o provisionador de disco do Azure. Altere isso emitindo comandos de patch em relação aos manifestos de 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 StorageClass de arquivos do Azure (opcional)

Criar um novo aplicativo e atribuir armazenamento a ele.

Observação

Para usar o modelo httpd-example, você deve implantar o cluster ARO com o segredo de pull habilitado. Para obter mais informações, consulte Obter uma segredo de pull do 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 estará visível por meio do Gerenciador de armazenamento, no portal do Azure.

Próximas etapas

Neste artigo, você criou armazenamento persistente dinâmico usando Arquivos do Microsoft Azure e Red Hat OpenShift no Azure 4. Você aprendeu a:

  • Criar uma conta de armazenamento
  • Configurar uma StorageClass em um cluster Red Hat OpenShift no Azure 4 usando o provisionador Arquivos do Azure

Continue para o próximo artigo para aprender sobre recursos suportados pelo Red Hat OpenShift no Azure 4.