模型推理服务云原生后端微服务MLOps人工智能【免费下载链接】kserveStandardized Distributed Generative and Predictive AI Inference Platform for Scalable, Multi-Framework Deployment on Kubernetes项目地址https://gitcode.com/gh_mirrors/ks/kserve点击查看免费下载KServe 的存储初始化器storage-initializer支持直接从 HDFS/WebHDFS 下载模型文件让部署在 Kubernetes 上的InferenceService能够以hdfs://或webhdfs://路径引用存储在 Hadoop 集群中的模型。本文围绕 docs/samples/storage/hdfs/README.md 展开完整讲解两种接入方式ServiceAccount 挂载 Secret 与新版 Storage Spec并深入源码说明控制器注入与 Python 侧下载实现的底层原理。读完本文你将掌握创建 HDFS 连接 Secret、配置 Kerberos 与 TLS、构造InferenceService的全部实操方法。HDFS 存储支持的前提条件KServe 的 HDFS 支持面向支持 [WebHDFS] REST API 的 HDFS 集群即通过 HTTP/HTTPS 暴露文件系统操作的 Hadoop 部署。同时满足以下条件即可接入HDFS 集群启用 WebHDFSnamenode 上开启 REST 端口支持Kerberos 认证可选但若集群启用了 Kerberos则必须提供 keytab 与 principal存储初始化器容器内安装 hdfscli 中_download_hdfs的导入语句。KServe 官方在 pkg/controller/v1beta1/inferenceservice/utils/utils.go 中将hdfs://与webhdfs://一并列入受支持的存储 URI 前缀列表因此两类路径都会被存储初始化器识别并路由到 HDFS 下载逻辑。方式一通过 ServiceAccount 挂载 Secret 使用 HDFS这是 KServe 的传统凭证注入方式把连接信息写进 Kubernetes Secret再将 Secret 挂到InferenceService使用的 ServiceAccount 上控制器会把 Secret 以 Volume 形式注入存储初始化器 Pod。创建 Kubernetes Secret可以使用kubectl命令行直接创建也可以使用 YAML 文件创建# 使用 kubectl 创建 Secret $ kubectl create secret generic hdfscreds \ --from-literalHDFS_NAMENODEhttps://host1:port;https://host2:port \ --from-fileTLS_CERT./client.crt \ --from-fileTLS_KEY./client.key \ --from-literalTLS_SKIP_VERIFYtrue \ --from-literalHDFS_ROOTPATH/user/myuser \ --from-literalHEADERS{x-my-container: my-container}# 使用 YAML 文件创建 Secret apiVersion: v1 kind: Secret metadata: name: hdfscreds type: Opaque stringData: HDFS_NAMENODE: xxxx ...注意--from-file会把文件内容原样写入 Secret对应TLS_CERT、TLS_KEY、TLS_CA、KERBEROS_KEYTAB这类文件型变量而--from-literal写入的是字符串值。必填变量变量说明HDFS_NAMENODEHDFS namenode 的主机名或 IP需带协议前缀并附上 WebHDFS 端口。支持用分号分隔多个 URL 以实现高可用HA例如https://domain1:port;https://domain2:port可选变量变量说明默认值USER_PROXY连接 WebHDFS 时以代理身份proxy as使用的用户无HDFS_ROOTPATH根路径会被前缀到所有传给客户端的 HDFS 路径之前。若为相对路径则视为相对用户主目录/TLS_CERT连接 WebHDFS 时使用的 TLS 证书无TLS_KEYTLS 证书对应的私钥无TLS_CA用于校验 TLS 证书的 CA无TLS_SKIP_VERIFY是否跳过 TLS 证书校验falseHEADERS附加到 WebHDFS 请求上的 HTTP 头以 JSON 字符串给出如{x-my-container: my-container}无N_THREADS从 WebHDFS 下载文件时使用的线程数2这些变量名与 Python 侧_load_hdfs_configuration中读取的配置键一一对应见 python/storage/kserve_storage/kserve_storage.py其中TLS_SKIP_VERIFY与N_THREADS的默认值在源码中同样以false与2呈现。Kerberos 认证连接 Kerberized启用 Kerberos 认证的集群时需要同时指定以下两个变量变量说明KERBEROS_KEYTABKerberos keytab 文件KERBEROS_PRINCIPALkeytab 对应的 Kerberos principal例如accountREALM# 使用 kubectl 创建连接 Kerberized 集群的 Secret $ kubectl create secret generic hdfscreds \ --from-literalHDFS_NAMENODEhttps://host1:port;https://host2:port \ --from-fileKERBEROS_KEYTAB./account.keytab \ --from-literalKERBEROS_PRINCIPALaccountREALM当同时提供KERBEROS_PRINCIPAL时KServe 会通过 hdfscli 的KerberosClient并借助krbContext以 keytab 完成 Kerberos 初始化否则使用普通Client详见下文源码解析。将 Secret 附加到 ServiceAccountKServe 会检查InferenceService所用 ServiceAccount 上挂载的 Secret。先创建 ServiceAccount 并把上面的hdfscredsSecret 挂上去apiVersion: v1 kind: ServiceAccount metadata: name: sa secrets: - name: hdfscreds然后在InferenceServiceYAML 中通过serviceAccountName指定使用该 ServiceAccount并在storageUri中给出hdfs://或webhdfs://的模型路径apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: model-test spec: predictor: serviceAccountName: sa model: storageUri: hdfs://path/to/model工作机理当InferenceService被创建后控制器会遍历指定 ServiceAccount 上挂载的所有 Secret查找包含HDFS_NAMENODE键的 Secret一旦找到该 Secret 中的所有键值都会被附加到用于下载模型的 storage-initializer Pod 上见 pkg/credentials/service_account_credentials.go。方式二使用新的 Storage Spec新版 Storage Spec 将存储配置收敛到名为storage-config的 Secret 中通过 JSON 描述存储类型与连接参数无需再依赖 ServiceAccount 挂载。创建 storage-config Secret在InferenceService将要运行的命名空间中创建名为storage-config的 Secret。JSON 配置中的键与上述 Secret 变量名相同区别在于引用文件的变量值需要编码为 base64以便安全地放入 JSON。涉及文件编码的变量包括TLS_CERT、TLS_KEY、TLS_CA、KERBEROS_KEYTAB。存储类型type可以指定为hdfs或webhdfsapiVersion: v1 kind: Secret metadata: name: storage-config type: Opaque stringData: internalhdfs: | { type: hdfs, HDFS_NAMENODE: https://domain1:port;https://domain2:port, KERBEROS_PRINCIPAL: myaccountREALM, KERBEROS_KEYTAB: base64-encoded-data }其中internalhdfs是该存储配置的 key在InferenceService的storage.key中引用。将文件编码为 base64$ cat kerberos.keytab | base64 kerberos.keytab.b64 # 在 macOS 上复制到剪贴板 $ cat kerberos.keytab.b64 | pbcopy将生成的 b64 值粘贴到上面 JSON 的KERBEROS_KEYTAB或其他文件型变量字段中。创建使用 Storage Spec 的 InferenceServiceapiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: my-model spec: predictor: model: modelFormat: name: tensorflow storage: key: internalhdfs path: /user/myuser/path/to/model这里storage.key指向storage-configSecret 中的internalhdfs条目storage.path是 HDFS 上的模型路径注意hdfs://与webhdfs://前缀无需写入path前缀由type决定。源码级原理剖析控制器侧Secret 识别与 Volume 注入在 pkg/credentials/hdfs/hdfs_secret.go 中定义了 HDFS 相关常量与挂载逻辑HDFS_NAMENODE、HDFS_ROOTPATH、KERBEROS_PRINCIPAL、KERBEROS_KEYTAB、TLS_CERT、TLS_KEY、TLS_CA为识别的配置键挂载路径固定为/var/secrets/kserve-hdfscredsVolume 名为hdfs-secrets且以只读方式挂载。在 pkg/credentials/service_account_credentials.go 的mountSecretCredential中控制器遍历 ServiceAccount 引用的 Secret一旦发现存在HDFS_NAMENODE键就调用hdfs.BuildSecret构造 Volume 与 VolumeMount 注入容器。而新版 Storage Spec 走的是另一条路径控制器从storage-configSecret 中读取 JSON将其以STORAGE_CONFIG环境变量SecretKeyRef注入容器并校验type必须属于{s3, hdfs, webhdfs}见 pkg/credentials/service_account_credentials.go。存储初始化器侧_download_hdfs实现Python 侧的核心实现位于 python/storage/kserve_storage/kserve_storage.py关键步骤包括加载配置_load_hdfs_configuration从挂载目录默认/var/secrets/kserve-hdfscredsStorage Spec 模式下为临时目录读取全部配置键文件型变量KERBEROS_KEYTAB、TLS_CERT、TLS_KEY、TLS_CA只保存文件路径其余以文本读入。路径规整从hdfs://或webhdfs://URI 中剥离前缀得到纯路径若未配置HDFS_ROOTPATH则以/为根。TLS 配置设置TLS_CERT/TLS_KEY作为客户端证书对TLS_CA用作 verify 的 CA 路径TLS_SKIP_VERIFY为true时关闭校验。自定义请求头HEADERS以 JSON 解析后合并进 requests.Session。认证分支若配置了KERBEROS_PRINCIPAL通过krbContext(using_keytabTrue, ...)初始化 keytab 并使用KerberosClient否则使用普通Client两者都支持proxyUSER_PROXY与rootHDFS_ROOTPATH参数。下载先通过client.status(path)判断目标是单个文件还是目录单文件以n_threads1下载目录则遍历列表、按N_THREADS线程数逐文件下载并支持 allow/ignore 模式过滤。若下载产物是单个.tgz/.tar.gz/.zip还会自动解包。此外_update_with_storage_spec会在下载前把STORAGE_CONFIG环境变量中的 JSON 展开为文件对属于_HDFS_FILE_SECRETS即KERBEROS_KEYTAB、TLS_CERT、TLS_KEY、TLS_CA的键做 base64 解码后以二进制写入临时目录——这正是 Storage Spec 要求文件型变量 base64 编码的原因。测试验证仓库的存储测试覆盖了 HDFS 路径的 TLS 行为在 python/storage/test/test_storage.py 中test_hdfs_uri_path_keeps_own_tls_configuration同时参数化hdfs://host/model与webhdfs://host/model验证 HDFS 下载使用自身的TLS_CA/TLS_SKIP_VERIFY配置且不会受全局 CA BundleREQUESTS_CA_BUNDLE、SSL_CERT_FILE覆盖保证 TLS 语义不被其他存储的全局配置污染。两种接入方式的对比与选择维度ServiceAccount 挂载 SecretStorage Specstorage-config凭证载体独立 Secret ServiceAccount 引用统一的storage-configSecret文件型变量直接以文件形式注入--from-file需 base64 编码进 JSON存储类型声明由storageUri前缀hdfs:///webhdfs://决定由 JSON 中type字段显式声明在InferenceService中配置serviceAccountNamestorageUristorage.keystorage.path适用场景集群内已有 ServiceAccount 凭证挂载体系希望将多种存储配置统一收敛管理两种方式都支持 HA namenode分号分隔多 URL、Kerberos 与 TLS 全部能力选择时只需考虑团队现有的凭证管理习惯。若同时配置了全局 CA BundleHDFS 路径会优先使用自身TLS_CA/TLS_SKIP_VERIFY配置不会被全局覆盖这一点在排查 TLS 类问题例如 WebHDFS 证书校验失败时尤其值得留意。赞分享模型推理服务云原生后端微服务MLOps人工智能【免费下载链接】kserveStandardized Distributed Generative and Predictive AI Inference Platform for Scalable, Multi-Framework Deployment on Kubernetes项目地址https://gitcode.com/gh_mirrors/ks/kserve点击查看免费下载相关推荐Alluxio 以 HDFS 为底层存储的完整接入指南挂载配置、HA 集群、权限映射与 Kerberos 安全Alluxio 以 HDFS 为底层存储的完整接入指南挂载配置、HA 集群、权限映射与 Kerberos 安全 本指南以 Alluxio 官方 HDFS Un存储分布式文件系统缓存大数据Argo Workflows HDFS 制品HDFSArtifact完整配置指南字段、Kerberos 认证与源码解析Argo Workflows HDFS 制品HDFSArtifact完整配置指南字段、Kerberos 认证与源码解析 HDFSArtifact 是 Ar云原生容器编排工作流自动化任务调度后端Argo Workflows HDFS 制品仓库HDFSArtifactRepository配置指南从字段解析到 Kerberos 认证实战Argo Workflows HDFS 制品仓库HDFSArtifactRepository配置指南从字段解析到 Kerberos 认证实战 导读 HDF云原生容器编排工作流自动化任务调度后端上一篇uni-app x App 一键登录完全指南uni.getUniVerifyManager() 预登录、标准登录与自定义授权页实战下一篇baoyu-infographic 的 morandi-journal 风格用莫兰迪色调与手绘手账美学打造高密度信息图创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考