cephにあるデータ(cephfs)にsmbプロトコルでアクセスしたい.
単純に選択肢としては
かなと思うのだが、cephadmで提供されているsambaコンテナで用意できるみたい. sambaコンテナはこれみたい https://github.com/samba-in-kubernetes/samba-container
準備としてはcephfsへ繋がる keyring と sambaコンテナの設定書を用意する必要がある.
sambaコンテナの設定書は特定のpoolに置きます. httpで参照でもいいのですが、同じcephの中で置けるようにします.
[root@ceph01 ~]# ceph osd pool create .smb --yes-i-really-mean-it
[root@ceph01 ~]# ceph osd pool application enable .smb rados
(確認)
[root@ceph01 ~]# ceph osd lspools
1 .mgr
2 emfs-meta
3 emfs-data
4 .smb
[root@ceph01 ~]#
「.」を含むので「--yes-i-really-mean-it」が必要みたい.
sambaコンテナからcephfsへ繋がるためのkeyringです。名称を「client.samba.gw」にしてます。
[root@ceph01 ~]# ceph auth add client.samba.gw mon 'allow r' osd 'allow *' mds 'allow *'
[root@ceph01 ~]# ceph auth get client.samba.gw
[client.samba.gw]
key = AQChWBtop3gHERAAM5SZsfTwrNsRSQwn7JwFHQ==
caps mds = "allow *"
caps mon = "allow r"
caps osd = "allow *"
[root@ceph01 ~]#
mon.yamlやmgr.yamlのようにcephadmで起動するコンテナを設計します
ファイル名を「smb.yaml」として下記を保存します
service_type: smb
service_id: emfssmb
placement:
hosts:
- ceph02
spec:
cluster_id: emfssmb
config_uri: rados://.smb/emfssmb/scc.toml
include_ceph_users:
- client.samba.gw
「include_ceph_users」はsamba コンテナがcephにアクセスする際のkeyring名になるみたい.
「config_uri: rados://.smb/emfssmb/scc.toml」は先ほど作った「.smb」(オブジェクトストレージ)の中に置かれるファイルを参照してます.
次にsambaの設定書(scc.toml)を作ります
参照先 https://github.com/samba-in-kubernetes/sambacc/blob/master/docs/configuration.md
sambaのコンテナに読み込ませるものなのですが、Samba Container Configurationというフォーマットでtoml形式あるいはjsonやyamlで記載します.
ここではフツーのsamba共有で、netbios名は SAMBA、共有名がemfs-smb、共有フォルダは/shareで saber(uid:2000,gid:2000) と illya(2001,2001)のみアクセス可能ってな内容にしてます
&size(10){samba-adが既に建てられているなら、adのメンバーサーバとしてadに参加して、adにあるアカウントを継承できるみたい};
下記を「scc.toml」として保存します
samba-container-config = "v0"
[configs.emfssmb]
instance_name = "SAMBA"
globals = [ "default" ]
shares = [ "emfs" ]
[shares.emfs.options]
path = "/"
"vfs objects" = "ceph"
"ceph:filesystem" = "emfs"
"ceph:config_file" = "/etc/ceph/ceph.conf"
"ceph:user_id" = "samba.gw"
"valid users" = "saber, illya"
[globals.default.options]
security = "user"
"server min protocol" = "SMB2"
"load printers" = "no"
printing = "bsd"
"printcap name" = "/dev/null"
"disable spoolss" = "yes"
"guest ok" = "no"
[[users.all_entries]]
name = "saber"
uid = 2000
gid = 2000
password = "saber"
[[users.all_entries]]
name = "illya"
uid = 2001
gid = 2000
password = "illya"
[[groups.all_entries]]
name = "fgo"
gid = 2000
これを 「config_uri: rados://.smb/emfssmb/scc.toml」 として読み込ませるために rados コマンドでファイルを格納します.
[root@ceph01 ~]# rados --pool=.smb --namespace=emfssmb put scc.toml ./scc.toml
(確認)
[root@ceph01 ~]# rados --pool=.smb --namespace=emfssmb ls
scc.toml
[root@ceph01 ~]# rados --pool=.smb --namespace=emfssmb get scc.toml /tmp/a <-- /tmp/a に書き出し
これで下記のようにdeployすれば使えるようになります
ceph orch apply -i smb.yaml
コンテナが起動すると下記のように起動確認ができます.
[root@ceph01 ~]# ceph orch ps
NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID
:
smb.emfssmb.ceph02.biwdrx ceph02 *:445 running (111s) 108s ago 18m 3758k - <unknown> ac8062e0901a b5b2fc4bb96d
起動したsambaコンテナでのsmb.confを確認するには、その稼働しているノード(ceph02)にてコンテナの中に入って「testparam -s」で得られます
[root@ceph02 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
:
b5b2fc4bb96d quay.io/samba.org/samba-server:devbuilds-centos-amd64 --samba-debug-lev... 2 minutes ago Up 2 minutes 0.0.0.0:445->445/tcp, 445/tcp ceph-edf9287e-2b54-11f0-941d-bc24112ffd94-smb-emfssmb-ceph02-biwdrx
8a7b3d16cb73 quay.io/samba.org/samba-server:devbuilds-centos-amd64 --samba-debug-lev... 2 minutes ago Up 2 minutes 0.0.0.0:445->445/tcp, 445/tcp ceph-edf9287e-2b54-11f0-941d-bc24112ffd94-smb-emfssmb-ceph02-biwdrx-configwatch
[root@ceph02 ~]#
[root@ceph02 ceph]# podman exec -it ceph-edf9287e-2b54-11f0-941d-bc24112ffd94-smb-emfssmb-ceph02-biwdrx /bin/bash
[root@emfssmb-ceph02 /]#
[root@emfssmb-ceph02 /]# testparm -s
(略
# Global parameters
[global]
disable spoolss = Yes
load printers = No
netbios name = SAMBA
printcap name = /dev/null
registry shares = Yes
security = USER
server min protocol = SMB2
idmap config * : backend = tdb
printing = bsd
[emfs]
path = /
valid users = saber illya
vfs objects = ceph
ceph:user_id = samba.gw
ceph:config_file = /etc/ceph/ceph.conf
ceph:filesystem = emfs
[root@emfssmb-ceph02 /]# tail -n 2 /etc/passwd
saber:x:2000:2000::/invalid:/bin/false
illya:x:2001:2000::/invalid:/bin/false
[root@emfssmb-ceph02 /]# tail -n 1 /etc/group
fgo:x:2000:
[root@emfssmb-ceph02 /]# pdbedit -L
saber:2000:
illya:2001:
[root@emfssmb-ceph02 /]#
「scc.toml」の定義でアカウントも用意される.
windows/macOSからアクセスして、パスワード認証が済めば利用可能になります
https://documentation.suse.com/ja-jp/ses/7.1/html/ses-all/cha-ses-cifs.html#cephfs-samba-packages から
上記のように samba の vfs_ceph モジュールはお勧めしないみたい.