要求:APISIX 3.8.0版本的备份和还原步骤。
ITS等PODS方法或任何其他方法,
apisix/apisix(githubsource)或Bitnami/apisix(githubSource),它是最受欢迎的图表。 这两个图表都取决于Bitnami/etcd
,如您所见, ETCD中的disaster恢复 从文档: ETCD旨在承受机器故障。一个ETCD群集会自动从临时故障(例如机器重新启动)中恢复,并容忍(n-1)/2永久失败的N成员。当成员永久失败时,无论是由于硬件故障还是磁盘损坏,它都将失去对群集的访问。如果群集永久损失超过(n-1)/2成员,则灾难性失败,不可撤销地失去了法定人数。一旦法定人数丢失,群集就无法达成共识,因此无法继续接受更新。
要恢复群集,您首先需要一个有效的ETCD键空间快照。您可以通过在其中一个群集成员上使用etcdctl snapshot save
来做到这一点。示例:
kubectl exec -n <namespace> <etcd_pod_name> -- etcdctl --endpoints="http://localhost:2379" snapshot save /backup/etcd-snapshot.db
端,您可以登录到POD并运行命令:
# Enter the pod
mikyll98@localhost:~$ kubectl exec -n ingress-apisix pods/apisix-etcd-0 -- /bin/bash
# Make a snapshot
I have no name!@apisix-etcd-0:/opt/bitnami/etcd$ etcdctl --endpoints="http://localhost:2379" snapshot save /backup/etcd-snapshot.db
NB
,而不是
etcdutl
)从快照还原群集:etcdctl
NB:ETCD群集的所有成员都应从同一快照恢复。
typythy您会设置一个自动制作快照的cronjob,因此您不必手动运行命令。 示例:
etcdutl snapshot restore snapshot.db --data-dir output-dir
therm helm Chart中的disaster恢复apiVersion: batch/v1
kind: CronJob
metadata:
name: apisix-etcd-disaster-recovery
namespace: "default"
spec:
concurrencyPolicy: Forbid
schedule: "44 4 * * *"
suspend: false
jobTemplate:
spec:
template:
spec:
containers:
- name: etcd-disaster-recovery
image: docker.io/bitnami/etcd:3.5.18-debian-12-r1
env:
- name: ETCDCTL_API
value: "3"
command: ["etcdctl"]
args:
- --endpoints=http://localhost:2379
- snapshot
- save
- /backup/etcd-snapshot.db
图表已经提供了执行此任务的模板。您只需要配置适当的
bitnami/etcd
即可。您可以找到一个参考Herey。 示例
values.yaml
:
values.yaml
apisix:
# [...]
etcd:
persistence:
enabled: true
# [...]
disasterRecovery:
enabled: true
cronjob:
# Cron format (at 4:00 on Sunday)
schedule: 0 4 * * 0
snapshotsDir: /snapshots
readMe