APISIX 3.8.0版本备份与恢复步骤咨询(含Etcd Pods等方式)
APISIX 3.8.0 备份与恢复指南
一、基于Etcd Pod的备份与恢复方案
APISIX核心配置存储在Etcd中,直接操作Etcd Pod是最直接的备份恢复方式。
备份步骤
定位Etcd Pod
获取集群中Etcd Pod的名称(假设APISIX部署在apisix命名空间):kubectl get pods -n apisix | grep etcd输出示例:
apisix-etcd-0 1/1 Running 0 2d在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将快照文件拷贝到本地
kubectl cp apisix/<etcd-pod-name>:/tmp/apisix-etcd-snapshot.db ./apisix-etcd-snapshot.db
恢复步骤
暂停APISIX实例
避免恢复期间有新配置写入,先将APISIX副本数缩为0:kubectl scale deployment apisix -n apisix --replicas=0将本地快照拷贝到Etcd Pod
kubectl cp ./apisix-etcd-snapshot.db apisix/<etcd-pod-name>:/tmp/apisix-etcd-snapshot.db执行快照恢复
需指定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重启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后直接操作:
- 配置环境变量
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" - 执行备份
etcdctl snapshot save ./apisix-etcd-snapshot.db - 恢复流程
先停止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
相关产品推荐
相关产品推荐

