bot/deploy/vke/README.md
本文档介绍如何将 Vikingbot 部署到火山引擎容器服务(VKE)。
┌─────────────────────────────────────────────────────────────┐
│ 火山引擎 VKE │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Namespace: default │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ Deployment: vikingbot │ │ │
│ │ │ ┌───────────────────────────────────────────┐ │ │ │
│ │ │ │ Pod (2 replicas) │ │ │ │
│ │ │ │ ┌─────────────────────────────────────┐ │ │ │ │
│ │ │ │ │ Container: vikingbot │ │ │ │ │
│ │ │ │ │ - Port: 18791 (gateway) │ │ │ │ │
│ │ │ │ │ - Volume: /root/.vikingbot │ │ │ │ │
│ │ │ │ └─────────────────────────────────────┘ │ │ │ │
│ │ │ └───────────────────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ Service: vikingbot (ClusterIP) │ │ │
│ │ │ - Port: 80 → TargetPort: 18791 │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ PVC: vikingbot-data (10Gi) │ │ │
│ │ │ └──→ PV: vikingbot-tos-pv (TOS) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ TOS Bucket: vikingbot_data │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
等待集群创建完成(约 10-15 分钟)
vikingbotvikingbotvikingbot如果使用 TOS 作为持久化存储,需要创建存储桶:
vikingbot-data(或自定义)重要:Secret Access Key 只显示一次,请妥善保存!
~/.kube/config,或配置 KUBECONFIG 环境变量验证连接:
kubectl get nodes
确保本地已安装:
验证安装:
docker --version
kubectl version --client
python3 --version
mkdir -p ~/.config/vikingbot
cp deploy/vke/vke_deploy.example.yaml ~/.config/vikingbot/vke_deploy.yaml
vim ~/.config/vikingbot/vke_deploy.yaml
填入以下信息:
volcengine_access_key: AKLTxxxxxxxxxx # 你的 AccessKey ID
volcengine_secret_key: xxxxxxxxxx # 你的 Secret Access Key
volcengine_region: cn-beijing # 地域
vke_cluster_id: ccxxxxxxxxxx # 集群 ID(从控制台获取)
image_registry: vikingbot-cn-beijing.cr.volces.com # 镜像仓库地址
image_namespace: vikingbot
image_repository: vikingbot
image_tag: latest
# 镜像仓库登录凭证(如果是私有仓库)
registry_username: "你的火山引擎账号"
registry_password: "你的火山引擎密码"
# 存储类型:local (EBS) 或 tos
storage_type: tos
# TOS 配置(仅 storage_type=tos 时需要)
tos_bucket: vikingbot_data
tos_path: /.vikingbot/
tos_region: cn-beijing
cd /path/to/vikingbot
chmod +x deploy/vke/deploy.sh
deploy/vke/deploy.sh
部署脚本会自动完成:
| 配置项 | 说明 | 必填 | 示例 |
|---|---|---|---|
volcengine_access_key | 火山引擎 AccessKey ID | 是 | AKLTxxxx |
volcengine_secret_key | 火山引擎 Secret Access Key | 是 | xxxx |
volcengine_region | 地域 | 是 | cn-beijing |
vke_cluster_id | VKE 集群 ID | 是 | ccxxxx |
image_registry | 镜像仓库地址 | 是 | vikingbot-cn-beijing.cr.volces.com |
image_namespace | 命名空间 | 是 | vikingbot |
image_repository | 仓库名称 | 是 | vikingbot |
image_tag | 镜像标签 | 否 | latest |
use_timestamp_tag | 使用时间戳标签 | 否 | false |
registry_username | 镜像仓库用户名 | 否 | |
registry_password | 镜像仓库密码 | 否 | |
storage_type | 存储类型:local 或 tos | 否 | local |
tos_bucket | TOS 桶名 | storage_type=tos | vikingbot_data |
tos_path | TOS 路径 | storage_type=tos | /.vikingbot/ |
tos_region | TOS 地域 | storage_type=tos | cn-beijing |
k8s_namespace | K8s 命名空间 | 否 | default |
k8s_replicas | Pod 副本数 | 否 | 1 |
kubeconfig_path | kubeconfig 路径 | 否 | ~/.kube/config |
如果不想使用一键部署脚本,可以按以下步骤手动操作。
# 构建镜像
docker build --platform linux/amd64 -f deploy/Dockerfile -t vikingbot .
# 登录镜像仓库
docker login vikingbot-cn-beijing.cr.volces.com -u <username> -p <password>
# Tag 镜像
docker tag vikingbot vikingbot-cn-beijing.cr.volces.com/vikingbot/vikingbot:latest
# 推送
docker push vikingbot-cn-beijing.cr.volces.com/vikingbot/vikingbot:latest
复制 deploy/vke/k8s/deployment.yaml,替换以下变量:
__IMAGE_NAME__:完整镜像名__REPLICAS__:副本数__ACCESS_MODES__:访问模式(ReadWriteOnce 或 ReadWriteMany)__STORAGE_CLASS_CONFIG__:StorageClass 配置__VOLUME_NAME_CONFIG__:VolumeName 配置# Base64 编码 AccessKey
AK_B64=$(echo -n "your-access-key" | base64)
SK_B64=$(echo -n "your-secret-key" | base64)
# 创建 Secret
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: vikingbot-tos-secret
type: Opaque
data:
AccessKeyId: ${AK_B64}
SecretAccessKey: ${SK_B64}
EOF
kubectl apply -f deploy/vke/k8s/deployment.yaml
kubectl get pods -l app=vikingbot
预期输出:
NAME READY STATUS RESTARTS AGE
vikingbot-746d99fd94-xxxxx 1/1 Running 0 2m
kubectl get svc vikingbot
# 查看所有 Pod 日志
kubectl logs -l app=vikingbot --tail=100
# 跟随日志
kubectl logs -f deployment/vikingbot
kubectl rollout status deployment/vikingbot
kubectl port-forward svc/vikingbot 8080:80
# 查看 Pod 事件
kubectl describe pod <pod-name>
# 查看日志
kubectl logs <pod-name>
检查:
# 查看 PVC 状态
kubectl get pvc
# 查看 PV 状态
kubectl get pv
# 查看事件
kubectl describe pvc vikingbot-data
健康检查路径:/health,端口:18791
# 进入 Pod 内部检查
kubectl exec -it <pod-name> -- bash
# 在 Pod 内测试
curl http://localhost:18791/health
# 扩容/缩容
kubectl scale deployment vikingbot --replicas=3
# 更新镜像
kubectl set image deployment/vikingbot vikingbot=vikingbot-cn-beijing.cr.volces.com/vikingbot/vikingbot:new-tag
# 重启 Deployment
kubectl rollout restart deployment/vikingbot
# 回滚
kubectl rollout undo deployment/vikingbot
# 删除所有资源
kubectl delete -f deploy/vke/k8s/deployment.yaml
| 地域 ID | 地域名称 |
|---|---|
| cn-beijing | 华北2(北京) |
| cn-shanghai | 华东2(上海) |
| cn-guangzhou | 华南1(广州) |
| cn-shenzhen | 华南2(深圳) |
{namespace}-{region}.cr.volces.com
示例:vikingbot-cn-beijing.cr.volces.com