[kubernetes]-k8s通过psp限制nvidia-plugin插件的使用

news2024/9/21 12:58:01

导语: k8s通过psp限制nvidia-plugin插件的使用。刚开始接触psp 记录一下 后续投入生产测试了再完善。

通过apiserver开启psp 静态pod会自动更新

# PSP(Pod Security Policy) 在默认情况下并不会开启。通过将PodSecurityPolicy关键词添加到 --enbale-admission-plugins 配置数组后,可以开启PSP权限认证功能。
# /etc/kubernetes/manifests/kube-apiserver.yaml   在NodeRestriction后添加PodSecurityPolicy
- --enable-admission-plugins=NodeRestriction,PodSecurityPolicy

直接创建容器测试

lung.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lung
  labels:
    k8s-app: lung
    k8s-med-type: biz-internel
spec:
  strategy:
    type: Recreate
  replicas: 1
  selector:
    matchLabels:
      k8s-app: lung
  template:
    metadata:
      labels:
        k8s-app: lung
    spec:
#      runtimeClassName: nvidia
#      hostPID: true
      containers:
      - name: lung
        image: nvidia/cuda:11.3.0-base-ubi8
        command: ["sh","-c","tail -f /dev/null "]
        #command: ["sh","-c","for i in `ls /srv/conf-drwise220531`;do rm -rf /root/lung/$i/conf && ln -s  /srv/conf-drwise220531/$i/conf /root/lung/$i/  ;done  && rm -rf /root/lung/Release/path.conf /root/lung/path.conf  && ln -s /srv/conf-drwise220531/Release/path.conf /root/lung/Release/ && ln -s /root/lung/Release/path.conf  /root/lung/ &&  sh /root/aiclassifier/startup.sh &&  sh /root/lung/startup.sh "]
#        securityContext:
#          privileged: true
        env:
        - name: NVIDIA_DRIVER_CAPABILITIES
          value: compute,utility,video,graphics,display
        - name: NVIDIA_VISIBLE_DEVICES
          value: all
        volumeMounts:
        - mountPath: /dev/shm
          name: dshm
      volumes:
      - name: dshm
        emptyDir:
          medium: Memory
          sizeLimit: 1Gi
#deepwise-operator
#      serviceAccountName: deepwise-operator
# 创建deployment测试  发下会有psp的问题
# 注意:开启PodSecurityPolicy功能后,即使没有使用任何安全策略,都会使得创建pods(包括调度任务重新创建pods)失败

kubectl apply -f lung -n deepwise 

创建对应的资源限制策略

4.nvidia-plugin.yaml

# 显卡驱动的限制
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp-nvidia
spec:
  privileged: false
  fsGroup:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  volumes:
    - "*"
  hostPID: false
  hostIPC: false
  hostNetwork: false

---
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: kube-system
  name: nvidiaoperator

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp-permissive-nvidia
  namespace: kube-system
rules:
  - apiGroups:
      - extensions
    resources:
      - podsecuritypolicies
    resourceNames:
      - psp-nvidia
    verbs:
      - use
---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: psp-permissive-nvidia
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: psp-permissive-nvidia
subjects:
  - kind: ServiceAccount
    name: nvidiaoperator
    namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      # This annotation is deprecated. Kept here for backward compatibility
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        name: nvidia-device-plugin-ds
    spec:
      runtimeClassName: nvidia
      tolerations:
      # This toleration is deprecated. Kept here for backward compatibility
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      - key: CriticalAddonsOnly
        operator: Exists
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      # Mark this pod as a critical add-on; when enabled, the critical add-on
      # scheduler reserves resources for critical add-on pods so that they can
      # be rescheduled after a failure.
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      priorityClassName: "system-node-critical"
      containers:
      - image: harbor.deepwise.com/terra-k8s/k8s-device-plugin:v0.10.0
        name: nvidia-device-plugin-ctr
        args: ["--fail-on-init-error=false"]
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: device-plugin
            mountPath: /var/lib/kubelet/device-plugins
      volumes:
        - name: device-plugin
          hostPath:
            path: /var/lib/kubelet/device-plugins
      serviceAccountName: nvidiaoperator

5.nvida-psp.yaml

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp-nvidia
spec:
  privileged: false
  fsGroup:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  volumes:
    - "*"
  hostPID: false
  hostIPC: false
  hostNetwork: false

---
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: kube-system
  name: nvidiaoperator

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp-permissive-nvidia
  namespace: kube-system
