<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ldap on WLStack — Simple, Scalable Cloud Solutions</title><link>https://www.wlstack.com/en/tags/ldap/</link><description>Recent content in Ldap on WLStack — Simple, Scalable Cloud Solutions</description><generator>Hugo</generator><language>en-US</language><managingEditor>info@wlstack.com (WLSTACK)</managingEditor><webMaster>info@wlstack.com (WLSTACK)</webMaster><lastBuildDate>Mon, 10 Oct 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://www.wlstack.com/en/tags/ldap/index.xml" rel="self" type="application/rss+xml"/><item><title>jupyterhub notebook ldap统一认证</title><link>https://www.wlstack.com/en/blog/notebook-docker/</link><pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate><author>info@wlstack.com (WLSTACK)</author><guid>https://www.wlstack.com/en/blog/notebook-docker/</guid><description>&lt;h1 id="冷饭重炒">冷饭重炒&lt;/h1>
&lt;p>这其实是在19年就应该发出来的一点笔记，只是以前都存在自己脑子里，而且现在随着版本的变动，配置上也有了一点点小变化，所以炒一下冷饭。&lt;/p>
&lt;h2 id="需求是什么">需求是什么&lt;/h2>
&lt;p>在一个小公司里面，如何为算法工程师分配GPU资源是个问题。大厂当然有成熟的k8s+各种gpu虚拟化黑科技。但很显然，这需要完整的体系，从用户认证到临时存储、持久化存储、日志存储、资源配额、资源用量统计、任务队列等等的配套，才能结合k8s的调度一起来完成GPU资源分配。
在2019年的时候，服务器少，人也少，项目和任务单一，所以那时候只搞了服务器端的ldap认证，不存在什么资源协调问题，所以裸机直接上了。
到了20年，机器增多，人也增多，任务和环境的诉求也不一样，这个时候，再走裸机，很显然，无论从资源利用率、数据安全、环境冲突（即使有Anaconda和virtualenv）这样的环境管理，也无法在延续之前的裸机方式了。&lt;/p>
&lt;p>所以呢，准备基于docker容器特性，来实现GPU资源的交付和隔离。那就意味着，在容器内，涉及容器内ssh服务（算法工程师大多喜欢通过vscode直连服务器ssh）、notebook的认证，延续之前的ldap认证。&lt;/p>
&lt;h1 id="规划是这样的">规划是这样的：&lt;/h1>
&lt;ol>
&lt;li>
&lt;p>采用nvidia-container-toolkit结合docker交付GPU资源&lt;/p>
&lt;/li>
&lt;li>
&lt;p>建设内部镜像库，涵盖常见的发行版和cuda版本；&lt;/p>
&lt;/li>
&lt;li>
&lt;p>基于内部镜像库build每个工程师的容器镜像&lt;/p>
&lt;/li>
&lt;li>
&lt;p>每个工程师的工程目录，即ldap里面账户的/home目录，一般在/home/username 下面&lt;/p>
&lt;/li>
&lt;li>
&lt;p>每个工程师能够访问的数据通过挂载host上的目录透传到容器中&lt;/p>
&lt;/li>
&lt;li>
&lt;p>统一管理容器内的时间戳、认证、权限（sudoers）&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h1 id="实际的操作">实际的操作&lt;/h1>
&lt;ol>
&lt;li>容器镜像build的时候安装openssh-server、生成ssh服务所需要的key文件&lt;/li>
&lt;li>容器镜像build的时候，安装jupyterhub和jupyterhub-ldapauthenticator 和nodejs、npm包configurable-http-proxy&lt;/li>
&lt;li>容器镜像build的时候安装nss-pam-ldapd 认证模块&lt;/li>
&lt;li>创建容器&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>docker run -d --rm=false --net=host --restart=unless-stopped --name username --shm-size=8g (cat /etc/hosts|awk -F &amp;#39; &amp;#39; &amp;#39;{if(NR&amp;gt;2){print &amp;#34;--add-host &amp;#34;$2&amp;#34;:&amp;#34;$1}}&amp;#39;) -it -v /data-directory:/data-directory -v /home/username:/home/username -v /var/log/username:/var/log/username -v /etc/jupyterhub/username_config.py:/etc/jupyterhub/username_config.py -e TZ=Asia/Shanghai -v /etc/pam.d:/etc/pam.d:ro -v /etc/nslcd.conf:/etc/nslcd.conf:ro -v /etc/nsswitch.conf:/etc/nsswitch.conf:ro -v /var/run/nslcd:/var/run/nslcd -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v /etc/shadow:/etc/shadow:ro -v /etc/gshadow:/etc/gshadow:ro -v /etc/sudoers:/etc/sudoers:ro --runtime nvidia --privileged image:tag /home/username/start.sh
&lt;/code>&lt;/pre>&lt;p>几个特殊的挂载点和参数，解释一下：&lt;/p></description></item></channel></rss>