NFSv3 Azure avec Docker

Introduction

Il y a quelques semaines, Azure a annoncé la disponibilité générale (GA) de l’utilisation des blobs avec le protocole NFS v3.Dans cet article, nous allons voir comment utiliser cette fonctionnalité pour monter un Azure Blob Storage en tant que volume Docker sous un point de montage en utilisant le protocole NFS v3.

1. NFS dans Azure

La premier chose à faire est de créer notre storage account en NFSv3. A savoir qu’il faut impérativement activer la fonctionnalité au moment de la création de notre SA (Storage Account).

La prise en charge du protocole NFS 3.0 impose que les blobs soient organisés dans un espace de noms hiérarchique

Pour des raisons de sécurité et pour se rapprocher au maximum d’une PRD nous allons le deployer en “private” pour qu’il soit uniquement accessible depuis notre subnet Azure.

On pensera bien à ajouter notre subnet pour qu’il soit autorisé à consommer notre storage en NFS

Ce qui nous donne en résumé ceci :

Maintenant que notre storage account a été créer nous allons ajouter notre container :

Attention par défaut, l’option n’est pas root squash. Ce qui nous donne la configuration suivante :

NFS in IaaS

Maintenant que notre partage NFS est disponible il nous reste plus qu’a le monter sur nos VMs avec la commande suivante :

mount -o sec=sys,vers=3,nolock,proto=tcp devnfs.blob.core.windows.net:/devnfs/docker /mnt/test

on oubliera pas d’installer les outils au préalable si ce n’est pas déjà fait :

sudo yum install nfs-utils

NFS in docker

Maintenant que nous avons tester que notre NFS fonctionne nous allons le monter dans notre container

Exemple d’un docker-compose.yml avec un volume NFS :

Si vous êtes sur centos est que vous rencontrez des problématiques autour de “cgroup”. Example

“WARNING: Your kernel does not support cgroup swap limit.”

Vous devez modifier votre grub de la facon suivante :

vi /etc/default/grub

Et on y ajoute la ligne suivante :

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Un petit sudo reboot est tout devrait rentrer dans l’ordre.

Sinon sans le reboot :

service docker stop
service containerd stop
cgroupfs-umount
cgroupfs-mount
service containerd start
service docker start

Conclusion

Azure Blob Storage est une solution qui offre une option peu coûteuse pour stocker des données dans le cloud. Attention tout de même le stockage comporte certaines limitations. L’utilisation de NFS sur le stockage Blob fonctionnera pour de nombreuses charges de travail qui ne nécessitent pas d’IOPS (opérations d’entrée/sortie par seconde). Pour des performances accrues on envisagera plus d’utiliser Azure NetApp.

Vous trouverez plus d’information sur la sécurité des blob ici : https://docs.microsoft.com/en-us/azure/storage/blobs/security-recommendations#networking

Un article sur les performances : https://docs.microsoft.com/en-us/azure/storage/blobs/network-file-system-protocol-support-performance

Terraform

Vous trouverez un exemple de code TF pour créer notre storage account NFS en privée sur le blog d’Alexandre COMET. Alexandre COMET

Si vous voulez plus d’information sur l’infrastructure vous pouvez voir mon repo à ce sujet : https://github.com/ravindrajob/InfraAtHome