mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 03:55:55 +00:00
feat: Add Kubernetes deployment configuration for cluster deployments (#1779)
* Initial plan * feat: Add Kubernetes deployment configuration and guide Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * feat: Add test script and update docker-compose with k8s reference Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> * doc: add k8s deployment doc in README --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com> Co-authored-by: Junyan Qin <rockchinq@gmail.com>
This commit is contained in:
@@ -61,6 +61,10 @@ docker compose up -d
|
|||||||
|
|
||||||
直接使用发行版运行,查看文档[手动部署](https://docs.langbot.app/zh/deploy/langbot/manual.html)。
|
直接使用发行版运行,查看文档[手动部署](https://docs.langbot.app/zh/deploy/langbot/manual.html)。
|
||||||
|
|
||||||
|
#### Kubernetes 部署
|
||||||
|
|
||||||
|
参考 [Kubernetes 部署](./docker/README_K8S.md) 文档。
|
||||||
|
|
||||||
## 😎 保持更新
|
## 😎 保持更新
|
||||||
|
|
||||||
点击仓库右上角 Star 和 Watch 按钮,获取最新动态。
|
点击仓库右上角 Star 和 Watch 按钮,获取最新动态。
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ Community contributed Zeabur template.
|
|||||||
|
|
||||||
Directly use the released version to run, see the [Manual Deployment](https://docs.langbot.app/en/deploy/langbot/manual.html) documentation.
|
Directly use the released version to run, see the [Manual Deployment](https://docs.langbot.app/en/deploy/langbot/manual.html) documentation.
|
||||||
|
|
||||||
|
#### Kubernetes Deployment
|
||||||
|
|
||||||
|
Refer to the [Kubernetes Deployment](./docker/README_K8S.md) documentation.
|
||||||
|
|
||||||
## 😎 Stay Ahead
|
## 😎 Stay Ahead
|
||||||
|
|
||||||
Click the Star and Watch button in the upper right corner of the repository to get the latest updates.
|
Click the Star and Watch button in the upper right corner of the repository to get the latest updates.
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ LangBotはBTPanelにリストされています。BTPanelをインストール
|
|||||||
|
|
||||||
リリースバージョンを直接使用して実行します。[手動デプロイ](https://docs.langbot.app/en/deploy/langbot/manual.html)のドキュメントを参照してください。
|
リリースバージョンを直接使用して実行します。[手動デプロイ](https://docs.langbot.app/en/deploy/langbot/manual.html)のドキュメントを参照してください。
|
||||||
|
|
||||||
|
#### Kubernetes デプロイ
|
||||||
|
|
||||||
|
[Kubernetes デプロイ](./docker/README_K8S.md) ドキュメントを参照してください。
|
||||||
|
|
||||||
## 😎 最新情報を入手
|
## 😎 最新情報を入手
|
||||||
|
|
||||||
リポジトリの右上にある Star と Watch ボタンをクリックして、最新の更新を取得してください。
|
リポジトリの右上にある Star と Watch ボタンをクリックして、最新の更新を取得してください。
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ docker compose up -d
|
|||||||
|
|
||||||
直接使用發行版運行,查看文件[手動部署](https://docs.langbot.app/zh/deploy/langbot/manual.html)。
|
直接使用發行版運行,查看文件[手動部署](https://docs.langbot.app/zh/deploy/langbot/manual.html)。
|
||||||
|
|
||||||
|
#### Kubernetes 部署
|
||||||
|
|
||||||
|
參考 [Kubernetes 部署](./docker/README_K8S.md) 文件。
|
||||||
|
|
||||||
## 😎 保持更新
|
## 😎 保持更新
|
||||||
|
|
||||||
點擊倉庫右上角 Star 和 Watch 按鈕,獲取最新動態。
|
點擊倉庫右上角 Star 和 Watch 按鈕,獲取最新動態。
|
||||||
|
|||||||
629
docker/README_K8S.md
Normal file
629
docker/README_K8S.md
Normal file
@@ -0,0 +1,629 @@
|
|||||||
|
# LangBot Kubernetes 部署指南 / Kubernetes Deployment Guide
|
||||||
|
|
||||||
|
[简体中文](#简体中文) | [English](#english)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 简体中文
|
||||||
|
|
||||||
|
### 概述
|
||||||
|
|
||||||
|
本指南提供了在 Kubernetes 集群中部署 LangBot 的完整步骤。Kubernetes 部署配置基于 `docker-compose.yaml`,适用于生产环境的容器化部署。
|
||||||
|
|
||||||
|
### 前置要求
|
||||||
|
|
||||||
|
- Kubernetes 集群(版本 1.19+)
|
||||||
|
- `kubectl` 命令行工具已配置并可访问集群
|
||||||
|
- 集群中有可用的存储类(StorageClass)用于持久化存储(可选但推荐)
|
||||||
|
- 至少 2 vCPU 和 4GB RAM 的可用资源
|
||||||
|
|
||||||
|
### 架构说明
|
||||||
|
|
||||||
|
Kubernetes 部署包含以下组件:
|
||||||
|
|
||||||
|
1. **langbot**: 主应用服务
|
||||||
|
- 提供 Web UI(端口 5300)
|
||||||
|
- 处理平台 webhook(端口 2280-2290)
|
||||||
|
- 数据持久化卷
|
||||||
|
|
||||||
|
2. **langbot-plugin-runtime**: 插件运行时服务
|
||||||
|
- WebSocket 通信(端口 5400)
|
||||||
|
- 插件数据持久化卷
|
||||||
|
|
||||||
|
3. **持久化存储**:
|
||||||
|
- `langbot-data`: LangBot 主数据
|
||||||
|
- `langbot-plugins`: 插件文件
|
||||||
|
- `langbot-plugin-runtime-data`: 插件运行时数据
|
||||||
|
|
||||||
|
### 快速开始
|
||||||
|
|
||||||
|
#### 1. 下载部署文件
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 克隆仓库
|
||||||
|
git clone https://github.com/langbot-app/LangBot
|
||||||
|
cd LangBot/docker
|
||||||
|
|
||||||
|
# 或直接下载 kubernetes.yaml
|
||||||
|
wget https://raw.githubusercontent.com/langbot-app/LangBot/main/docker/kubernetes.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 部署到 Kubernetes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 应用所有配置
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
|
||||||
|
# 检查部署状态
|
||||||
|
kubectl get all -n langbot
|
||||||
|
|
||||||
|
# 查看 Pod 日志
|
||||||
|
kubectl logs -n langbot -l app=langbot -f
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. 访问 LangBot
|
||||||
|
|
||||||
|
默认情况下,LangBot 服务使用 ClusterIP 类型,只能在集群内部访问。您可以选择以下方式之一来访问:
|
||||||
|
|
||||||
|
**选项 A: 端口转发(推荐用于测试)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl port-forward -n langbot svc/langbot 5300:5300
|
||||||
|
```
|
||||||
|
|
||||||
|
然后访问 http://localhost:5300
|
||||||
|
|
||||||
|
**选项 B: NodePort(适用于开发环境)**
|
||||||
|
|
||||||
|
编辑 `kubernetes.yaml`,取消注释 NodePort Service 部分,然后:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# 获取节点 IP
|
||||||
|
kubectl get nodes -o wide
|
||||||
|
# 访问 http://<NODE_IP>:30300
|
||||||
|
```
|
||||||
|
|
||||||
|
**选项 C: LoadBalancer(适用于云环境)**
|
||||||
|
|
||||||
|
编辑 `kubernetes.yaml`,取消注释 LoadBalancer Service 部分,然后:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# 获取外部 IP
|
||||||
|
kubectl get svc -n langbot langbot-loadbalancer
|
||||||
|
# 访问 http://<EXTERNAL_IP>
|
||||||
|
```
|
||||||
|
|
||||||
|
**选项 D: Ingress(推荐用于生产环境)**
|
||||||
|
|
||||||
|
确保集群中已安装 Ingress Controller(如 nginx-ingress),然后:
|
||||||
|
|
||||||
|
1. 编辑 `kubernetes.yaml` 中的 Ingress 配置
|
||||||
|
2. 修改域名为您的实际域名
|
||||||
|
3. 应用配置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# 访问 http://langbot.yourdomain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置说明
|
||||||
|
|
||||||
|
#### 环境变量
|
||||||
|
|
||||||
|
在 `ConfigMap` 中配置环境变量:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: langbot-config
|
||||||
|
namespace: langbot
|
||||||
|
data:
|
||||||
|
TZ: "Asia/Shanghai" # 修改为您的时区
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 存储配置
|
||||||
|
|
||||||
|
默认使用动态存储分配。如果您有特定的 StorageClass,请在 PVC 中指定:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
spec:
|
||||||
|
storageClassName: your-storage-class-name
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 资源限制
|
||||||
|
|
||||||
|
根据您的需求调整资源限制:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "1Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
limits:
|
||||||
|
memory: "4Gi"
|
||||||
|
cpu: "2000m"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 常用操作
|
||||||
|
|
||||||
|
#### 查看日志
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看 LangBot 主服务日志
|
||||||
|
kubectl logs -n langbot -l app=langbot -f
|
||||||
|
|
||||||
|
# 查看插件运行时日志
|
||||||
|
kubectl logs -n langbot -l app=langbot-plugin-runtime -f
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 重启服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 重启 LangBot
|
||||||
|
kubectl rollout restart deployment/langbot -n langbot
|
||||||
|
|
||||||
|
# 重启插件运行时
|
||||||
|
kubectl rollout restart deployment/langbot-plugin-runtime -n langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 更新镜像
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 更新到最新版本
|
||||||
|
kubectl set image deployment/langbot -n langbot langbot=rockchin/langbot:latest
|
||||||
|
kubectl set image deployment/langbot-plugin-runtime -n langbot langbot-plugin-runtime=rockchin/langbot:latest
|
||||||
|
|
||||||
|
# 检查更新状态
|
||||||
|
kubectl rollout status deployment/langbot -n langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 扩容(不推荐)
|
||||||
|
|
||||||
|
注意:由于 LangBot 使用 ReadWriteOnce 的持久化存储,不支持多副本扩容。如需高可用,请考虑使用 ReadWriteMany 存储或其他架构方案。
|
||||||
|
|
||||||
|
#### 备份数据
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 备份 PVC 数据
|
||||||
|
kubectl exec -n langbot -it <langbot-pod-name> -- tar czf /tmp/backup.tar.gz /app/data
|
||||||
|
kubectl cp langbot/<langbot-pod-name>:/tmp/backup.tar.gz ./backup.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### 卸载
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 删除所有资源(保留 PVC)
|
||||||
|
kubectl delete deployment,service,configmap -n langbot --all
|
||||||
|
|
||||||
|
# 删除 PVC(会删除数据)
|
||||||
|
kubectl delete pvc -n langbot --all
|
||||||
|
|
||||||
|
# 删除命名空间
|
||||||
|
kubectl delete namespace langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
### 故障排查
|
||||||
|
|
||||||
|
#### Pod 无法启动
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看 Pod 状态
|
||||||
|
kubectl get pods -n langbot
|
||||||
|
|
||||||
|
# 查看详细信息
|
||||||
|
kubectl describe pod -n langbot <pod-name>
|
||||||
|
|
||||||
|
# 查看事件
|
||||||
|
kubectl get events -n langbot --sort-by='.lastTimestamp'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 存储问题
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 检查 PVC 状态
|
||||||
|
kubectl get pvc -n langbot
|
||||||
|
|
||||||
|
# 检查 PV
|
||||||
|
kubectl get pv
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 网络访问问题
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 检查 Service
|
||||||
|
kubectl get svc -n langbot
|
||||||
|
|
||||||
|
# 检查端口转发
|
||||||
|
kubectl port-forward -n langbot svc/langbot 5300:5300
|
||||||
|
```
|
||||||
|
|
||||||
|
### 生产环境建议
|
||||||
|
|
||||||
|
1. **使用特定版本标签**:避免使用 `latest` 标签,使用具体版本号如 `rockchin/langbot:v1.0.0`
|
||||||
|
2. **配置资源限制**:根据实际负载调整 CPU 和内存限制
|
||||||
|
3. **使用 Ingress + TLS**:配置 HTTPS 访问和证书管理
|
||||||
|
4. **配置监控和告警**:集成 Prometheus、Grafana 等监控工具
|
||||||
|
5. **定期备份**:配置自动备份策略保护数据
|
||||||
|
6. **使用专用 StorageClass**:为生产环境配置高性能存储
|
||||||
|
7. **配置亲和性规则**:确保 Pod 调度到合适的节点
|
||||||
|
|
||||||
|
### 高级配置
|
||||||
|
|
||||||
|
#### 使用 Secrets 管理敏感信息
|
||||||
|
|
||||||
|
如果需要配置 API 密钥等敏感信息:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: langbot-secrets
|
||||||
|
namespace: langbot
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
api_key: <base64-encoded-value>
|
||||||
|
```
|
||||||
|
|
||||||
|
然后在 Deployment 中引用:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
env:
|
||||||
|
- name: API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: langbot-secrets
|
||||||
|
key: api_key
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 配置水平自动扩缩容(HPA)
|
||||||
|
|
||||||
|
注意:需要确保使用 ReadWriteMany 存储类型
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: langbot-hpa
|
||||||
|
namespace: langbot
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: langbot
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 3
|
||||||
|
metrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 70
|
||||||
|
```
|
||||||
|
|
||||||
|
### 参考资源
|
||||||
|
|
||||||
|
- [LangBot 官方文档](https://docs.langbot.app)
|
||||||
|
- [Docker 部署文档](https://docs.langbot.app/zh/deploy/langbot/docker.html)
|
||||||
|
- [Kubernetes 官方文档](https://kubernetes.io/docs/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## English
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
This guide provides complete steps for deploying LangBot in a Kubernetes cluster. The Kubernetes deployment configuration is based on `docker-compose.yaml` and is suitable for production containerized deployments.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Kubernetes cluster (version 1.19+)
|
||||||
|
- `kubectl` command-line tool configured with cluster access
|
||||||
|
- Available StorageClass in the cluster for persistent storage (optional but recommended)
|
||||||
|
- At least 2 vCPU and 4GB RAM of available resources
|
||||||
|
|
||||||
|
### Architecture
|
||||||
|
|
||||||
|
The Kubernetes deployment includes the following components:
|
||||||
|
|
||||||
|
1. **langbot**: Main application service
|
||||||
|
- Provides Web UI (port 5300)
|
||||||
|
- Handles platform webhooks (ports 2280-2290)
|
||||||
|
- Data persistence volume
|
||||||
|
|
||||||
|
2. **langbot-plugin-runtime**: Plugin runtime service
|
||||||
|
- WebSocket communication (port 5400)
|
||||||
|
- Plugin data persistence volume
|
||||||
|
|
||||||
|
3. **Persistent Storage**:
|
||||||
|
- `langbot-data`: LangBot main data
|
||||||
|
- `langbot-plugins`: Plugin files
|
||||||
|
- `langbot-plugin-runtime-data`: Plugin runtime data
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
#### 1. Download Deployment Files
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone repository
|
||||||
|
git clone https://github.com/langbot-app/LangBot
|
||||||
|
cd LangBot/docker
|
||||||
|
|
||||||
|
# Or download kubernetes.yaml directly
|
||||||
|
wget https://raw.githubusercontent.com/langbot-app/LangBot/main/docker/kubernetes.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Deploy to Kubernetes
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Apply all configurations
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
|
||||||
|
# Check deployment status
|
||||||
|
kubectl get all -n langbot
|
||||||
|
|
||||||
|
# View Pod logs
|
||||||
|
kubectl logs -n langbot -l app=langbot -f
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Access LangBot
|
||||||
|
|
||||||
|
By default, LangBot service uses ClusterIP type, accessible only within the cluster. Choose one of the following methods to access:
|
||||||
|
|
||||||
|
**Option A: Port Forwarding (Recommended for testing)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl port-forward -n langbot svc/langbot 5300:5300
|
||||||
|
```
|
||||||
|
|
||||||
|
Then visit http://localhost:5300
|
||||||
|
|
||||||
|
**Option B: NodePort (Suitable for development)**
|
||||||
|
|
||||||
|
Edit `kubernetes.yaml`, uncomment the NodePort Service section, then:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# Get node IP
|
||||||
|
kubectl get nodes -o wide
|
||||||
|
# Visit http://<NODE_IP>:30300
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option C: LoadBalancer (Suitable for cloud environments)**
|
||||||
|
|
||||||
|
Edit `kubernetes.yaml`, uncomment the LoadBalancer Service section, then:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# Get external IP
|
||||||
|
kubectl get svc -n langbot langbot-loadbalancer
|
||||||
|
# Visit http://<EXTERNAL_IP>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option D: Ingress (Recommended for production)**
|
||||||
|
|
||||||
|
Ensure an Ingress Controller (e.g., nginx-ingress) is installed in the cluster, then:
|
||||||
|
|
||||||
|
1. Edit the Ingress configuration in `kubernetes.yaml`
|
||||||
|
2. Change the domain to your actual domain
|
||||||
|
3. Apply configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
# Visit http://langbot.yourdomain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
#### Environment Variables
|
||||||
|
|
||||||
|
Configure environment variables in ConfigMap:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: langbot-config
|
||||||
|
namespace: langbot
|
||||||
|
data:
|
||||||
|
TZ: "Asia/Shanghai" # Change to your timezone
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Storage Configuration
|
||||||
|
|
||||||
|
Uses dynamic storage provisioning by default. If you have a specific StorageClass, specify it in PVC:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
spec:
|
||||||
|
storageClassName: your-storage-class-name
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Resource Limits
|
||||||
|
|
||||||
|
Adjust resource limits based on your needs:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "1Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
limits:
|
||||||
|
memory: "4Gi"
|
||||||
|
cpu: "2000m"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common Operations
|
||||||
|
|
||||||
|
#### View Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View LangBot main service logs
|
||||||
|
kubectl logs -n langbot -l app=langbot -f
|
||||||
|
|
||||||
|
# View plugin runtime logs
|
||||||
|
kubectl logs -n langbot -l app=langbot-plugin-runtime -f
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Restart Services
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Restart LangBot
|
||||||
|
kubectl rollout restart deployment/langbot -n langbot
|
||||||
|
|
||||||
|
# Restart plugin runtime
|
||||||
|
kubectl rollout restart deployment/langbot-plugin-runtime -n langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Update Images
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update to latest version
|
||||||
|
kubectl set image deployment/langbot -n langbot langbot=rockchin/langbot:latest
|
||||||
|
kubectl set image deployment/langbot-plugin-runtime -n langbot langbot-plugin-runtime=rockchin/langbot:latest
|
||||||
|
|
||||||
|
# Check update status
|
||||||
|
kubectl rollout status deployment/langbot -n langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Scaling (Not Recommended)
|
||||||
|
|
||||||
|
Note: Due to LangBot using ReadWriteOnce persistent storage, multi-replica scaling is not supported. For high availability, consider using ReadWriteMany storage or alternative architectures.
|
||||||
|
|
||||||
|
#### Backup Data
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Backup PVC data
|
||||||
|
kubectl exec -n langbot -it <langbot-pod-name> -- tar czf /tmp/backup.tar.gz /app/data
|
||||||
|
kubectl cp langbot/<langbot-pod-name>:/tmp/backup.tar.gz ./backup.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Uninstall
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Delete all resources (keep PVCs)
|
||||||
|
kubectl delete deployment,service,configmap -n langbot --all
|
||||||
|
|
||||||
|
# Delete PVCs (will delete data)
|
||||||
|
kubectl delete pvc -n langbot --all
|
||||||
|
|
||||||
|
# Delete namespace
|
||||||
|
kubectl delete namespace langbot
|
||||||
|
```
|
||||||
|
|
||||||
|
### Troubleshooting
|
||||||
|
|
||||||
|
#### Pods Not Starting
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Pod status
|
||||||
|
kubectl get pods -n langbot
|
||||||
|
|
||||||
|
# View detailed information
|
||||||
|
kubectl describe pod -n langbot <pod-name>
|
||||||
|
|
||||||
|
# View events
|
||||||
|
kubectl get events -n langbot --sort-by='.lastTimestamp'
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Storage Issues
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check PVC status
|
||||||
|
kubectl get pvc -n langbot
|
||||||
|
|
||||||
|
# Check PV
|
||||||
|
kubectl get pv
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Network Access Issues
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Service
|
||||||
|
kubectl get svc -n langbot
|
||||||
|
|
||||||
|
# Test port forwarding
|
||||||
|
kubectl port-forward -n langbot svc/langbot 5300:5300
|
||||||
|
```
|
||||||
|
|
||||||
|
### Production Recommendations
|
||||||
|
|
||||||
|
1. **Use specific version tags**: Avoid using `latest` tag, use specific version like `rockchin/langbot:v1.0.0`
|
||||||
|
2. **Configure resource limits**: Adjust CPU and memory limits based on actual load
|
||||||
|
3. **Use Ingress + TLS**: Configure HTTPS access and certificate management
|
||||||
|
4. **Configure monitoring and alerts**: Integrate monitoring tools like Prometheus, Grafana
|
||||||
|
5. **Regular backups**: Configure automated backup strategy to protect data
|
||||||
|
6. **Use dedicated StorageClass**: Configure high-performance storage for production
|
||||||
|
7. **Configure affinity rules**: Ensure Pods are scheduled to appropriate nodes
|
||||||
|
|
||||||
|
### Advanced Configuration
|
||||||
|
|
||||||
|
#### Using Secrets for Sensitive Information
|
||||||
|
|
||||||
|
If you need to configure sensitive information like API keys:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: langbot-secrets
|
||||||
|
namespace: langbot
|
||||||
|
type: Opaque
|
||||||
|
data:
|
||||||
|
api_key: <base64-encoded-value>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then reference in Deployment:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
env:
|
||||||
|
- name: API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: langbot-secrets
|
||||||
|
key: api_key
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Configure Horizontal Pod Autoscaling (HPA)
|
||||||
|
|
||||||
|
Note: Requires ReadWriteMany storage type
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: langbot-hpa
|
||||||
|
namespace: langbot
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: langbot
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 3
|
||||||
|
metrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 70
|
||||||
|
```
|
||||||
|
|
||||||
|
### References
|
||||||
|
|
||||||
|
- [LangBot Official Documentation](https://docs.langbot.app)
|
||||||
|
- [Docker Deployment Guide](https://docs.langbot.app/zh/deploy/langbot/docker.html)
|
||||||
|
- [Kubernetes Official Documentation](https://kubernetes.io/docs/)
|
||||||
74
docker/deploy-k8s-test.sh
Executable file
74
docker/deploy-k8s-test.sh
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Quick test script for LangBot Kubernetes deployment
|
||||||
|
# This script helps you test the Kubernetes deployment locally
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 LangBot Kubernetes Deployment Test Script"
|
||||||
|
echo "=============================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check for kubectl
|
||||||
|
if ! command -v kubectl &> /dev/null; then
|
||||||
|
echo "❌ kubectl is not installed. Please install kubectl first."
|
||||||
|
echo "Visit: https://kubernetes.io/docs/tasks/tools/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ kubectl is installed"
|
||||||
|
|
||||||
|
# Check if kubectl can connect to a cluster
|
||||||
|
if ! kubectl cluster-info &> /dev/null; then
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ No Kubernetes cluster found."
|
||||||
|
echo ""
|
||||||
|
echo "To test locally, you can use:"
|
||||||
|
echo " - kind: https://kind.sigs.k8s.io/"
|
||||||
|
echo " - minikube: https://minikube.sigs.k8s.io/"
|
||||||
|
echo " - k3s: https://k3s.io/"
|
||||||
|
echo ""
|
||||||
|
echo "Example with kind:"
|
||||||
|
echo " kind create cluster --name langbot-test"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✓ Connected to Kubernetes cluster"
|
||||||
|
kubectl cluster-info
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Ask user to confirm
|
||||||
|
read -p "Do you want to deploy LangBot to this cluster? (y/N) " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Deployment cancelled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📦 Deploying LangBot..."
|
||||||
|
kubectl apply -f kubernetes.yaml
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "⏳ Waiting for pods to be ready..."
|
||||||
|
kubectl wait --for=condition=ready pod -l app=langbot -n langbot --timeout=300s
|
||||||
|
kubectl wait --for=condition=ready pod -l app=langbot-plugin-runtime -n langbot --timeout=300s
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Deployment complete!"
|
||||||
|
echo ""
|
||||||
|
echo "📊 Deployment status:"
|
||||||
|
kubectl get all -n langbot
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🌐 To access LangBot Web UI, run:"
|
||||||
|
echo " kubectl port-forward -n langbot svc/langbot 5300:5300"
|
||||||
|
echo ""
|
||||||
|
echo "Then visit: http://localhost:5300"
|
||||||
|
echo ""
|
||||||
|
echo "📝 To view logs:"
|
||||||
|
echo " kubectl logs -n langbot -l app=langbot -f"
|
||||||
|
echo ""
|
||||||
|
echo "🗑️ To uninstall:"
|
||||||
|
echo " kubectl delete namespace langbot"
|
||||||
|
echo ""
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Docker Compose configuration for LangBot
|
||||||
|
# For Kubernetes deployment, see kubernetes.yaml and README_K8S.md
|
||||||
version: "3"
|
version: "3"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|||||||
400
docker/kubernetes.yaml
Normal file
400
docker/kubernetes.yaml
Normal file
@@ -0,0 +1,400 @@
|
|||||||
|
# Kubernetes Deployment for LangBot
|
||||||
|
# This file provides Kubernetes deployment manifests for LangBot based on docker-compose.yaml
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# kubectl apply -f kubernetes.yaml
|
||||||
|
#
|
||||||
|
# Prerequisites:
|
||||||
|
# - A Kubernetes cluster (1.19+)
|
||||||
|
# - kubectl configured to communicate with your cluster
|
||||||
|
# - (Optional) A StorageClass for dynamic volume provisioning
|
||||||
|
#
|
||||||
|
# Components:
|
||||||
|
# - Namespace: langbot
|
||||||
|
# - PersistentVolumeClaims for data persistence
|
||||||
|
# - Deployments for langbot and langbot_plugin_runtime
|
||||||
|
# - Services for network access
|
||||||
|
# - ConfigMap for timezone configuration
|
||||||
|
|
||||||
|
---
|
||||||
|
# Namespace
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: langbot
|
||||||
|
labels:
|
||||||
|
app: langbot
|
||||||
|
|
||||||
|
---
|
||||||
|
# PersistentVolumeClaim for LangBot data
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: langbot-data
|
||||||
|
namespace: langbot
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
# Uncomment and modify if you have a specific StorageClass
|
||||||
|
# storageClassName: your-storage-class
|
||||||
|
|
||||||
|
---
|
||||||
|
# PersistentVolumeClaim for LangBot plugins
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: langbot-plugins
|
||||||
|
namespace: langbot
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 5Gi
|
||||||
|
# Uncomment and modify if you have a specific StorageClass
|
||||||
|
# storageClassName: your-storage-class
|
||||||
|
|
||||||
|
---
|
||||||
|
# PersistentVolumeClaim for Plugin Runtime data
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: langbot-plugin-runtime-data
|
||||||
|
namespace: langbot
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 5Gi
|
||||||
|
# Uncomment and modify if you have a specific StorageClass
|
||||||
|
# storageClassName: your-storage-class
|
||||||
|
|
||||||
|
---
|
||||||
|
# ConfigMap for environment configuration
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: langbot-config
|
||||||
|
namespace: langbot
|
||||||
|
data:
|
||||||
|
TZ: "Asia/Shanghai"
|
||||||
|
PLUGIN__RUNTIME_WS_URL: "ws://langbot-plugin-runtime:5400/control/ws"
|
||||||
|
|
||||||
|
---
|
||||||
|
# Deployment for LangBot Plugin Runtime
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: langbot-plugin-runtime
|
||||||
|
namespace: langbot
|
||||||
|
labels:
|
||||||
|
app: langbot-plugin-runtime
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: langbot-plugin-runtime
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: langbot-plugin-runtime
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: langbot-plugin-runtime
|
||||||
|
image: rockchin/langbot:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
command: ["uv", "run", "-m", "langbot_plugin.cli.__init__", "rt"]
|
||||||
|
ports:
|
||||||
|
- containerPort: 5400
|
||||||
|
name: runtime
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: langbot-config
|
||||||
|
key: TZ
|
||||||
|
volumeMounts:
|
||||||
|
- name: plugin-data
|
||||||
|
mountPath: /app/data/plugins
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "250m"
|
||||||
|
limits:
|
||||||
|
memory: "2Gi"
|
||||||
|
cpu: "1000m"
|
||||||
|
# Liveness probe to restart container if it becomes unresponsive
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5400
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
# Readiness probe to know when container is ready to accept traffic
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5400
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 5
|
||||||
|
timeoutSeconds: 3
|
||||||
|
failureThreshold: 3
|
||||||
|
volumes:
|
||||||
|
- name: plugin-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: langbot-plugin-runtime-data
|
||||||
|
restartPolicy: Always
|
||||||
|
|
||||||
|
---
|
||||||
|
# Service for LangBot Plugin Runtime
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: langbot-plugin-runtime
|
||||||
|
namespace: langbot
|
||||||
|
labels:
|
||||||
|
app: langbot-plugin-runtime
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: langbot-plugin-runtime
|
||||||
|
ports:
|
||||||
|
- port: 5400
|
||||||
|
targetPort: 5400
|
||||||
|
protocol: TCP
|
||||||
|
name: runtime
|
||||||
|
|
||||||
|
---
|
||||||
|
# Deployment for LangBot
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: langbot
|
||||||
|
namespace: langbot
|
||||||
|
labels:
|
||||||
|
app: langbot
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: langbot
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: langbot
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: langbot
|
||||||
|
image: rockchin/langbot:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
ports:
|
||||||
|
- containerPort: 5300
|
||||||
|
name: web
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 2280
|
||||||
|
name: webhook-start
|
||||||
|
protocol: TCP
|
||||||
|
# Note: Kubernetes doesn't support port ranges directly in container ports
|
||||||
|
# The webhook ports 2280-2290 are available, but we only expose the start of the range
|
||||||
|
# If you need all ports exposed, consider using a Service with multiple port definitions
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: langbot-config
|
||||||
|
key: TZ
|
||||||
|
- name: PLUGIN__RUNTIME_WS_URL
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: langbot-config
|
||||||
|
key: PLUGIN__RUNTIME_WS_URL
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /app/data
|
||||||
|
- name: plugins
|
||||||
|
mountPath: /app/plugins
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "1Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
limits:
|
||||||
|
memory: "4Gi"
|
||||||
|
cpu: "2000m"
|
||||||
|
# Liveness probe to restart container if it becomes unresponsive
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 5300
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
# Readiness probe to know when container is ready to accept traffic
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 5300
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 5
|
||||||
|
timeoutSeconds: 3
|
||||||
|
failureThreshold: 3
|
||||||
|
volumes:
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: langbot-data
|
||||||
|
- name: plugins
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: langbot-plugins
|
||||||
|
restartPolicy: Always
|
||||||
|
|
||||||
|
---
|
||||||
|
# Service for LangBot (ClusterIP for internal access)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: langbot
|
||||||
|
namespace: langbot
|
||||||
|
labels:
|
||||||
|
app: langbot
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: langbot
|
||||||
|
ports:
|
||||||
|
- port: 5300
|
||||||
|
targetPort: 5300
|
||||||
|
protocol: TCP
|
||||||
|
name: web
|
||||||
|
- port: 2280
|
||||||
|
targetPort: 2280
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2280
|
||||||
|
- port: 2281
|
||||||
|
targetPort: 2281
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2281
|
||||||
|
- port: 2282
|
||||||
|
targetPort: 2282
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2282
|
||||||
|
- port: 2283
|
||||||
|
targetPort: 2283
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2283
|
||||||
|
- port: 2284
|
||||||
|
targetPort: 2284
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2284
|
||||||
|
- port: 2285
|
||||||
|
targetPort: 2285
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2285
|
||||||
|
- port: 2286
|
||||||
|
targetPort: 2286
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2286
|
||||||
|
- port: 2287
|
||||||
|
targetPort: 2287
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2287
|
||||||
|
- port: 2288
|
||||||
|
targetPort: 2288
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2288
|
||||||
|
- port: 2289
|
||||||
|
targetPort: 2289
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2289
|
||||||
|
- port: 2290
|
||||||
|
targetPort: 2290
|
||||||
|
protocol: TCP
|
||||||
|
name: webhook-2290
|
||||||
|
|
||||||
|
---
|
||||||
|
# Ingress for external access (Optional - requires Ingress Controller)
|
||||||
|
# Uncomment and modify the following section if you want to expose LangBot via Ingress
|
||||||
|
# apiVersion: networking.k8s.io/v1
|
||||||
|
# kind: Ingress
|
||||||
|
# metadata:
|
||||||
|
# name: langbot-ingress
|
||||||
|
# namespace: langbot
|
||||||
|
# annotations:
|
||||||
|
# # Uncomment and modify based on your ingress controller
|
||||||
|
# # nginx.ingress.kubernetes.io/rewrite-target: /
|
||||||
|
# # cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
# spec:
|
||||||
|
# ingressClassName: nginx # Change based on your ingress controller
|
||||||
|
# rules:
|
||||||
|
# - host: langbot.yourdomain.com # Change to your domain
|
||||||
|
# http:
|
||||||
|
# paths:
|
||||||
|
# - path: /
|
||||||
|
# pathType: Prefix
|
||||||
|
# backend:
|
||||||
|
# service:
|
||||||
|
# name: langbot
|
||||||
|
# port:
|
||||||
|
# number: 5300
|
||||||
|
# # Uncomment for TLS/HTTPS
|
||||||
|
# # tls:
|
||||||
|
# # - hosts:
|
||||||
|
# # - langbot.yourdomain.com
|
||||||
|
# # secretName: langbot-tls
|
||||||
|
|
||||||
|
---
|
||||||
|
# Service for LangBot with LoadBalancer (Alternative to Ingress)
|
||||||
|
# Uncomment the following if you want to expose LangBot directly via LoadBalancer
|
||||||
|
# This is useful in cloud environments (AWS, GCP, Azure, etc.)
|
||||||
|
# apiVersion: v1
|
||||||
|
# kind: Service
|
||||||
|
# metadata:
|
||||||
|
# name: langbot-loadbalancer
|
||||||
|
# namespace: langbot
|
||||||
|
# labels:
|
||||||
|
# app: langbot
|
||||||
|
# spec:
|
||||||
|
# type: LoadBalancer
|
||||||
|
# selector:
|
||||||
|
# app: langbot
|
||||||
|
# ports:
|
||||||
|
# - port: 80
|
||||||
|
# targetPort: 5300
|
||||||
|
# protocol: TCP
|
||||||
|
# name: web
|
||||||
|
# - port: 2280
|
||||||
|
# targetPort: 2280
|
||||||
|
# protocol: TCP
|
||||||
|
# name: webhook-start
|
||||||
|
# # Add more webhook ports as needed
|
||||||
|
|
||||||
|
---
|
||||||
|
# Service for LangBot with NodePort (Alternative for exposing service)
|
||||||
|
# Uncomment if you want to expose LangBot via NodePort
|
||||||
|
# This is useful for testing or when LoadBalancer is not available
|
||||||
|
# apiVersion: v1
|
||||||
|
# kind: Service
|
||||||
|
# metadata:
|
||||||
|
# name: langbot-nodeport
|
||||||
|
# namespace: langbot
|
||||||
|
# labels:
|
||||||
|
# app: langbot
|
||||||
|
# spec:
|
||||||
|
# type: NodePort
|
||||||
|
# selector:
|
||||||
|
# app: langbot
|
||||||
|
# ports:
|
||||||
|
# - port: 5300
|
||||||
|
# targetPort: 5300
|
||||||
|
# nodePort: 30300 # Must be in range 30000-32767
|
||||||
|
# protocol: TCP
|
||||||
|
# name: web
|
||||||
|
# - port: 2280
|
||||||
|
# targetPort: 2280
|
||||||
|
# nodePort: 30280 # Must be in range 30000-32767
|
||||||
|
# protocol: TCP
|
||||||
|
# name: webhook
|
||||||
Reference in New Issue
Block a user