当前位置: 首页 > news >正文

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

导语: 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: lunglabels:k8s-app: lungk8s-med-type: biz-internel
spec:strategy:type: Recreatereplicas: 1selector:matchLabels:k8s-app: lungtemplate:metadata:labels:k8s-app: lungspec:
#      runtimeClassName: nvidia
#      hostPID: truecontainers:- name: lungimage: nvidia/cuda:11.3.0-base-ubi8command: ["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: trueenv:- name: NVIDIA_DRIVER_CAPABILITIESvalue: compute,utility,video,graphics,display- name: NVIDIA_VISIBLE_DEVICESvalue: allvolumeMounts:- mountPath: /dev/shmname: dshmvolumes:- name: dshmemptyDir:medium: MemorysizeLimit: 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: falsefsGroup:rule: RunAsAnyrunAsUser:rule: RunAsAnyseLinux:rule: RunAsAnysupplementalGroups:rule: RunAsAnyvolumes:- "*"hostPID: falsehostIPC: falsehostNetwork: false---
apiVersion: v1
kind: ServiceAccount
metadata:namespace: kube-systemname: nvidiaoperator---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: psp-permissive-nvidianamespace: kube-system
rules:- apiGroups:- extensionsresources:- podsecuritypoliciesresourceNames:- psp-nvidiaverbs:- use
---apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: psp-permissive-nvidianamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: psp-permissive-nvidia
subjects:- kind: ServiceAccountname: nvidiaoperatornamespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nvidia-device-plugin-daemonsetnamespace: kube-system
spec:selector:matchLabels:name: nvidia-device-plugin-dsupdateStrategy:type: RollingUpdatetemplate: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-dsspec:runtimeClassName: nvidiatolerations:# This toleration is deprecated. Kept here for backward compatibility# See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/- key: CriticalAddonsOnlyoperator: Exists- key: nvidia.com/gpuoperator: Existseffect: 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.0name: nvidia-device-plugin-ctrargs: ["--fail-on-init-error=false"]securityContext:allowPrivilegeEscalation: falsecapabilities:drop: ["ALL"]volumeMounts:- name: device-pluginmountPath: /var/lib/kubelet/device-pluginsvolumes:- name: device-pluginhostPath:path: /var/lib/kubelet/device-pluginsserviceAccountName: nvidiaoperator

5.nvida-psp.yaml

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp-nvidia
spec:privileged: falsefsGroup:rule: RunAsAnyrunAsUser:rule: RunAsAnyseLinux:rule: RunAsAnysupplementalGroups:rule: RunAsAnyvolumes:- "*"hostPID: falsehostIPC: falsehostNetwork: false---
apiVersion: v1
kind: ServiceAccount
metadata:namespace: kube-systemname: nvidiaoperator---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: psp-permissive-nvidianamespace: kube-system
rules:- apiGroups:- extensionsresources:- podsecuritypoliciesresourceNames:- psp-nvidiaverbs:- use
---apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: psp-permissive-nvidianamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: psp-permissive-nvidia
subjects:- kind: ServiceAccountname: nvidiaoperatornamespace: kube-system

6.deepwise-psp.yaml

# 用户的限制
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp-deepwise
spec:privileged: falsefsGroup:rule: RunAsAnyrunAsUser:rule: RunAsAnyseLinux:rule: RunAsAnysupplementalGroups:rule: RunAsAnyvolumes:- "*"hostPID: falsehostIPC: falsehostNetwork: false---
apiVersion: v1
kind: ServiceAccount
metadata:namespace: deepwisename: deepwise-operator---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: psp-permissive-deepwisenamespace: deepwise
rules:- apiGroups:- extensionsresources:- podsecuritypoliciesresourceNames:- psp-deepwiseverbs:- use
---apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: psp-permissive-deepwisenamespace: deepwise
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: psp-permissive-deepwise
subjects:- kind: ServiceAccountname: deepwise-operatornamespace: deepwise

7.runtimeclass.yaml

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

如果是docker运行时,handler需要调整为docker。使用containerd则不需要调整。参考https://opni.io/setup/gpu/

重新创建lung的deployment

# 加上runtimeClassName: nvidia
# 加上serviceAccountName: deepwise-operator
apiVersion: apps/v1
kind: Deployment
metadata:name: lunglabels:k8s-app: lungk8s-med-type: biz-internel
spec:strategy:type: Recreatereplicas: 1selector:matchLabels:k8s-app: lungtemplate:metadata:labels:k8s-app: lungspec:runtimeClassName: nvidia
#      hostPID: truecontainers:- name: lungimage: nvidia/cuda:11.3.0-base-ubi8command: ["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: trueenv:- name: NVIDIA_DRIVER_CAPABILITIESvalue: compute,utility,video,graphics,display- name: NVIDIA_VISIBLE_DEVICESvalue: allvolumeMounts:- mountPath: /dev/shmname: dshmvolumes:- name: dshmemptyDir:medium: MemorysizeLimit: 1Gi
#deepwise-operatorserviceAccountName: 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

相关文章:

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

导语: k8s通过psp限制nvidia-plugin插件的使用。刚开始接触psp 记录一下 后续投入生产测试了再完善。 通过apiserver开启psp 静态pod会自动更新 # PSP(Pod Security Policy) 在默认情况下并不会开启。通过将PodSecurityPolicy关键词添加到 --enbale-admission-plu…...

简单易懂又非常牛逼的Spring源码解析,推断构造与bean的实例化

简单易懂又非常牛逼的Spring源码解析,推断构造与bean的实例化原理解析实例化bean的入口工厂方法实例化推断构造初次筛选二次筛选bean的实例化代码走读实例化bean的入口createBeanInstance方法内部的流程推断构造初次筛选二次筛选bean的实例化总结往期文章&#xff1…...

