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

O compartilhamento de dados entre contêineres é geralmente um componente necessário de serviços e aplicativos baseados em contêiner. Normalmente, você 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 mostra como criar um Servidor NFS em uma máquina virtual do Azure Ubuntu e configurar o cluster do 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 esta configuração:

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

Implantar o Servidor NFS em uma máquina virtual

  1. Para implantar um Servidor NFS na máquina virtual do Azure Ubuntu, copie o script Bash a seguir e salve-o no computador local. Substitua o valor da variável AKS_SUBNET pelo valor correto do cluster do AKS, ou o valor padrão especificado abrirá o Servidor NFS para todas as portas e conexões. Neste artigo, o arquivo é nomeado 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 se conectando ao Servidor NFS do cluster do AKS.

  2. Depois de criar a VM Linux, copie o arquivo criado na etapa anterior do computador 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 SSH (Secure Shell) 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
    

Conectar o cluster do AKS ao Servidor NFS

Você pode conectar-se ao Servidor NFS do cluster do 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 nas redes emparelhadas. Para saber como configurar o cluster na mesma VNet, consulte: Criando o cluster do AKS na VNet existente.

Depois que ambos os recursos estiverem na mesma VNet virtual ou em VNets emparelhadas, provisione um volume persistente e uma declaração de volume persistente no cluster do AKS. Os contêineres podem, em seguida, montar a unidade NFS no 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 Servidor NFS.

  2. Crie um arquivo pvc-azurefilesnfs.yaml com uma PersistentVolumeClaim que usa o PersistentVolume. Por exemplo:

    Importante

    O valor de 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 Servidor NFS.

Solução de problemas

Se você não puder se conectar ao servidor de um cluster do AKS, poderá ocorrer o problema de o diretório exportado, ou seu pai, não ter permissões suficientes para acessar a VM do Servidor NFS.

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

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

ls -l

Próximas etapas