[SOLVED] Einbinden eines CephFS in einen Container und Publikation dieses CephFS als SMB/CIFS Share für Windows Clients

Stephan Becker

New Member
Feb 17, 2023
10
4
3
Hallo zusammen.

Aktuell versuche ich in einem LXC Container eines meiner beiden CephFS per fstab einzubinden.
In der Doku steht, das dies nicht mit einem Fuse Mount passieren sollte sondern mit einem Bind mount der einen Fuse Mount auf dem Host einbindet.

Einen Fuse Mount auf dem Host für des Cephfs mit Namen 'bsbfs' habe ich mit ...
ceph-fuse /mnt/bsbfs --client_mds_namespace bsbfs
>2023-02-27T00:42:34.976+0100 7f655a40d200 -1 init, newargv = 0x5603cd128720 newargc=15
>ceph-fuse[530312]: starting ceph client
>ceph-fuse[530312]: starting fuse
erfolgreich erzeugt.

Wenn ich mir den Inhalt des Verzeichnisses /mnt/bsbfs anschaue dann sind da auch Dateien enthalten - fein.
Verusche ich dieses Verzeichnis nun im Container zu mounten dann sehe ich keine Inhalte.

In der fstab habe ich aktuell (u.a.) folgendes versucht ....
/mnt/bsbfs /mnt/bsbfs fuse.bindfs bind 0 0
/mnt/bsbfs /mnt/bsbfs none defaults,bind 0 0

Läuft ohne Fehler durch nur klappt nicht.
Weder nach Boot noch mit mount -a

Frage:
Wie muss der Eintrag in der fstab aussehen, das mein 2 tes cephfs mit Namen 'bsbfs' unter /mnt/bsbs im container zur Verfügung gestellt wird.

Zweite Frage:
Ist meine Annahme richtig, das der oben skizzierte Fuse Mount auf all meinen Cluster Hosts in gleicher Form gesetzt werden muss, damit eine Migration des LXC Containers über alle Hosts hinweg funktioniert?
Und wenn das nötig ist, wovon ich ausgehe, wie sieht dann der /etc/fstab Eintrag für diesen Fuse Mount aus, den ich auf allen Hosts des Clusters setzen muss, damit nach einem Reboot des Hosts dieser Mount auch wieder da ist.

Hintergrund:
Ziel der ganzen Aktion ist es, in meinem Heimnetz das zweite CephFS 'bsbfs' als Samba Share ausfallsicher zu publizieren, damit die Windows Rechner meiner Famile auf die Daten im Storage Cluster zugreifen können.
Den Samba Dienst plane ich aktuell per Webmin oder per Nextcloud aufzusetzen.
In beiden Fälle ist geplant das Storage Verzeichnis per Mount in den Server einzubinden der den Share publziert.

Hier im Forum gibt es zu diesem Thema viel interssantes zu lesen, doch eine klare Aussage wie genau man den Proxmox Host und einen Debian11 LXC oder VM Gast auf dem Cluster nun konfigurieren muss um einen CephFS Mount des Clusters migrationsfähig in diesem nutzen zu können habe ich nicht gefunden. Zumindest keine die fuktioniert hat.
Ein wenig schade das die Doku hier nicht tief genug ins Detail geht, ist doch genau so was zu tun ein Highlight des Hyper converged Proxmox/Cheph Clusters.

Und wenn das mit mehreren CephFS nicht geht, dann würde ich mich auch darüber freuen zu erfahren wie man nun das default CephFS auf diese Art einbindet.

Interssant in diesem Zusammenhang ist, das alle CephFS (und alle andern Storages auch) auf allen Hosts bereits unter /mnt/pve/... gemounted sind. Ein Fuse Mount auf dem Host scheint mir daher gar nicht mehr nötig zu sein, den den oder etwas ähnliches gibts es ja augenscheinlich schon out of the box. Frage wäre jetzt hier nur, wie bekomme ich das Verzeichnis /mnt/pve/bsbfs bzw. /mnt/pve/cephfs vom Host in den Container ... ?

----
Aktuell habe ich Proxmox Virtual Environment 7.3-6 auf 4 Knoten mit QDevice laufen.
Im Container liefert mir ceph -v folgendes:
ceph version 17.2.5 (e04241aa9b639588fa6c864845287d2824cb6b55) quincy (stable)

Die Proxmox Pakete sind im LXC Gast wie folgt nach Anleitung installiert und aktuell.
- Add Repository
nano /etc/apt/sources.list.d/ceph.list
deb http://download.proxmox.com/debian/ceph-quincy bullseye main
- Add gpg key
wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
- Update Proxmox Packages
apt update -y
apt dist-upgrade -y
apt install -y ceph-common

Danke und viele Grüße
Stephan
 
Last edited:
  • Like
Reactions: inta
Hm,
das hatte ich auch schon versucht.
Allerdings bietet mir Proxmox als Storage hier die CephFS nicht an.
Es gibt bei mir da nur den von mir eingerichteten RBDPool und local.

2023-02-27 15_09_34-NVIDIA GeForce Overlay DT.png