Win11的两个实用技巧系列清理磁盘碎片、设置系统还原点的方法

Win11如何清理磁盘碎片?Win11清理磁盘碎片的方法磁盘碎片过多,会影响电脑的运行速度,所以需要定期清理,这篇文章将以Win11为例,给大家分享的整理磁盘碎片方法相信很多用户都会发现,随着电脑使用时间的增加&#xff0c…...

嵌入式 STM32 红外遥控

目录 红外遥控 NEC码的位定义 硬件设计 软件设计 源码程序 红外遥控 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,容易实现等显著的特点,被诸多电子设备特别…...

【java web篇】使用JDBC操作数据库

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…...

华为OD机试题,用 Java 解【最小步骤数】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

JAVA中 throw 和 throws 的区别含案例

JAVA中 throw 和 throws 的区别含案例 在 Java 中,throw 和 throws 是两个关键字,它们用于处理异常。 throw 关键字用于抛出一个异常对象。一旦抛出异常,程序将停止执行当前方法的剩余代码,并尝试寻找与该异常匹配的 catch 块来…...

基于SpringCloud的可靠消息最终一致性05:保存并发送事务消息

在有了分布式事务的解决方案、项目的需求、骨架代码和基础代码,做好了所有的准备工作之后,接下来就可以继续深入了解「核心业务」了。 在前面了解分布式事务时,可靠消息最终一致性方案的流程图是这样的: 图三十一:可靠消息最终一致性 整个的流程是: 1、业务处理服务在事务…...

SQL语句大全(详解)

SQL前言1 DDL1.1 显示所包含的数据库1.2 创建数据库1.3 删除数据库1.4 使用数据库1.4.1 创建表1.4.2 查看表的结构1.4.3 查看当前数据库下的所有表1.4.4 基础的增删改查1.4.4.1 删除表1.4.4.2 添加列1.4.4.3 修改表名1.4.4.4 修改数据类型1.4.4.5 修改列名和数据类型2 DML2.1 给…...

视频营销活动中7个常见的错误

如今,越来越多的企业在社交媒体平台上开展视频营销活动。与其他传统营销策略不同,视频营销可以为企业带来更多的销售机会。随着越来越多的视频社交媒体平台的出现,营销人员更应该抓住这个机会。但在开始视频创作之前,您需要有一个…...

MapReduce小试牛刀

部署完hadoop单机版后,试下mapreduce是怎么分析处理数据的 Word Count Word Count 就是"词语统计",这是 MapReduce 工作程序中最经典的一种。它的主要任务是对一个文本文件中的词语作归纳统计,统计出每个出现过的词语一共出现的次…...

2023年全国最新工会考试精选真题及答案7

百分百题库提供工会考试试题、工会考试预测题、工会考试真题、工会证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.会员大会或会员代表大会与职工代表大会或职工大会须分别行使职权,()…...

13-mvc框架原理与实现方式

1、mvc原理 # mvc 与框架## 1.mvc 是什么1. m:model,模型(即数据来源),主要是针对数据库操作 2. v:view,视图,html 页面。视图由一个一个模板构成(模板是视图的一个具体展现或载体,视图是模板的一个抽象) 3. c:controller,控制器,用于mv之间的数据交互## 2.最简单的 mvc 就是一…...

弹性盒子布局

目录一、弹性盒子属性二、认识flex的坐标轴三、简单学习父级盒子属性三、属性说明3.1、flex-grow一、弹性盒子属性 说明: div的默认样式:display:block 块盒子 display:flex弹性盒子(可以控制下级盒子的位置) 当两种盒子单独出现…...

C# Sqlite数据库加密

sqlite官方的数据库加密是收费的,而且比较贵。 幸亏微软提供了一种免费的方法。 1 sqlite加密demo 这里我做了一个小的demo演示如下: 在界面中拖入数据库名、密码、以及保存的路径 比如我选择保存路径桌面的sqlite目录,数据库名guigutool…...

高压放大器在声波谐振电小天线收发测试系统中的应用

实验名称:高压放大器在声波谐振电小天线收发测试系统中的应用研究方向:信号传输测试目的:声波谐振电小天线颠覆了传统电小天线以电磁波谐振作为理论基础的天线发射和接收模式,它借助声波谐振实现电磁信号的辐射或接收。因为同频的…...

锁相环的组成和原理及应用

一.锁相环的基本组成 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路,简称锁相环(PLL)。锁相环的特点是:利用外部输入的参考信号控制环路内…...

[C++]string类模拟实现

目录 前言: 1. string框架构造 2. 默认函数 2.1 构造函数 2.2 析构函数 2.3 拷贝构造 2.4 赋值重载 3. 迭代器 4. 整体程序 前言: 本篇文章模拟实现了C中string的部分功能,有助于大家了解和熟悉string类,虽然这个类不难实…...

一个更适合Java初学者的轻量级开发工具:BlueJ

Java是世界上最流行的编程语言之一,它被广泛用于从Web开发到移动应用的各种应用程序。大部分Java工程师主要是用IDEA、Eclipse为主,这两个开发工具由于有强大的能力,所以复杂度上就更高一些。如果您刚刚开始使用Java,或者您更适合…...

从程序员到项目组长,要经历六重修炼

最近和粉丝朋友们交流时发现,有很多刚刚开始做项目组长的朋友自我认可度非常低,感觉做组长之后天天打杂,技术也荒废了。领导天天找你要成果,下属天天找你说困难,你在中间受领导和下属的夹板气。时间久了,你…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...