注意
本文档适用于 Ceph 的开发版本。
SMB 服务
警告
SMB 支持正在积极开发中,许多功能可能缺失或不成熟。有一个名为 smb 的 Ceph MGR 模块可用于帮助组织和管理 SMB 相关功能。除非 smb 模块被确定不适合您的需求,否则我们建议使用该模块而不是直接使用 smb 服务规范。
部署 Samba 容器
Cephadm 使用由 samba-container 项目构建的容器镜像部署 Samba 服务器。
为了托管可访问 CephFS 文件系统的 SMB 共享,请使用以下命令部署 Samba 容器
ceph orch apply smb <cluster_id> <config_uri> [--features ...] [--placement ...] ...
此命令接受许多附加参数。有关这些选项的描述,请参阅服务规范。
服务规范
可以使用规范应用 SMB 服务。以下是一个 YAML 示例
service_type: smb
service_id: tango
placement:
hosts:
- ceph0
spec:
cluster_id: tango
features:
- domain
config_uri: rados://.smb/tango/scc.toml
custom_dns:
- "192.168.76.204"
join_sources:
- "rados:mon-config-key:smb/config/tango/join1.json"
include_ceph_users:
- client.smb.fs.cluster.tango
然后可以通过运行以下命令应用规范
ceph orch apply -i smb.yaml
服务规范选项
下面描述了 SMB 服务 spec 部分特有的字段。
- cluster_id
标识 SMB“集群”的短名称。在这种情况下,集群只是一个管理单元,包含一个或多个共享通用配置的 Samba 服务,并且可能不提供实际的集群或可用性机制。
- features
预定义术语列表,用于启用特定的部署特性。空列表有效。支持的术语
domain: 启用域成员模式clustered: 启用 Samba 原生集群模式
- config_uri
一个字符串,包含一个(标准或事实上的)URI,用于标识 samba-container 应作为主配置文件加载的配置源。支持的 URI 方案包括
http:、https:、rados:和rados:mon-config-key:。- user_sources
字符串列表,包含(标准或事实上的)URI 值,用于标识身份验证凭据所在位置。有关支持的 URI 方案列表,请参阅
config_uri。- join_sources
字符串列表,包含(标准或事实上的)URI 值,用于标识执行域加入所需的身份验证数据所在位置。每个加入源按顺序尝试,直到其中一个成功。有关支持的 URI 方案列表,请参阅
config_uri。- custom_dns
IP 地址列表,将用作 Samba 容器的 DNS 服务器。此功能允许 Samba 容器与 Active Directory 集成,即使 Ceph 主机节点未绑定到 Active Directory DNS 域。
- custom_ports
服务名称到端口号的映射,将覆盖用于这些服务的默认端口。服务名称包括:
smb、smbmetrics和ctdb。如果映射中不存在某个服务名称,则将使用默认端口。例如,{"smb": 4455, "smbmetrics": 9009}将更改 smb 用于客户端访问和指标导出器的端口,但不会更改 CTDB 集群守护程序使用的端口。- bind_addrs
对象列表,指示 SMB 和相关服务可以绑定到的 IP 地址或 IP 网络。为这些对象描述的字段是互斥的,但至少需要一个字段。字段
- address
可选。表示为字符串的单个 IP 地址。例如,
192.168.7.50。- network
可选。表示为字符串的单个 IP 网络。网络可用于指定许多 IP 地址范围。网络字符串始终包含一个“/”字符,后跟前缀长度。例如,
192.168.7.0/24。
- include_ceph_users
Samba 容器可以使用的 cephx 用户(又名实体)名称列表。列表中每个用户的 cephx 密钥将自动添加到容器中的密钥环中。
- cluster_meta_uri
一个字符串,包含一个 URI,用于标识集群结构元数据的存储位置。如果设置了
clustered功能,则必需。必须是 RADOS 伪 URI。- cluster_lock_uri
一个字符串,包含一个 URI,用于标识 Samba/CTDB 将存储集群锁的位置。如果设置了
clustered功能,则必需。必须是 RADOS 伪 URI。- cluster_public_addrs
对象列表;可选。仅在使用 Samba 集群时支持。分配将由集群子系统管理并可在运行 Samba 容器的节点之间自动移动的“虚拟”IP 地址。字段
- address
必需字符串。带有必需前缀长度的 IP 地址(例如:
192.168.4.51/24)。此地址将分配给主机的一个网络设备并自动管理。- destination
可选。字符串或字符串列表。
destination定义系统将分配托管 IP 的位置。每个字符串值必须是一个网络地址(例如192.168.4.0/24)。可以提供一个或多个目标。典型情况是只使用一个目标,因此值可以作为字符串提供,而不是包含单个项目的列表。每个目标网络都将映射到主机上的一个设备。运行cephadm list-networks查看这些映射的示例。如果未提供 destination,则使用提供的 address 值自动确定网络并将其作为 destination。
注意
如果需要在 smbd 实例之间进行集群(也称为高可用性或“透明状态迁移”),则需要功能标志 clustered。如果未指定此标志,cephadm 可能会部署多个 smb 服务器,但它们将缺乏实际高可用性集群所需的协调。当指定 clustered 标志时,cephadm 将部署额外的容器来管理这种协调。此外,必须指定 cluster_meta_uri 和 cluster_lock_uri 值。前者由 cephadm 用于向 samba 容器描述 smb 集群布局。后者由 Samba 的 CTDB 组件用于管理内部集群锁。
配置 SMB 服务
警告
SMB 的管理器模块正在积极开发中。一旦该模块可用,它将成为在 Ceph 上以端到端方式管理 Samba 的首选方法。以下讨论是为了完整性而提供的,并解释了软件层如何交互。
创建 SMB 服务规范不足以使 Samba 容器在 Ceph 上完全运行。重要的是创建有效的配置并将其放置在容器可以读取的位置。这些配置的完整规范超出了本文档的范围。您可以参考 Samba 文档以及 samba 服务器容器及其接受的配置文件。
完成配置后,应将其存储在 Samba 容器可以访问的位置。在 Ceph 编排中运行 Samba 容器的推荐方法是将配置存储在 Ceph 集群中。有几种方法可以将配置存储在 ceph 中
RADOS
配置文件可以作为 RADOS 对象存储在名为 .smb 的池中。在池中应该有一个以 cluster_id 值命名的命名空间。用于标识此资源的 URI 应构造为 rados://.smb/<cluster_id>/<object_name>。示例:rados://.smb/tango/config.json。
容器会自动部署 cephx 密钥,允许访问这些池和命名空间中的资源。只要使用此方案,就不需要读取对象的附加配置。
要将配置文件复制到 RADOS 池,请使用 rados 命令行工具。例如
# assuming your config file is /tmp/config.json
rados --pool=.smb --namespace=tango put config.json /tmp/config.json
MON 键/值存储
配置文件可以作为值存储在 Ceph Monitor 键/值存储中。密钥必须以集群命名,如下所示:smb/config/<cluster_id>/<name>。这将生成一个 URI,可用于标识此配置,构造为 rados:mon-config-key:smb/config/<cluster_id>/<name>。示例:rados:mon-config-key:smb/config/tango/config.json。
容器会自动部署 cephx 密钥,允许访问键前缀为 smb/config/<cluster_id>/ 的资源。只要使用此方案,就不需要读取值的附加配置。
要将配置文件复制到键/值存储中,请使用 ceph config-key put ... 工具。例如
# assuming your config file is /tmp/config.json
ceph config-key set smb/config/tango/config.json -i /tmp/config.json
HTTP/HTTPS
配置文件可以存储在 HTTP(S) 服务器上,并由 Samba 容器自动读取。在 HTTP(S) 上管理配置文件留给读者自行探索。
注意
所有接受 URI 的参数都支持所有 URI 方案。每种方案都具有不同的性能和安全特性。
限制
SMB 服务的重要限制非详尽列表如下
DNS 是 Active Directory 的关键组件。如果正在配置 SMB 服务以进行域成员身份,则必须配置 Ceph 主机节点以解析 Active Directory (AD) 域,或者可以使用
custom_dns选项。在这两种情况下,AD 域的 DNS 主机仍然必须可以从 Ceph 集群所在的任何网络段访问。服务必须绑定到 TCP 端口 445。在同一节点上运行多个 SMB 服务尚不支持,并将触发端口占用冲突。