当前位置:   article > 正文

Longhorn+K8S+KubeSphere云端数据管理,实战 Sentry PostgreSQL 数据卷增量快照/备份与还原...

k8s 部署sentry

image

云端实验环境配置

VKE K8S Cluster

  1. Vultr 托管集群

image

  1. 3worker 节点,kubectl get nodes
  1. k8s-paas-71a68ebbc45b Ready <none> 12d v1.23.14
  2. k8s-paas-dbbd42d034e6 Ready <none> 12d v1.23.14
  3. k8s-paas-f7788d4f4a38 Ready <none> 12d v1.23.14

Kubesphere v3.3.1 集群可视化管理

全栈的 Kubernetes 容器云 PaaS 解决方案。

image

Longhorn 1.14

Kubernetes 的云原生分布式块存储。

image

Sentry Helm Charts

非官方 k8s helm charts,大规模吞吐需建设微服务集群/中间件集群/边缘存储集群

  1. helm repo add sentry https://sentry-kubernetes.github.io/charts
  2. kubectl create ns sentry
  3. helm install sentry sentry/sentry -f values.yaml -n sentry
  4. # helm install sentry sentry/sentry -n sentry

为 Sentry PostgreSQL 数据卷不同状态下创建快照

创建快照

这里我们创建 3 个 PostgreSQL 数据卷快照,分别对应 Sentry 后台面板的不同状态。

Sentry 后台面板状态-1

image

Sentry 后台面板状态-2

image

Sentry 后台面板状态-3

image

分别创建 3 个快照

image

创建备份

配置备份目标服务器

用于访问备份存储的端点。支持 NFS 和 S3 协议的服务器。

image

针对快照 2 创建备份

image

image

查看备份卷

备份卷创建时间取决于你的卷大小和网络带宽。

image

Longhorn 为 K8S StatefulSets 恢复卷的示例

官方文档:https://longhorn.io/docs/1.4.0/snapshots-and-backups/backup-and-restore/restore-statefulset/

Longhorn 支持恢复备份,此功能的一个用例是恢复用于 Kubernetes StatefulSet 的数据,这需要为备份的每个副本恢复一个卷。

要恢复,请按照以下说明进行操作。 下面的示例使用了一个 StatefulSet,其中一个卷附加到每个 Pod 和两个副本。

  1. 在您的 Web 浏览器中连接到 Longhorn UI 页面。在 Backup 选项卡下,选择 StatefulSet 卷的名称。 单击卷条目的下拉菜单并将其还原。将卷命名为稍后可以轻松引用的 Persistent Volumes
  • 对需要恢复的每个卷重复此步骤。
  • 例如,如果恢复一个有两个副本的 StatefulSet,这些副本的卷名为 pvc-01apvc-02b,则恢复可能如下所示:
Backup NameRestored Volume
pvc-01astatefulset-vol-0
pvc-02bstatefulset-vol-1
  1. 在 Kubernetes 中,为创建的每个 Longhorn 卷创建一个 Persistent Volume。将卷命名为以后可以轻松引用的 Persistent Volume Claims。下面必须替换 storage 容量、numberOfReplicasstorageClassNamevolumeHandle。在示例中,我们在 Longhorn 中引用 statefulset-vol-0statefulset-vol-1,并使用 longhorn 作为我们的 storageClassName
  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: statefulset-vol-0
  5. spec:
  6. capacity:
  7. storage: <size> # must match size of Longhorn volume
  8. volumeMode: Filesystem
  9. accessModes:
  10. - ReadWriteOnce
  11. persistentVolumeReclaimPolicy: Delete
  12. csi:
  13. driver: driver.longhorn.io # driver must match this
  14. fsType: ext4
  15. volumeAttributes:
  16. numberOfReplicas: <replicas> # must match Longhorn volume value
  17. staleReplicaTimeout: '30' # in minutes
  18. volumeHandle: statefulset-vol-0 # must match volume name from Longhorn
  19. storageClassName: longhorn # must be same name that we will use later
  20. ---
  21. apiVersion: v1
  22. kind: PersistentVolume
  23. metadata:
  24. name: statefulset-vol-1
  25. spec:
  26. capacity:
  27. storage: <size> # must match size of Longhorn volume
  28. volumeMode: Filesystem
  29. accessModes:
  30. - ReadWriteOnce
  31. persistentVolumeReclaimPolicy: Delete
  32. csi:
  33. driver: driver.longhorn.io # driver must match this
  34. fsType: ext4
  35. volumeAttributes:
  36. numberOfReplicas: <replicas> # must match Longhorn volume value
  37. staleReplicaTimeout: '30'
  38. volumeHandle: statefulset-vol-1 # must match volume name from Longhorn
  39. storageClassName: longhorn # must be same name that we will use later
  1. 在将部署 StatefulSetnamespace 中,为每个 Persistent Volume 创建 PersistentVolume ClaimsPersistent Volume Claim 的名称必须遵循以下命名方案:
<name of Volume Claim Template>-<name of StatefulSet>-<index>

StatefulSet Pod 是零索引的。在这个例子中,Volume Claim Template 的名称是 dataStatefulSet 的名称是 webapp,并且有两个副本,分别是索引 01

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: data-webapp-0
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. resources:
  9. requests:
  10. storage: 2Gi # must match size from earlier
  11. storageClassName: longhorn # must match name from earlier
  12. volumeName: statefulset-vol-0 # must reference Persistent Volume
  13. ---
  14. apiVersion: v1
  15. kind: PersistentVolumeClaim
  16. metadata:
  17. name: data-webapp-1
  18. spec:
  19. accessModes:
  20. - ReadWriteOnce
  21. resources:
  22. requests:
  23. storage: 2Gi # must match size from earlier
  24. storageClassName: longhorn # must match name from earlier
  25. volumeName: statefulset-vol-1 # must reference Persistent Volume
  1. 创建 StatefulSet:
  1. apiVersion: apps/v1beta2
  2. kind: StatefulSet
  3. metadata:
  4. name: webapp # match this with the PersistentVolumeClaim naming scheme
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx # has to match .spec.template.metadata.labels
  9. serviceName: "nginx"
  10. replicas: 2 # by default is 1
  11. template:
  12. metadata:
  13. labels:
  14. app: nginx # has to match .spec.selector.matchLabels
  15. spec:
  16. terminationGracePeriodSeconds: 10
  17. containers:
  18. - name: nginx
  19. image: k8s.gcr.io/nginx-slim:0.8
  20. ports:
  21. - containerPort: 80
  22. name: web
  23. volumeMounts:
  24. - name: data
  25. mountPath: /usr/share/nginx/html
  26. volumeClaimTemplates:
  27. - metadata:
  28. name: data # match this with the PersistentVolumeClaim naming scheme
  29. spec:
  30. accessModes: [ "ReadWriteOnce" ]
  31. storageClassName: longhorn # must match name from earlier
  32. resources:
  33. requests:
  34. storage: 2Gi # must match size from earlier

结果: 现在应该可以从 StatefulSet Pod 内部访问恢复的数据。

通过 Longhorn UI 恢复 Sentry PostgreSQL 数据卷

卸载 sentry 命名空间下一切资源并自删除 namespace

  1. # 删除 release
  2. helm uninstall sentry -n sentry
  3. # 删除 namespace
  4. kubectl delete ns sentry

查看当前 namespace

kubectl get ns,已无 sentry。

image

从备份服务器恢复 PostgreSQL 数据卷

还原最新的备份

image

设置不同机器间多个卷副本, 高可用
  1. 卷名设置为 statefulset-vol-sentry-postgresql-0
  2. 副本设置为至少 2,卷副本会被自动调度到不同节点,保证卷高可用。

image

为 Longhorn 备份卷创建 PV/PVC

image

注意:这里我们需要重新创建 namespace:sentry

kubectl create ns sentry

image

image

重新安装 sentry
helm install sentry sentry/sentry -f values.yaml -n sentry
查看 statefulset-vol-sentry-postgresql-0 副本

image

重新访问 Sentry

image

ok,成功恢复。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/167569
推荐阅读
相关标签
  

闽ICP备14008679号