rules:
  - apiGroups:
      - extensions
    resources:
      - podsecuritypolicies
    resourceNames:
      - psp-nvidia
    verbs:
      - use
---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: psp-permissive-nvidia
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: psp-permissive-nvidia
subjects:
  - kind: ServiceAccount
    name: nvidiaoperator
    namespace: kube-system

6.deepwise-psp.yaml

# 用户的限制
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp-deepwise
spec:
  privileged: false
  fsGroup:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  volumes:
    - "*"
  hostPID: false
  hostIPC: false
  hostNetwork: false

---
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: deepwise
  name: deepwise-operator

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: psp-permissive-deepwise
  namespace: deepwise
rules:
  - apiGroups:
      - extensions
    resources:
      - podsecuritypolicies
    resourceNames:
      - psp-deepwise
    verbs:
      - use
---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: psp-permissive-deepwise
  namespace: deepwise
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: psp-permissive-deepwise
subjects:
  - kind: ServiceAccount
    name: deepwise-operator
    namespace: deepwise

7.runtimeclass.yaml

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
   name: "nvidia"
handler: "nvidia"

重新创建lung的deployment

# 加上runtimeClassName: nvidia
# 加上serviceAccountName: deepwise-operator
apiVersion: apps/v1
kind: Deployment
metadata:
  name: lung
  labels:
    k8s-app: lung
    k8s-med-type: biz-internel
spec:
  strategy:
    type: Recreate
  replicas: 1
  selector:
    matchLabels:
      k8s-app: lung
  template:
    metadata:
      labels:
        k8s-app: lung
    spec:
      runtimeClassName: nvidia
#      hostPID: true
      containers:
      - name: lung
        image: nvidia/cuda:11.3.0-base-ubi8
        command: ["sh","-c","tail -f /dev/null "]
        #command: ["sh","-c","for i in `ls /srv/conf-drwise220531`;do rm -rf /root/lung/$i/conf && ln -s  /srv/conf-drwise220531/$i/conf /root/lung/$i/  ;done  && rm -rf /root/lung/Release/path.conf /root/lung/path.conf  && ln -s /srv/conf-drwise220531/Release/path.conf /root/lung/Release/ && ln -s /root/lung/Release/path.conf  /root/lung/ &&  sh /root/aiclassifier/startup.sh &&  sh /root/lung/startup.sh "]
#        securityContext:
#          privileged: true
        env:
        - name: NVIDIA_DRIVER_CAPABILITIES
          value: compute,utility,video,graphics,display
        - name: NVIDIA_VISIBLE_DEVICES
          value: all
        volumeMounts:
        - mountPath: /dev/shm
          name: dshm
      volumes:
      - name: dshm
        emptyDir:
          medium: Memory
          sizeLimit: 1Gi
#deepwise-operator
      serviceAccountName: deepwise-operator

参考文档

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/

https://blog.csdn.net/tushanpeipei/article/details/121940757

https://blog.csdn.net/weixin_45081220/article/details/125407608

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Cocos新手入门】使用 cocos creator 创建多个场景,并通过代码和事件绑定进行切换场景的方法

本篇文章主要讲解使用 cocos creator 创建多个场景,并通过代码和事件绑定进行切换 作者:任聪聪 日期:2023年1月31日 cocos 引擎版本 2.4.3 场景的创建 步骤一、右击资源管理器下的assets目录,点击新建,献出案件一个sc…

NX二开ufun函数UF_MODL_create_section_surface(样条曲线构建截面特征)

