在Kubernetes上部署LiteLLM

在Kubernetes上部署LiteLLM

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

作者使用LiteLLM将多个LLM提供商的模型统一到OpenAI兼容API后,部署到Kubernetes,并集成PostgreSQL、Redis、Traefik和ArgoCD。文章详述了配置、缓存注意事项、Kustomize管理、部署流程及检查步骤,并计划后续添加健康检查、资源限制和日志清理等功能。

🔎

延伸解读

配置管理中的敏感信息风险

文章提到当前将API密钥等敏感值直接存储在配置文件中,并通过ConfigMap挂载,虽然方便但要求仓库必须保持私有。作者计划后续迁移到Secret,这是更安全的做法。读者在类似部署中应优先使用Kubernetes Secret管理敏感信息,避免明文存储。

缓存与路由状态分离

LiteLLM的Redis配置分为两部分:cache_params用于缓存模型响应,而router_settings下的Redis用于共享路由状态(如速率限制计数和模型冷却)。理解这一区别有助于合理配置Redis,确保多副本扩展时状态一致,同时优化缓存命中率。

缓存失效的注意事项

文章指出启用缓存并不意味着所有请求都会命中,因为缓存键对请求内容敏感,动态内容(如时间戳)会降低命中率。此外,TTL设置需谨慎,过长可能导致实时数据过期,建议根据内容更新频率调整,例如稳定知识可设较长TTL,实时内容则需较短。

Kustomize的配置更新机制

通过configMapGenerator生成带哈希名称的ConfigMap,当配置文件变化时哈希改变,触发Pod滚动更新,无需手动管理ConfigMap名称。这种模式简化了配置变更的部署流程,但需注意确保Deployment引用的是生成后的名称,Kustomize会自动处理。

Q&A

LiteLLM 在 Kubernetes 上部署时,如何实现配置的热更新?

通过 Kustomize 的 configMapGenerator 从 config.yaml 生成 ConfigMap,并自动添加哈希后缀。当 config.yaml 变化时,哈希变化导致 Pod 模板更新,从而触发滚动更新,无需手动维护 ConfigMap 名称。

LiteLLM 使用 Redis 缓存时有哪些注意事项?

需要注意两点:1. 缓存并非对所有请求生效,如果请求内容包含时间戳或随机 ID,缓存键会变化,导致缓存命中率低;2. 不要设置过长的 TTL,实时性要求高的内容应使用较短的 TTL,如 3600 秒,而稳定知识类问题可设置更长。

LiteLLM 中 store_model_in_db 和 store_prompts_in_spend_logs 的作用是什么?

store_model_in_db: true 允许通过管理 UI 或 API 添加模型,并将配置保存到 PostgreSQL,与文件中的模型共存。store_prompts_in_spend_logs: true 会将请求和响应写入 Spend Logs,便于调试,但会存储真实对话,若涉及敏感数据应禁用或配置保留期。

LiteLLM 部署中,LITELLM_SALT_KEY 的作用是什么?为什么必须保持不变?

LITELLM_SALT_KEY 用于加密和解密存储在数据库中的模型凭据。如果该密钥在模型凭据写入数据库后发生变化,旧的凭据将无法解密,导致模型调用失败。

LiteLLM 部署到 Kubernetes 时,如何通过 Traefik 暴露服务?

使用 Traefik IngressRoute 定义路由规则,匹配域名 litellm.example.com,将流量转发到 litellm 服务的 80 端口,并配置 letsencrypt 证书解析器自动签发 HTTPS 证书,同时将 HTTP 重定向到 HTTPS。

LiteLLM 部署后,如何验证服务是否正常?

首先渲染清单并检查资源生成,然后同步 ArgoCD,接着检查 Pod 和 Service 状态,查看日志,访问 /health/readiness 端点,最后发送一个测试请求到 /v1/chat/completions 验证模型调用,并检查 PostgreSQL 表、Redis 缓存和 Spend Logs。

LiteLLM 中 default_fallbacks 的作用是什么?使用时需要注意什么?

default_fallbacks 用于配置备用模型,当默认请求失败时,LiteLLM 会尝试使用备用模型。但需要注意,备用模型的能力和响应风格可能不同,因此不能视为完全透明的切换。

LiteLLM 部署中,为什么建议将敏感配置迁移到 Secret?

当前配置将敏感值直接存储在 config.yaml 中,并通过 ConfigMap 挂载,存在泄露风险。建议将 API 密钥、数据库 URL、Redis 密码等敏感信息放入 Kubernetes Secret,以增强安全性。

🏷️

标签

➡️

继续阅读