You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

APISIX 3.8.0版本备份与恢复步骤咨询(含Etcd Pods等方式)

APISIX 3.8.0 备份与恢复指南

一、基于Etcd Pod的备份与恢复方案

APISIX核心配置存储在Etcd中,直接操作Etcd Pod是最直接的备份恢复方式。

备份步骤

  1. 定位Etcd Pod
    获取集群中Etcd Pod的名称(假设APISIX部署在apisix命名空间):

    kubectl get pods -n apisix | grep etcd
    

    输出示例:apisix-etcd-0 1/1 Running 0 2d

  2. 在Etcd Pod内创建快照
    进入目标Etcd Pod执行备份命令(Etcd开启TLS/认证时需追加对应参数):

    # 无认证/TLS场景
    kubectl exec -it <etcd-pod-name> -n apisix -- etcdctl snapshot save /tmp/apisix-etcd-snapshot.db
    
    # 开启认证/TLS场景(替换证书路径与账号密码)
    kubectl exec -it <etcd-pod-name> -n apisix -- etcdctl snapshot save /tmp/apisix-etcd-snapshot.db \
      --user=root:<your-etcd-password> \
      --endpoints=https://localhost:2379 \
      --cacert=/opt/bitnami/etcd/certs/ca.crt \
      --cert=/opt/bitnami/etcd/certs/client.crt \
      --key=/opt/bitnami/etcd/certs/client.key
    
  3. 将快照文件拷贝到本地

    kubectl cp apisix/<etcd-pod-name>:/tmp/apisix-etcd-snapshot.db ./apisix-etcd-snapshot.db
    

恢复步骤

  1. 暂停APISIX实例
    避免恢复期间有新配置写入,先将APISIX副本数缩为0:

    kubectl scale deployment apisix -n apisix --replicas=0
    
  2. 将本地快照拷贝到Etcd Pod

    kubectl cp ./apisix-etcd-snapshot.db apisix/<etcd-pod-name>:/tmp/apisix-etcd-snapshot.db
    
  3. 执行快照恢复
    需指定Etcd的数据目录(需与Pod内配置一致,默认一般为/var/lib/etcd或/bitnami/etcd/data):

    # 无认证/TLS场景
    kubectl exec -it <etcd-pod-name> -n apisix -- etcdctl snapshot restore /tmp/apisix-etcd-snapshot.db \
      --data-dir=/var/lib/etcd
    
    # 开启认证/TLS场景
    kubectl exec -it <etcd-pod-name> -n apisix -- etcdctl snapshot restore /tmp/apisix-etcd-snapshot.db \
      --user=root:<your-etcd-password> \
      --endpoints=https://localhost:2379 \
      --cacert=/opt/bitnami/etcd/certs/ca.crt \
      --cert=/opt/bitnami/etcd/certs/client.crt \
      --key=/opt/bitnami/etcd/certs/client.key \
      --data-dir=/var/lib/etcd
    
  4. 重启Etcd Pod并恢复APISIX

    # 删除Etcd Pod触发重建
    kubectl delete pod <etcd-pod-name> -n apisix
    
    # 恢复APISIX副本数(替换为原副本数)
    kubectl scale deployment apisix -n apisix --replicas=3
    

二、其他可行备份恢复方案

方案1:直接使用etcdctl本地备份(无需进入Pod)

若能直接访问Etcd集群端点,可在本地配置etcdctl后直接操作:

  1. 配置环境变量
    export ETCDCTL_API=3
    export ETCDCTL_CACERT=/path/to/etcd-ca.crt
    export ETCDCTL_CERT=/path/to/etcd-client.crt
    export ETCDCTL_KEY=/path/to/etcd-client.key
    export ETCDCTL_ENDPOINTS="https://etcd-0.apisix-etcd.apisix.svc.cluster.local:2379,https://etcd-1.apisix-etcd.apisix.svc.cluster.local:2379"
    
  2. 执行备份
    etcdctl snapshot save ./apisix-etcd-snapshot.db
    
  3. 恢复流程
    先停止Etcd集群写入,在每个Etcd节点执行snapshot restore,再重启Etcd与APISIX实例。

方案2:APISIX Dashboard配置导出导入

适合快速恢复业务级配置(路由、服务、上游等),但无法导出Etcd元数据(如用户权限、集群配置):

  • 备份:登录APISIX Dashboard → 进入「配置导出」页面 → 选择需导出的配置类型 → 下载JSON备份文件
  • 恢复:登录APISIX Dashboard → 进入「配置导入」页面 → 上传备份JSON文件 → 确认导入即可

方案3:自定义定时备份脚本

编写Shell脚本实现自动备份,通过crontab定时执行:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
NAMESPACE="apisix"
BACKUP_DIR="/opt/apisix-backups"
ETCD_POD=$(kubectl get pods -n $NAMESPACE | grep etcd | awk '{print $1}')

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行备份
kubectl exec -it $ETCD_POD -n $NAMESPACE -- etcdctl snapshot save /tmp/apisix-snapshot-$DATE.db \
  --user=root:<your-etcd-password> \
  --endpoints=https://localhost:2379 \
  --cacert=/opt/bitnami/etcd/certs/ca.crt \
  --cert=/opt/bitnami/etcd/certs/client.crt \
  --key=/opt/bitnami/etcd/certs/client.key

# 拷贝到本地
kubectl cp $NAMESPACE/$ETCD_POD:/tmp/apisix-snapshot-$DATE.db $BACKUP_DIR/

# 清理7天前的旧备份
find $BACKUP_DIR -name "apisix-snapshot-*.db" -mtime +7 -delete

添加定时任务(每天凌晨2点执行):

crontab -e
# 添加以下内容
0 2 * * * /opt/apisix-backups/backup.sh

注意事项

  • 备份前尽量暂停APISIX写入操作,避免备份数据不一致
  • 定期测试恢复流程,确保备份文件可用
  • 若为Etcd集群,备份单个节点快照即可,但恢复时需在所有节点执行snapshot restore
  • 开启Etcd认证/TLS时,所有etcdctl命令必须携带对应证书与认证参数

内容的提问来源于stack exchange,提问作者Gokul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:57:11