In beiden Fällen legt Proxmox eine neue Disk an und bindet sie ein.
Damit könnte ich natürlich ein großes Laufwerk für meine Daten anlegen und dieses dann als Samba Share publizieren.
Doch das ist nicht das was ich hier erreichen möchte.

Wie kann ich hiermit ein CephFS mounten?
Entweder ist da woanders noch was einzustellen oder man kann hier generall nur ein Blockdevice mounten.
Die Pflichtangabe 'Disk size (GB)' ist ein starkes Indiz das ein CephFS hiermit nicht eingebunden werden kann.
Wenn nicht hier wie dann?

Und wenn das mit Containern nicht geht wie geht es dann mit einer VM?
Denn Mount Point Dialog gibt es da ja nicht.
 
Last edited:
Das mit dem Mount-Point hat funktioniert.
Danke.

Für alle die hier vorbeikommen ein paar Details zum Thema:
Um ein CephFS auf dem Proxmox Cluster als Samba Share zu publizieren kann man folgendes tun:

1.) Erzeugen eines privilegierten LXC Containers
Ich habe dafür aktuell das von Proxmox zur Verfügung gestelle Debian11 Template (debian-11-standard_11.6-1_amd64.tar.zst) verwendet.
Wichtig ist, das ein PRIVILEGIERTER Container erzeugt wird. Diese Einstellung kann später zwar in der Container Config noch geändert werden, doch damit habe ich dann Probleme bei Start des Samba Dienstes bekommen.
Ohne dieses Kriterien läuft zwar der Samba Dienst (smbd) auch, doch man hat dann keine Schreibrechte im gemounteten Ceph Filesystem, egal was man in der Samba Konfiguration in Webmin auch einstellt.
Besser direkt privilegiert aufsetzen. Dann klappte es bei mir.

Hier ein Screen Shot meiner aktuellen Einstellungen des Containers in der GUI:

1677583445713.png

Ganz spannend in diesem Zusammenhang auch das 'nesting' Feature.
Wenn ihr bei der Anmeldung an einem Container extrem lange warten müsst bis das Prompt erscheint, einfach mal versuchen das Nesting Flag (wieder) zu setzen. Ist eigentlich Default...
Bei mir hat sich das Problem damit erledigt. Warum das so ist habe ich noch nicht herausgefunden.

2.) Installieren von Webmin
Im Grunde ein Standardinstallation ohne Schnörkel. Findet sich so oder so ähnlich auch im Netz.

Code:
sudo apt install gnupg2 -y
sudo wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://download.webmin.com/download/repository sarge contrib" >/etc/apt/sources.list.d/webmin.list'
sudo apt update -y
sudo apt install webmin -y
sudo reboot

Danach sollte Webmin auf Port 10000 erreichbar sein.
Bei Problemen:

Code:
sudo systemctl enable webmin
sudo systemctl start webmin
sudo systemctl status webmin

und ggf. schauen ob der Dienst läuft.

Code:
ss -antpl | grep 10000

Anmelden mit den root Credentials und dann Samba einrichten und konfigurieren.
Anleitungen dazu gibts im Netz genug. Hier nur eine kurze Checkliste was alles zu tun ist.

- Install Samba Windows File Sharing Package
- Set Windows Networking - Set Workgropup
- Set Windows Networking - Set Server Name
- Convert Users - Select user to Convert
- Create new Fileshare - Share=<yourShareName>, Dirctory to share=<MountPoint>, Creat Directory=y
- Edit File Share - Security - Writeable=Y
- Edit File Share - File Permissions - Unix User=root, Unix Group=root
- Restart Samba Server

Wichtig ist hier das die Schreibrechte=Y und User/Group auf root/root gesetzt wird.
Mit Eingabe von '\\<YourIP>' im Windows Explorer kann man dann schon testen ob mit Samba alles i.O. ist.
Wenn ja, noch schnell einen SnapShot als Fallback anlegen - Man weis ja nie...
Zudem ist das jetzt noch möglich, nach dem nächsten Schritt geht das nicht mehr.

3.) ChephFS mounten

Jetzt muss der Mount Point in der Container Config eingetragen werden (Das war der wesentliche Hinweis: DANKE!).
Dazu geht man in der Host Console auf dem der Container läuft in des PVE Filesystem und passt die Container config an.

Code:
cd /etc/pve/lxc
nano <lxc-id>.conf

Bei mir hieß die Datei 104.conf, in die ich dann meine beiden CephFS wie folgt eingetragen habe:
Code:
mp0: /mnt/pve/bsbfs,mp=/mnt/bsbfs,backup=0,shared=1
mp1: /mnt/pve/cephfs,mp=/mnt/cephfs,backup=0,shared=1

Nach der Änderung sah das dann so aus:

