目录
用户的分组
在LSF的集群中,会有很多用户来提交作业,这些用户可能来自不同的部门,不同的产品团队,或者不同的组织结构。我们可以为这些用户设置队列的使用权限,也可以先把用户进行分组,然后以组为单位进行权限设置。
打开$LSF_ENVDIR/lsbatch/<clustername>/configdir/lsb.users,进行以下配置,就可以建立一个新的用户群组,ug1,并指定有哪些用户属于这个用户群组。
如图所示,GROUP_NAME用来指定群组名称,GROUP_MEMBER用于指定有哪些用户隶属于该群组。第一行表示创建群组ug1,所属用户包括 tadmin1, tadmin2,而第二行表示创建群组ug2,而ug2的所属用户包括所有ug1的用户以及tlimit1。这种配置方法对于层级有覆盖的组织结构会非常方便,比如“研发1组”和“研发2组”都属于“研发组”。
配置好之后,重启mbd就会将配置应用到集群,通过 bugroup 命令可以查看配置效果:
图中ug1/表示这是一个用户群组,我们可以用bugroup -r将子群组展开到用户级别,如图:
为用户组设置队列权限
之前讨论队列的fairshare时曾经提到过在队列中设置有哪些用户可以向这个队列提交作业,这个设置同样可以应用到用户群组级别。
如图所示,我们可以将用户或者群组配置到队列的USERS 中,如果配置了群组,那么该群组下所有的用户都可以向这个队列提交作业。
不同用户间的作业权限以及用户群组管理员
在LSF集群中,除了集群管理员以外,普通用户是不可以操作和删除其他用户作业的,但是如果设立了群组,我们可以为每一个群组设置针对该群组的管理人员。
如图所示,GROUP_ADMIN 可以用来给每个群组设置管理员,这个管理员只能作用于指定的用户群组,同时,这个管理员可以是这个群组的成员(GROUP_MEMBER)之一,也可以不是,如果不想为某个群组指定管理员,可以直接配置横线 “-”, 表示没有群组管理员。
那么作为群组管理员,有什么不同的权限呢?
对于普通用户来说,可以通过bjobs默认只会列出自己提交的作业,用bjobs -u user可以列出指定用户提交的作业, 也可以用bjobs -u all列出所有用户的作业,或者指定usergroup的名字,列出所有属于该群组的用户的作业。
用户可以对自己的作业进行一些管理操作,比如暂停、恢复或者终止(bstop、bresume、bkill),但是作为普通用户,却不可以操作其他用户的作业,这是一个很容易理解的设定,毕竟我们不希望任何一个人都可以随意操作自己的作业。
如上图所示,用户tlimit1可以用指定用户的方式看到用户tadmin2的作业,但是他无法对tadmin2的作业进行操作。
但是有些场景下,还是需要有一些管理者可以对某些用户的作业进行操作,比如部门领导想要管理自己部门下成员提交的一些作业。这种情况下要怎么做呢?如果将这些管理者设置为集群管理员,显然可以实现这个需求,但是给予的权限又稍微有些大,这个时候我们就可以引入这个群组管理员的概念。
作为某个用户群组的管理员,可以对该群组所属用户提交的作业进行各种管理操作,但是对于群组以外用户提交的作业,则不能进行操作。
根据我们之前设定的,用户tadmin1和tadmin2都隶属于群组ug1,而tadmin1是该群组的管理员:
因此用户tadmin1可以对同样隶属于ug1的tadmin2提交的作业进行操作, 但是用户tlimit1不属于ug1,因此tadmin1不能对用户tlimit1提交的作业进行操作管理:
接下来我们通过群组管理员tadmin1将用户tadmin2的作业104清除掉:
通过bjobs -l查看刚刚被杀掉的作业,可以看到作业是被root用户或者管理员杀掉的信息:
Completed <exit>; TERM_ADMIN: job killed by root or an administrator.
总结
通过以上介绍的内容,我们可以根据实际的组织管理需要,对用户进行群组划分,并根据需要,设立一些群组管理员来实现群组内部作业的一些简单管理。同时,用户群组还可以与之前介绍的fairshare结合实现更加进一步的动态优先级管理,我们以后再慢慢一起讨论。
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。