我正在尝试在企业网络环境中部署 podman 用户服务,其中所有 Linux 用户的主目录都通过 NFS 从公共文件服务器挂载。当每台计算机上的用户主目录都通过 nfs 挂载到同一共享时,我不确定如何拥有特定于计算机的用户级服务。
为了让 podman 能够干净地与网络主目录配合使用,我发现我需要设置graphroot
指向每台本地机器上的某个位置,否则每台机器上的容器都会尝试使用相同的存储并产生混淆。好的,我可以这样做(尽管需要 IT 部门进行一些工作来设置)。
当将 pod/容器转变为用户级服务(使用podman generate systemd
)时,我通常会放入文件.service
,~/.config/systemd/user
但这也在网络共享上,因此会影响每个位置的用户。
有没有标准的方法来解决这个问题?如何为每台机器提供用户级服务(即我可能希望不同的机器有不同的服务,特别是如果这些服务是通过其 ID 引用的容器)?
附加问题扩展:我还打算设置loginctl enable-linger
。由于 NFS 主目录是延迟安装的,这是否实际上会导致服务在启动时启动?
答案1
有没有标准方法可以解决这个问题?如何在每台机器上提供用户级服务(即我可能希望不同的机器拥有不同的服务,特别是当这些服务是通过其 ID 引用的容器时)?
使用条件*=指令。
[Unit]
# System hostname (/proc/sys/kernel/hostname)
ConditionHost=|node520
ConditionHost=|node964
[Unit]
# /etc/machine-id check
ConditionHost=7539689722fb45bca1a4e101447e4930
附加问题扩展:我还打算设置 loginctl enable-linger。由于 NFS 主目录是延迟安装的,这实际上会导致服务在启动时启动吗?
如果您使用 autofs,则systemd --user
尝试访问每个用户的 ~/.config 的过程将以与 cronjobs 相同的方式触发延迟挂载。
(如果您使用带有 Kerberos 的 NFS,则这将无法正常工作。)
如果使用 PAM 触发延迟挂载,则会发生如果 /etc/pam.d/systemd-user
调用必要的 PAM 模块。(同样,与 cronjobs 完全一样,它只会触发“account”和“session”模块,但不会通过“auth”。)