美文网首页雨夜随笔
【Kubernetes】不想用特权容器,那就自己实现一个devi

【Kubernetes】不想用特权容器,那就自己实现一个devi

作者: soolaugust | 来源:发表于2019-09-26 13:57 被阅读0次

**本文首发于“雨夜随笔”公众号,欢迎关注。**

问题的根源

通过网上查询和搜索,发现原因是挂载s3fs需要挂载 /dev/fuse, 而挂载这个容器需要设置 `privileged=true`,这个导致容器变成了特权容器,从而可以访问到宿主机上的GPU资源。这样容器实际能够使用的GPU卡数和自己观察到的GPU卡数并不一致,从而可能会导致一系列错误。同时这个也违背了容器的隔离性原则,相当于容器可以访问主机内核的所有功能,容器中运行的恶意代码可能导致整个主机出问题。

解决方法

1) 使用相关的 API,不同于直接运行s3fs的命令, 通过调用API来访问远程对象,这样首先不太友好,代码也会变得比较复杂。

2)使用kernel的安全方案来做具体的粒度控制,通过kernel自带的功能可以做到不使用特权容器就能使用s3fs。

Device Plugin - Kubernetes中更加优雅的使用方式

而在Kubernetes中,则拥有更加优雅的方式,因为Kubernetes也考虑到了相关的情形,提供了Device Plugin这种方式。我们总体的思路是:

1)把 /dev/fuse 设备注入到容器中。

2)给予容器尽可能少的权限,比如可以执行mount命令挂载文件系统,避免使用privileged访问到所有的GPU。

而Kubernetes中的Device Plugin就可以完全满足这个需求,那么在开始之前我们来看看Device Plugin究竟是什么吧?

然后我们将这个资源注册到Kubelet中,之后将自己管理的设备列表发布出去,Kubernetes会根据我们上报的健康设备数目来更新节点的状态。

这样通过我们的定义,当容器需要使用devfuse资源时,只需要向Kubernetes申请github.com/fuse资源,并添加少量的权限,就可以正常使用s3fs了。具体流程如下:

至于具体的Device Plugin实现代码,已经上传到 Github

欢迎关注

相关文章

  • 【Kubernetes】不想用特权容器,那就自己实现一个devi

    **本文首发于“雨夜随笔”公众号,欢迎关注。** 问题的根源 通过网上查询和搜索,发现原因是挂载s3fs需要挂载 ...

  • Kubernetes Pod 安全策略(PSP)配置

    Kubernetes Pod 安全策略(PSP)配置默认情况下,Kubernetes 允许创建一个有特权容器的 P...

  • kubernetes的网络实现

    kubernetes的网络实现 kubernetes的网络设计主要针对以下几种情况实现的: 同一pod下容器与容器...

  • Kubernetes是什么

    Kubernetes是什么? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部...

  • SKIL/安装/Kubernetes

    Kubernetes Kubernetes是一个用于容器编排的开源工具。它在管理容器工作负载和实现集群及其部署的自...

  • Kubernetes 调度器实现初探

    Kubernetes 调度器 Kubernetes 是一个基于容器的分布式调度器,实现了自己的调度模块。 在Kub...

  • Kubernetes 调度器实现初探

    Kubernetes 调度器 Kubernetes 是一个基于容器的分布式调度器,实现了自己的调度模块。 在Kub...

  • 2019-07-01

    一、Kubernetes简介 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化...

  • kubeadm安装Kubernetes集群

    一、Kubernetes简介 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化...

  • kubeadm安装Kubernetes v1.24.0 dock

    一、Kubernetes简介 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化...

网友评论

    本文标题:【Kubernetes】不想用特权容器,那就自己实现一个devi

    本文链接:https://www.haomeiwen.com/subject/qhpkuctx.html