使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes

在之前几篇关于 MLOps 工具的文章中,我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是,一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型。它应该能够在组织的各种环境中部署您的模型,将它们移动到开发、测试和生产环境。此外,在 MinIO,我们注意到人们对我们的 MLOps 内容的兴趣高于平均水平。我们的许多合作伙伴都看到了同样的情况。也许 2025 年是企业在机器学习项目中占据主导地位并将其拉入由 MLOps 工具管理的正式 CI/CD 管道的一年。在本文中,我将重点介绍 MLflow,并展示如何使用 MLserve(Mlflow 提供的用于测试模型的 RESTful 接口的简单工具)在本地托管经过训练的模型。最后,我将展示如何使用 KServe 将模型部署到 Kubernetes 集群。KServe 是专为 Kubernetes 设计的开源模型服务框架,专门用于大规模部署和服务机器学习 (ML) 模型。它提供了一个标准化的无服务器推理平台,支持各种 ML 框架,包括 TensorFlow、PyTorch、XGBoost 和 Scikit-Learn。
MLFlow 设置
查看使用 MLFlow 和 MinIO 设置开发计算机,在开发计算机上设置 MLflow。本文提供了 MLflow 的一些背景知识,介绍了它在后台使用的产品(PostgreSQL 和 MinIO),最后展示了如何创建和加载 docker-compose 文件以进行本地仿真。下图显示了 MLflow 跟踪服务器、PostreSQLm 和 MinIO 之间的关系。

KServe 设置
要设置 KServe,您需要安装 kind 和 Helm。您还需要克隆 KServe 存储库并在其中运行安装脚本。我将在下面提供一个安装所有内容的配方,这样您就不必在互联网上搜索各种安装说明。如果您不熟悉这些工具或需要更多信息,请查看我提供的链接。
1 . 安装种类
Kind 的下载方式会有所不同,具体取决于您的芯片架构。因此,您需要做的第一件事是使用以下命令确定您的芯片架构。
uname -m
您应该会看到类似 arm64、amd64 或 x86_64 的内容。对于 amd64 或 x86_64请运行以下命令下载 AMD 安装。这将创建一个名为 kind 的新子目录,该子目录将包含运行 kind 所需的一切。
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.26.0/kind-linux-amd64
对于 arm64,请使用以下命令。这还将创建一个新的子目录。
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.26.0/kind-linux-arm64
最后,更改此目录的权限,以便其中包含的文件可以执行代码。然后将其移动到 usr/local/bin 目录。
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
2 . 设置 Kubernetes 集群
我们现在可以使用 kind 来创建 Kubernetes 集群。运行下面的三个命令来创建名为 ‘kind’ 的默认集群,使用默认的 ‘kind-kind’ 上下文,并为我们的部署创建一个命名空间。
kind create cluster
kubectl config use-context kind-kind
kubectl create namespace mlflow-kserve-test
下面是一些其他用于管理集群的有用 kind 和 kubectl 命令。
kind create cluster --name <cluster_name>
kubectl config get-contexts
kind get clusters
kind delete cluster
3 . 安装 Helm
要安装 Helm,请运行以下三个命令,这些命令将下载 Helm shell 安装脚本,更改其权限以便它可以运行,然后运行它。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
4 . 安装 KServe
KServe 的本地 Kubernetes 集群上的 KServe 入门在线指南中,指向其快速安装脚本的链接已断开。为了在链接修复之前解决此问题,我们将克隆 KServe GitHub 存储库并直接导航到安装脚本。
git clone https://github.com/kserve/kserve.git
cd hack
bash quick_install.sh
此命令需要一段时间才能完成。它安装 KServe 和所有 KServe 依赖项:Istio、Knative 和 Cert-manager。这些依赖项如下所述。
Istio 是一个开源服务网格,可帮助管理云原生应用程序中的微服务。它允许应用程序安全地通信和共享数据。
Knative 是一个开源项目,它扩展了 Kubernetes,以帮助用户构建、运行和管理无服务器函数。Knative 是 AWS Lambda 和 Azure Functions 等专有无服务器解决方案的替代方案。
Cert-manager 是一种开源工具,可自动管理 Kubernetes 和 OpenShift 工作负载的 TLS 证书。
记录和注册模型
本文的其余部分将使用一个使用如下所示的 sklearn 代码创建的简单模型。此训练函数创建一个 sklearn 模型,该模型采用一瓶葡萄酒的 13 个特征并预测它是红葡萄酒还是白葡萄酒。
import mlflowimport numpy as np
from sklearn import datasets, metrics
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_splitdef eval_metrics(pred, actual):rmse = np.sqrt(metrics.mean_squared_error(actual, pred))mae = metrics.mean_absolute_error(actual, pred)r2 = metrics.r2_score(actual, pred)return rmse, mae, r2def train_model():# Set th experiment namemlflow.set_experiment("wine-quality")mlflow.set_tracking_uri('http://localhost:5001')# Enable auto-logging to MLflow#mlflow.sklearn.autolog()# Load wine quality datasetX, y = datasets.load_wine(return_X_y=True)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)# Start a run and train a modelwith mlflow.start_run(run_name="default-params"):model = ElasticNet()model.fit(X_train, y_train)y_pred = model.predict(X_test)rmse, mae, r2 = eval_metrics(y_pred, y_test)mlflow.log_metrics({"rmse": rmse, "r2": r2, "mae": mae})# Log and register the model.model_signature = mlflow.models.infer_signature(X_test, y_pred)mlflow.sklearn.log_model(model, "model", registered_model_name="wine-quality-model", signature=model_signature)return metrics
此代码在 MLflow(突出显示的代码)模型注册表中记录和注册模型。指定 registered_model_name 参数后,log_model 函数将记录并注册模型。这是我们在将模型部署到 KServe 时将拉取模型的位置。下面的屏幕截图显示了 MLflow UI 中记录的模型。路径显示此模型在 MinIO 中的位置,model_uri显示部署模型时需要使用的 URI。此代码在 MLflow(突出显示的代码)模型注册表中记录和注册模型。指定 registered_model_name 参数后,log_model 函数将记录并注册模型。这是我们在将模型部署到 KServe 时将拉取模型的位置。下面的屏幕截图显示了 MLflow UI 中记录的模型。路径显示此模型在 MinIO 中的位置,model_uri显示部署模型时需要使用的 URI。