Code:
arch: amd64
cores: 1
hostname: FileStore
memory: 1024
mp0: /mnt/pve/bsbfs,mp=/mnt/bsbfs,backup=0,shared=1
mp1: /mnt/pve/cephfs,mp=/mnt/cephfs,backup=0,shared=1
nameserver: 192.168.x.x
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=66:66:xx:xx:xx:xx,ip=dhcp,tag=xx,type=veth
net1: name=eth1,bridge=vmbr0,firewall=1,hwaddr=7E:77:xx:xx:xx:xx,ip=dhcp,tag=xx,type=veth
onboot: 1
ostype: debian
parent: WebminSambaInstall
rootfs: RBDPool:vm-104-disk-0,size=8G
searchdomain: fritz.box
startup: order=5
swap: 1024
tags: rbd-storage

Wo man das einträgt ist egal.
Auskommentieren geht mit '#'.
Das ist hilfreich wenn man später noch mal einen neuen Snapshot machen möchte.
Mit aktiven Mount/s geht das nicht.
Ich brauche diese Snaps nicht, da meine Config nach erfolgreicher Einrichtung aller Nutzer praktisch statisch ist.
Im Katastrophenfall restoriere ich diesen Samba Server aus dem Backup das ich extern halte.

INFO:
In meinem Container habe ich zwei Netze und ufw als zuzsätzliche Firewall mit entsprechenden Regeln konfiguriert.
Daher die zwei 'net' Einträge.
Wenn ufw aktiv ist braucht es die nötigen Freigaben:

Code:
#Optional
sudo ufw allow ssh

sudo ufw allow samba
sudo ufw allow cifs
sudo ufw allow 10000
sudo ufw enable
sudoedit /etc/ufw/applications.d/samba

Gibt es Samba als app nicht, einfach mit:

Code:
sudoedit /etc/ufw/applications.d/samba

folgende App anlegen

Code:
[Samba]
title=LanManager-like file and printer server for Unix
description=The Samba software suite is a collection of programs that implements the SMB/CIF$
ports=137,138/udp|139,445/tcp

Nach einem Reboot sollten jetzt Dateien im CephFS Mount (/mnt/cepfs) sichtbar sein.

In meinem Fall einfach prüftbar mit einem 'ls' da ich beide FS zum Test noch für Proxmox Storage Elemente aktiviert habe, was ein paar Unterverzeichnisse erzeugt.

Code:
stephan@FileStore:/mnt/cephfs$ ls -al
total 4
drwxr-xr-x 5 root root    3 Feb 28 09:22 .
drwxr-xr-x 4 root root 4096 Feb 28 00:40 ..
drwxr-xr-x 3 root root   76 Feb 28 09:53 dump
drwxr-xr-x 2 root root    0 Feb 27 14:01 snippets
drwxr-xr-x 4 root root    2 Feb 25 21:08 template

4.) HA einrichten und Testen

Zum Abschluss jetzt nur noch per GUI die HA Funktion konfigurieren.
Ich habe danach einfach mal den Knoten mit dem laufenden Container wiederholt heruntergefahren, während ich Massen an Dateien mit dem Windows Explorer ins FS lud.
Ausser einem kurzen pausieren und in einem Fall einer Fehlermeldung mit anschließendem erfolgreichen Retry war davon nichts zu merken.
Insofern scheint alles so zu funktionieren wie geplant.

Das wars.
Damit sollte jeder, der ein CephFS auf einem Proxmox Cluster als Samba Share für Windows Clients ausfallsicher publizieren will in der Lage sein, einen entsprechenden LXC Container als Samba Server einzurichten ohne größere Änderungen am Host machen zu müssen.
Insbesondere ist es nicht nötig den Container als CephFS Client einzurichten und in diesem auch denn Failover Betrieb mit mehreren Monitoren sicherzustellen.
Dadurch, das das Proxmox CephFS bereits in allen Host des Clusters als lokaler Storage Mount dezentral verfügbar ist, braucht man diese Komplexität nicht mehr zu lösen - Das hat das Proxmox Dev Team für uns schon erledigt.
Eine tolle Sache wie ich meine.

Schade nur, das es in der offiziellen Doku hierzu m.W. keine wirklich einfach findbaren Infos und Beipiel Lösungen gibt.
Ich habe jetzt fast 4 volle Tage damit verbracht eine einfach einzurichtende, Release sichere und stabil funktionierende Lösung für dieses 'Standard' Problem zu finden.
Das es am Ende so einfach sein würde - Die Hoffnung hatte ich fast aufgebenen.
Vielleicht baut das einer vom Staff noch in die Doku ein.
Könnnte sicher vielen helfen.
;-)

Have fun.
Stephan
 
Last edited:
  • Like
Reactions: inta and gurubert
Kleine Ergänzug:
Den Aufwand für die manuelle Container und Webmin Installation für die SMB/CIFS Shares kann man sich sparen.
In den direkt nutzbaren Proxmox LXC Images gibt es u.a. auch die Turnkey Fileserver Appliance.
Die macht genau das - Webmin als SMB/CIFS Provider.
Fix und Fertig. Muss man nur noch als privilegierten Contianer aufsetzen und den oben beschriebenen mp0: Eintrag setzen und den/die Shares konfigurieren und gut.
Einfacher gehts jetzt wohl nimmer. richtig?
:cool:
 
Last edited:
  • Like
Reactions: inta

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!