Partilhar via


Criar e usar manualmente um servidor Linux NFS (Network File System) com o Serviço Kubernetes do Azure (AKS)

O compartilhamento de dados entre contêineres geralmente é um componente necessário de serviços e aplicativos baseados em contêineres. Você geralmente tem vários pods que precisam acessar as mesmas informações em um volume persistente externo. Embora os Arquivos do Azure sejam uma opção, a criação de um Servidor NFS em uma VM do Azure é outra forma de armazenamento compartilhado persistente.

Este artigo mostrará como criar um Servidor NFS em uma máquina virtual do Azure Ubuntu e configurar seu cluster AKS com acesso a esse sistema de arquivos compartilhado como um volume persistente.

Antes de começar

Este artigo pressupõe que você tenha o seguinte para dar suporte a essa configuração:

Se você implantar seu cluster AKS primeiro, o Azure preencherá automaticamente as configurações de rede virtual ao implantar sua VM do Azure Ubuntu, associando a VM do Ubuntu na mesma VNet. Se você quiser trabalhar com redes emparelhadas, consulte a documentação acima.

Implantando o Servidor NFS em uma máquina virtual

  1. Para implantar um Servidor NFS na máquina virtual do Azure Ubuntu, copie o seguinte script Bash e salve-o em sua máquina local. Substitua o valor da variável AKS_SUBNET pelo valor correto do cluster AKS, caso contrário, o valor padrão especificado abrirá o Servidor NFS para todas as portas e conexões. Neste artigo, o arquivo é chamado nfs-server-setup.sh.

    #!/bin/bash
    
    # This script should be executed on Linux Ubuntu Virtual Machine
    
    EXPORT_DIRECTORY=${1:-/export/data}
    DATA_DIRECTORY=${2:-/data}
    AKS_SUBNET=${3:-*}
    
    echo "Updating packages"
    apt-get -y update
    
    echo "Installing NFS kernel server"
    
    apt-get -y install nfs-kernel-server
    
    echo "Making data directory ${DATA_DIRECTORY}"
    mkdir -p ${DATA_DIRECTORY}
    
    echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}"
    mkdir -p ${EXPORT_DIRECTORY}
    
    echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}"
    mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY}
    
    echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory"
    chmod 777 ${EXPORT_DIRECTORY}
    
    parentdir="$(dirname "$EXPORT_DIRECTORY")"
    echo "Giving 777 permissions to parent: ${parentdir} directory"
    chmod 777 $parentdir
    
    echo "Appending bound directories into fstab"
    echo "${DATA_DIRECTORY}    ${EXPORT_DIRECTORY}   none    bind  0  0" >> /etc/fstab
    
    echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file"
    echo "/export        ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports
    echo "/export        localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports
    
    nohup service nfs-kernel-server restart
    

    O script inicia uma reinicialização do Servidor NFS e, posteriormente, você pode continuar com a conexão ao Servidor NFS a partir do cluster AKS.

  2. Depois de criar sua VM Linux, copie o arquivo criado na etapa anterior de sua máquina local para a VM usando o seguinte comando:

    scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
    
  3. Depois que o arquivo for copiado, abra uma conexão de shell seguro (SSH) com a VM e execute o seguinte comando:

    sudo ./nfs-server-setup.sh
    

    Se a execução falhar devido a um erro de permissão negada, defina a permissão de execução para todos executando o seguinte comando:

    chmod +x ~/nfs-server-setup.sh
    

Conectando o cluster AKS ao servidor NFS

Você pode se conectar ao Servidor NFS a partir do cluster AKS provisionando um volume persistente e uma declaração de volume persistente que especifica como acessar o volume. É necessário conectar os dois recursos nas mesmas redes virtuais ou emparelhadas. Para saber como configurar o cluster na mesma rede virtual, consulte: Criando cluster AKS na rede virtual existente.

Quando ambos os recursos estiverem na mesma VNet virtual ou emparelhada, provisione um volume persistente e uma declaração de volume persistente em seu cluster AKS. Os contêineres podem então montar a unidade NFS em seu diretório local.

  1. Crie um manifesto YAML chamado pv-azurefilesnfs.yaml com um PersistentVolume. Por exemplo:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: NFS_NAME
      labels:
        type: nfs
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      nfs:
        server: NFS_INTERNAL_IP
        path: NFS_EXPORT_FILE_PATH
    

    Substitua os valores de NFS_INTERNAL_IP, NFS_NAME e NFS_EXPORT_FILE_PATH pelas configurações reais do seu Servidor NFS.

  2. Crie um manifesto YAML chamado pvc-azurefilesnfs.yaml com um PersistentVolumeClaim que usa o PersistentVolume. Por exemplo:

    Importante

    O valor storageClassName precisa permanecer uma cadeia de caracteres vazia ou a declaração não funcionará.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: NFS_NAME
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 1Gi
      selector: 
        matchLabels:
          type: nfs
    

    Substitua o valor de NFS_NAME pela configuração real do seu Servidor NFS.

Resolução de Problemas

Se você não conseguir se conectar ao servidor a partir do cluster AKS, o problema pode ser o diretório exportado ou seu pai, não tem permissões suficientes para acessar a VM do Servidor NFS.

Verifique se o diretório de exportação e o diretório pai receberam 777 permissões.

Você pode verificar as permissões executando o seguinte comando e os diretórios devem ter permissões 'drwxrwxrwx ':

ls -l

Próximos passos