我正在尝试研究如何从 ceph 块存储中传输文件,例如数据库备份。
我已经按照此处的示例进行操作: https ://github.com/rook/rook/blob/master/Documentation/ceph-block.md ,这样我就可以使用 Wordpress 和 mysql 了rook-ceph-block
。
然后如何从正在运行的 pod 传输文件。例如,如果我想将数据库备份下载到另一台主机上?
我正在尝试研究如何从 ceph 块存储中传输文件,例如数据库备份。
我已经按照此处的示例进行操作: https ://github.com/rook/rook/blob/master/Documentation/ceph-block.md ,这样我就可以使用 Wordpress 和 mysql 了rook-ceph-block
。
然后如何从正在运行的 pod 传输文件。例如,如果我想将数据库备份下载到另一台主机上?
有许多方法可能可行。如果您知道哪个特定容器具有该文件,则始终可以配置节点端口,使用该文件通过 ssh 进入容器,安装并运行 sshd,然后使用您分配的节点端口从目标计算机使用 scp。
另一种方法是在挂载相同文件系统的新 pod 中创建一个简单的 HTTP 服务器。这可能会使用 HTTP get 命令公开文件。只需几行代码,您就可以使用 nodejs、express 和 fs 轻松完成此操作。这比第一个解决方案要好,因为您不必知道哪个容器有文件(这可能很难发现)。
但是,您可能做错了事。正确的解决方案是配置 rook 使用卷快照为您执行此操作。
根本不使用块存储。
目前,我使用 NFS 和 Ubuntu+Autofs(Kubernetes 之外)和相对较新的Kubernetes 本地存储。见底部。与默认 Longhorn 相比的一个优势是 RWX 而不是 RWO。
有了sudo mc
您可以轻松地来回复制内容。
您也可以轻松地将内容从 GlusterFS 中复制出来,但在我几周前测试的版本 7 中,它还不适合具有许多小型写入操作的数据库或 Redis。
apiVersion: v1
kind: PersistentVolume
metadata:
name: <PV_NAME>
spec:
capacity:
storage: 20Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: <AUTO_FS_PATH>
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- <VM_NAME>
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: <PVC_NAME>
spec:
accessModes:
- ReadWriteMany
storageClassName: local-storage
resources:
requests:
storage: 20Gi