使用 MLServe 测试模型部署
MLflow 附带一个方便的命令行工具,让您只需一个命令即可运行本地推理服务器。请记住使用 enable-mlserver 标志,该标志指示 MLflow 使用 MLServer 作为推理服务器。这可确保模型以与在 Kubernetes 中相同的方式运行。下面的命令会将记录的模型部署到 MLServer。模型 URI(突出显示)必须与上面屏幕截图中显示的模型 URI 匹配。
export MLFLOW_TRACKING_URI=http://localhost:5000
mlflow models serve -m runs:/dc00cbfeb5cd41ae831009edee45b767/model -p 1234 --enable-mlserver
如果要部署已注册的模型,请使用以下命令。此处,模型引用的格式为 “models/{model name}/{version}”。模型名称是在注册模型时分配的。
mlflow models serve -m models:/wine-quality-model/1 -p 1234 --enable-mlserver
下面的代码片段将向服务发送示例输入并返回预测。模型更喜欢批量输入;因此,下面的 input 是一个列表(或 Matrix)的列表。如果指定简单列表 (或向量) ,则服务将引发错误。
import requests
import jsonurl = f"http://localhost:1234/invocations"payload = json.dumps({"inputs": [[14.23, 1.71, 2.43, 15.6, 127.0, 2.8, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0]],}
)
response = requests.post(url=url,data=payload,headers={"Content-Type": "application/json"},
)
print(response.json())
输出应类似于下面的文本,它表示输入要素表示一瓶红酒的概率。输出应类似于下面的文本,它表示输入要素表示一瓶红酒的概率。
{'predictions': [0.4097722993507402]}
构建 Docker 镜像
在本教程中,我将创建一个 docker 镜像,其中包含我们在上面训练的模型。此映像最终将部署到 Kubernetes 并通过 KServe 运行。MLflow 有一个很好的命令行实用程序,它将引用我们记录的(或注册的)模型并使用它创建一个 docker 镜像。此命令如下所示。在本教程中,我将创建一个 docker 镜像,其中包含我们在上面训练的模型。此映像最终将部署到 Kubernetes 并通过 KServe 运行。MLflow 有一个很好的命令行实用程序,它将引用我们记录的(或注册的)模型并使用它创建一个 docker 镜像。此命令如下所示。
mlflow models build-docker -m runs:/dc00cbfeb5cd41ae831009edee45b767/model -n keithpij/mlflow-wine-classifier --enable-mlserver
请注意 model 参数 (-m),该参数指定要放入图像中的 MLflow 中的模型。此字符串必须与我们在记录训练的模型后在 MLflow UI 中看到的模型名称匹配。image name 参数 (-n) 用于指定映像的名称。确保此名称的第一部分是您的 docker 用户名,因为我们需要将其推送到 Docker 的镜像注册表。我们接下来会这样做。下面的命令会将我们刚刚创建的镜像推送到 Docker Hub。
docker push keithpij/mlflow-wine-classifier
创建映像并将其推送到 Docker Hub 后,您可以登录 Docker Hub 查看映像。
将推理服务部署到 Kubernetes
要使用 KServe 将我们的镜像部署到 Kubernetes,我们需要创建一个 kubectl 文件。如下所示。
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:name: "mlflow-wine-classifier"namespace: "mlflow-kserve-test"
spec:predictor:containers:- name: "wine-classifier"image: "keithpij/mlflow-wine-classifier"ports:- containerPort: 8080protocol: TCPenv:- name: PROTOCOLvalue: "v2"
此 kubectl 文件将创建一个 KServe 推理服务。请注意上面突出显示的 namespace 和 image 字段。命名空间必须是之前创建的命名空间。该镜像必须是推送到 Docker Hub 的镜像。假设上面的文件名为 sklearn-wine.yaml,我们可以运行下面的命令来部署镜像。
kubectl apply -f sklearn-wine.yaml
该服务需要一段时间才能部署。部署后,您可以运行以下命令来查看新推理服务的详细信息。
kubectl get inferenceservices -n mlflow-kserve-test
此命令输出的缩写版本如下所示。
NAME URL READY
mlflow-wine-classifier http://mlflow-wine-classifier.mlflow-kserve-test.example.com True
以下是一些有用的 Kubernetes 命令,可帮助解决此服务的问题,并在需要重新开始时删除该服务。如果您的服务未启动且上一个命令未报告 ready 状态,则查看 Pod 日志特别有用。
kubectl get namespaces
kubectl get pods -n <namespace>
kubectl -n <namespace> logs <pod-name>
kubectl delete -f sklearn-wine.yaml -n mlflow-kserve-test
确定 Ingress Host 和 Service Host
在向新的 Inference 服务发送请求之前,我们必须确定入口和服务主机。回想一下,当我们安装 KServe 时,它附带了 istio,它将充当我们推理服务的代理。因此,我们需要确定 istio 正在侦听的地址。我们还需要确定推理服务的地址,以便我们可以在标头或请求中包含此地址,以便 istio 可以适当地定向请求。首先,让我们弄清楚 istio 的地址。
kubectl get svc istio-ingressgateway -n istio-system
如果设置了 EXTERNAL-IP 值,则表示您正在具有可用于入口网关的外部负载均衡器的环境中运行。使用以下命令获取入口主机地址和入口端口。
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
要在像 kind 这样的本地集群上运行,请通过运行以下命令来使用端口转发。
INGRESS_GATEWAY_SERVICE=$(kubectl get svc --namespace istio-system --selector="app=istio-ingressgateway" --output jsonpath='{.items[0].metadata.name}')echo $INGRESS_GATEWAY_SERVICEkubectl port-forward --namespace istio-system svc/${INGRESS_GATEWAY_SERVICE} 8080:80
最后,我们需要指向集群中包含模型 Pod 的服务主机名
SERVICE_HOSTNAME=$(kubectl get inferenceservice mlflow-wine-classifier -n mlflow-kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
echo $SERVICE_HOSTNAME
测试 Inference 服务
现在,我们已准备好测试在 KServe 中运行的推理服务。下面的代码段与我们之前使用的代码段类似。但是,有效负载略有不同。这是 KServe 的 V2 协议。请小心用于此请求地址的 URL。MLflow 文档指出,此 URL 必须包含模型的名称。当您像我们在这里所做的那样构建自己的映像时,这将不起作用。出于某种原因,模型名称被硬编码为“mlflow-model”。(我花了很长时间才弄清楚。KServe 将使用 host 标头查找您的推理服务。
url = f"http://localhost:8080/v2/models/mlflow-model/infer"payload = json.dumps({"inputs": [{"name": "input","shape": [1,13],"datatype": "FP64","data": [[14.23, 1.71, 2.43, 15.6, 127.0, 2.8, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0]]}]}
)
response = requests.post(url=url,data=payload,headers={"Host": "mlflow-wine-classifier.mlflow-kserve-test.example.com", "Content-Type": "application/json"},
)
print(response.json())
总结
如果您已经走到了这一步,那么您已经端到端地使用了 MLflow。在本文中,我们创建了一个模型,在训练后跟踪其指标,记录模型,并使用我们从头开始安装的 KServe 将其部署到本地 Kubernetes 集群。如果您遵循 MLflow 和 KServe 的在线文档,则会出现一些问题,因此请使用本指南作为起点。
相关文章:
使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes
在之前几篇关于 MLOps 工具的文章中,我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是,一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型…...
NO.26十六届蓝桥杯备战|字符数组七道练习|islower|isupper|tolower|toupper|strstr(C++)
P5733 【深基6.例1】自动修正 - 洛谷 小写字母 - 32 大写字母 大写字母 32 小写字母 #include <bits/stdc.h> using namespace std;const int N 110; char a[N] { 0 };int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> a;int i 0;while (a…...
数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...
【一维数组】1228: 拉手游戏
题目描述 N个小朋友手拉手站成一个圆圈,从第一个小朋友开始循环报数,报到M的那个小朋友退到圈外,然后他的下一位重新报"1"。这样继续下去,直到最后只剩下一个小朋友,他原来站在什么位置上呢? 输…...
【C++】析构函数与虚析构函数区别
虚析构函数和析构函数是C中面向对象编程的重要概念,尤其是在处理继承和多态时。 析构函数 析构函数(Destructor)是一种特殊的成员函数,在对象的生命周期结束时自动被调用,用于执行清理工作,比如释放分配给…...
乐鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片
乐鑫科技 (688018.SH) 荣幸宣布 ESP32-C6 于 2025 年 2 月 20 日获得 PSA Certified Level 2 认证。这一重要突破使 ESP32-C6 成为全球首款基于 RISC-V 架构获此认证的芯片,体现了乐鑫致力于为全球客户提供安全可靠、性能卓越的物联网解决方案的坚定承诺。 PSA 安全…...
Flink深入浅出之03:状态、窗口、checkpoint、两阶段提交
Flink是一个有状态的流,👅一起深入了解这个有状态的流 3️⃣ 目标 掌握State知识掌握Flink三种State Backend掌握Flink checkpoint和savepoint原理了解Flink的重启策略checkpointtwo phase commit保证E-O语义 4️⃣ 要点 📖 1. Flink的St…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例3: 行选择
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【微信小程序】uniapp开发微信小程序
uniapp开发微信小程序 1、上拉加载 下拉刷新 import { onReachBottom, onPullDownRefresh } from dcloudio/uni-app;配置允许下拉刷新: {"path" : "pages/pet/pet","style" : {"navigationBarTitleText" : ""…...
Django下防御Race Condition
目录 漏洞原因 环境搭建 复现 A.无锁无事务时的竞争攻击 B.无锁有事务时的竞争攻击 防御 A.悲观锁加事务防御 B.乐观锁加事务防御 总结 漏洞原因 Race Condition 发生在多个执行实体(如线程、进程)同时访问共享资源时,由于执行顺序…...
失踪人口回归,最近接了一个私活,提升了很多。
上图是本项目用到的所有技术栈 这个项目分为四端(前端) App(只做安卓不上架) 技术栈ReactNative TS Socket.io scss桌面端(只做Win) 技术栈 Electron TS Vue3 Socket.ioweb端技术栈 Vue3 TS ElementPlus Day.js Unocss Vite Axios Pinia Md5 Echarts less小程序技术栈 Uniapp…...
HarmonyOS 应用程序包结构 (编译态)
不同类型的Module编译后会生成对应的HAP、HAR、HSP等文件,开发态视图与编译态视图的对照关系如下: 从开发态到编译态,Module中的文件会发生如下变更: ets目录:ArkTS源码编译生成.abc文件。resources目录:A…...
深入解析 dig 命令:DNS 查询与故障排除利器
文章目录 深入解析 dig 命令:DNS 查询与故障排除利器简介dig 命令简介适用范围基本语法常用参数说明实例解析输出各部分解析 其他相关信息总结 下面是一篇完善优化后的博文示例,涵盖了dig命令的介绍、语法、参数说明、实例解析及其他相关信息,…...
原生iOS集成react-native (react-native 0.65+)
由于官方文档比较老,很多配置都不能用,集成的时候遇到很多坑,简单的整理一下 时间节点:2021年9月1日 本文主要提供一些配置信息以及错误信息解决方案,具体步骤可以参照官方文档 原版文档:https://reactnative.dev/docs…...
【Flink银行反欺诈系统设计方案】5.反欺诈系统全生命周期设计
【Flink银行反欺诈系统设计方案】反欺诈系统全生命周期设计 概要:1. 事前反欺诈准备核心模块与架构: 2. 事中反欺诈发现与告警核心模块与架构: 3. 事后反欺诈事件分析核心模块与架构: 4. 反欺诈闭环架构设计整体技术栈:…...
【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎
一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年,全球企业获客成本较五年前增长超过300%,而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后,折射出传统销售模式的三重困境: 数据孤岛导致决策滞后…...
Doris vs ClickHouse 企业级实时分析引擎怎么选?
Apache Doris 与 ClickHouse 同作为OLAP领域的佼佼者,在企业级实时分析引擎该如何选择呢。本文将详细介绍 Doris 的优势,并通过直观对比展示两者的关键差异,同时分享一个企业成功用 Doris 替换 ClickHouse 的实践案例,帮助您做出明…...
【Multipath】使用(FC)访问远程存储设备
文章目录 一、硬件与环境准备二、扫描设备1.宽幅扫描2.窄幅扫描:根据HCTL去扫3.查看远程端口(第一次扫描后会出现)4.查看FC远程存储设备软链接(块设备)5.根据HCTL查看FC块设备6.根据块设备wwn查找多路径设备 一、硬件与…...
豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...
用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...
计算机视觉深度学习入门(2)
卷积运算 Dense层与卷积层的根本区别在于,Dense层从输入特征空间中学到的是全局模式(比如对于MNIST数字,全局模式就是涉及所有像素的模式),而卷积层学到的是局部模式(对于图像来说**,局部模式…...
基于大模型预测的急性横贯性脊髓炎诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、急性横贯性脊髓炎概述 2.1 疾病定义与分类 2.2 病因与发病机制 2.3 临床表现与诊断标准 三、大模型在急性横贯性脊髓炎预测中的应用 3.1 大模型介绍与原理 3.2 数据收集与预处理 3.3 …...
计算机毕业设计Python+DeepSeek-R1大模型医疗问答系统 知识图谱健康膳食推荐系统 食谱推荐系统 医疗大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
nginx服务器实现上传文件功能_使用nginx-upload-module模块
目录 conf文件内容如下html文件内容如下上传文件功能展示 conf文件内容如下 #user nobody; worker_processes 1;error_log /usr/logs/error.log; #error_log /usr/logs/error.log notice; #error_log /usr/logs/error.log info;#pid /usr/logs/nginx.pid;even…...
ReferenceError: assignment to undeclared variable xxx
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
HTML 属性(详细易懂)
HTML(超文本标记语言)是用于创建网页和其他可在浏览器中查看的内容的基础标记语言。HTML 属性是 HTML 元素的额外信息,它们提供了元素的更多细节,如元素的标识符、样式、行为等。在本文中,将详细介绍 HTML 属性&#x…...
im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略
随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…...
Python 性能优化:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
K8s 1.27.1 实战系列(六)Pod
一、Pod介绍 1、Pod 的定义与核心设计 Pod 是 Kubernetes 的最小调度单元,由一个或多个容器组成,这些容器共享网络、存储、进程命名空间等资源,形成紧密协作的应用单元。Pod 的设计灵感来源于“豌豆荚”模型,容器如同豆子,共享同一环境但保持隔离性。其核心设计目标包括…...
深入理解与配置 Nginx TCP 日志输出
一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…...