本节主要介绍通过样条曲线及截面OPEN API结构体构建截面特征,函数名 UF_MODL_create_section_surface,效果图如下: 1、函数结构 int UF_MODL_create_section_surface ( UF_MODL_secsrf_data_p_t section_surface_data&#xff0c…

vue2 数据响应式Object.defineProperty

我们通常可以对进行输入框进行数据的监听,只需要用到了input 事件或 change事件,就可以实时监听到数据的改变,但是如果只是一个单独的数据呢?怎么去做监听,watch吗??哈哈。 所以 vue响应式就用…

基于微信小程序的懒人美食帮小程序

文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…

graalvm把springboot 3.0应用编译为原生应用

文章目录1、GraalVM Native Support依赖2、编译为原生应用2.1、编译为docker镜像2.2、编译为原生应用文件之前的文章《Graalvm 安装和静态编译(https://blog.csdn.net/penngo/article/details/128006244)》介绍了graalvm的安装和环境配置,普通…

【Rust】6. 结构体与方法

6.1 结构体的定义和实例化 6.1.1 结构体定义、创建实例 6.1.2 创建实例:字段初始化简写语法 6.1.3 创建实例:结构体更新语法(注意:数据的移动特性!) .. 语法:指定了剩余未显式设置值的字段应有…

通信原理笔记—差分脉冲编码调制

目录 差分脉冲编码调制(DPCM): 预测编码: 预测编码的基本原理: 信号预测的基本方法: ΔPCM与DPCM的主要区别: 差分脉冲编码调制(DPCM): 实际信源的特点:实际信源大都是有记忆的信源:信源的相邻输出符号间(如&…

无广告,小体积,实用性拉满的5款软件

人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。 1. 无损放大图片——Bigjpg 大杀器!深度卷积神经网络实现噪点和锯齿部分补充,从而达到图片无损放大。图片边缘也不会有毛刺和重影,。更重要…

(深度学习快速入门)第四章第二节:什么是卷积神经网络

文章目录一:为什么DNN不适合图像处理(1)图像的空间信息被丢失(不具备空间不变性)(2)参数爆炸二:什么是卷积神经网络三:CNN应用一:为什么DNN不适合图像处理 &…

【关于PostgreSQL的系统信息函数的OID】

一、自带的OID的相关脚本 在PostgreSQL的安装包的src/include/catalog目录下,有着两个脚本,unused_oids和 duplicate_oids。通过这两个可执行脚本,可以查看当前源码包配置里的符合要求的OID。unused_oids可以查看若根据当前源码包初始化产生…

YOLOv5训练结果性能分析

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 可参照以下博客一起看(涉及一些概念解析)深度学习之常用模型评估指标(一)—— 分类…

Python大数据处理利器,PySpark的入门实战

PySpark极速入门 一:Pyspark简介与安装 什么是Pyspark? PySpark是Spark的Python语言接口,通过它,可以使用Python API编写Spark应用程序,目前支持绝大多数Spark功能。目前Spark官方在其支持的所有语言中,…

OpenCV-Python学习(18)—— OpenCV 图像几何变换之图像平移(cv.warpAffine)

1. 学习目标 学习图像的平移矩阵;学习 OpenCV 图像平移函数。 2. 图像的平移矩阵 平移是物体位置在水平和垂直方向的移动。 像素点 (x,y) 沿 x 轴平移 dx、沿 y 轴平移 dy,公式: 3. 图像平移函数 3.1 cv.warpAffine() 函数使用 cv.war…

R语言生物群落(生态)数据统计分析与绘图

包含:《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本 R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#…

手动启动Oracle服务和Oracle监听服务和init.ora文件相关

Oracle 11g 安装未完全成功;安装完以后,服务只有2个;这样是用不了,oracle服务和oracle监听服务都没有; 尝试启动一下数据库,出现12560错误; 根据资料,可用如下命令启动Oracle服务&am…

【06】FreeRTOS临界段代码保护及调度器挂起与恢复

目录 1.临界段代码保护简介 2.临界段代码保护函数介绍 2.1任务级临界区调用格式示例 2.2中断级临界区调用格式示例 2.3函数调用特点 2.4任务级进入和退出临界段函数 2.5中断级进入和退出临界段函数 3.任务调度器的挂起和恢复 3.1任务调度器挂起函数vTaskSuspendAll() …

为什么大部分虚拟主机都配置SSD

对于任何站长来说,拥有一个不会加载的漂亮网站可能是毁灭性的。选择正确的托管服务对于确保网站始终以最佳状态运行至关重要。而由于新手站长呈爆发性增长态势,选择虚拟主机的站长日趋增多。本文就将介绍大部分虚拟主机都配置SSD的原因。SSD优势SSD在数据…

Windows下MySQL5与MySQL8的下载、安装、配置

MySQL版本简介 MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于 大多数普通用户。MySQL Enterprise Edition 企业版本,需付费,不能在线下载,可以试用30天。提供…

EMT4J详细介绍与使用,帮你找到Java版本升级带来的问题,让你在项目jdk升级不在头疼

Java版本升级带来的问题 前因 java更新迭代速度巨快无比,Spring Framework 6 等项目已经至少需要 Java 17。但是,对于 Java 版本的采用是相对缓慢的。例如,在 Java 11 发布四年之后(2022年),只有不到 49%…

[C语言]操作符

目录 1.操作符分类 2.算术操作符 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 4.1’&‘(按位与) 4.2’|‘(按位或) 4.3‘^’(按位异或) 5.赋值操作符 5.1复合赋值符 6.单目操作…