You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

裸机环境下Rook Ceph块存储:如何从Pod导出文件?

从Rook Ceph块存储的Pod传输文件到外部主机

嘿,针对你要把Pod里的文件(比如数据库备份)下载到其他主机的需求,这里有几个实用的方法,你可以根据自己的场景来选:

方法1:用kubectl cp直接复制(最省心)

这是Kubernetes自带的工具,不需要额外部署任何东西,直接就能把文件从Pod复制到本地或中转主机。

操作步骤:

  1. 先找到你的目标Pod名称,比如MySQL的Pod:

    kubectl get pods -n <你的命名空间>
    

    假设你的Pod名叫mysql-7f98d76b89-2xqzk,命名空间是default

  2. 如果已经在Pod里生成了备份文件(比如用mysqldump导出到/tmp/mysql-backup.sql),直接执行以下命令复制到当前主机:

    kubectl cp default/mysql-7f98d76b89-2xqzk:/tmp/mysql-backup.sql ./local-mysql-backup.sql
    

    要是想传到其他远程主机,先复制到当前执行kubectl的主机,再用scp转过去:

    scp ./local-mysql-backup.sql your-user@remote-host:/path/to/save/
    

方法2:临时起HTTP服务直接下载(适合大文件)

如果文件比较大,或者想跳过中转直接下载到目标主机,可以在Pod里临时启动一个简单的HTTP服务,通过端口转发访问。

操作步骤:

  1. 先进入Pod的终端:
    kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
    
  2. 切换到备份文件所在目录(比如/tmp),用Python启动HTTP服务(大多数容器镜像都预装了Python):
    cd /tmp && python3 -m http.server 8080
    
  3. 打开另一个终端,做端口转发,把Pod的8080端口映射到本地主机:
    kubectl port-forward <pod-name> -n <namespace> 8080:8080
    
  4. 现在在目标主机上,用curl或者浏览器就能直接下载:
    curl http://<你的kubectl主机IP>:8080/mysql-backup.sql -o ./mysql-backup.sql
    
    下载完成后,记得关掉Pod里的HTTP服务和端口转发哦。

方法3:直接用MySQL工具导出(针对数据库备份)

如果是MySQL的备份,其实可以不用先在Pod里生成文件,直接在外部主机上用mysqldump连接Pod里的MySQL,把备份直接导出到本地,一步到位。

操作步骤:

  1. 先做端口转发,把Pod的3306端口映射到本地:
    kubectl port-forward <mysql-pod-name> -n <namespace> 3306:3306
    
  2. 在外部主机上执行mysqldump命令,直接导出备份:
    mysqldump -h 127.0.0.1 -u <mysql用户名> -p<mysql密码> <目标数据库名> > ./mysql-backup.sql
    
    要是目标主机不在kubectl主机本地,把127.0.0.1换成kubectl主机的IP,同时确保端口能正常访问。

方法4:挂载Ceph卷到临时Pod(适合频繁操作)

如果你需要频繁访问Ceph块存储里的文件,可以创建一个临时Pod挂载同一个PVC,然后从这个临时Pod复制文件,避免影响业务Pod。

操作步骤:

  1. 先找到你的PVC名称(比如mysql-pvc):
    kubectl get pvc -n <namespace>
    
  2. 创建一个临时Pod的YAML文件temp-storage-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: temp-storage-pod
      namespace: <你的命名空间>
    spec:
      containers:
      - name: temp-container
        image: busybox
        command: ["sleep", "3600"]  # 让Pod保持运行1小时
        volumeMounts:
        - name: ceph-storage
          mountPath: /data
      volumes:
      - name: ceph-storage
        persistentVolumeClaim:
          claimName: mysql-pvc  # 替换成你的PVC名称
    
  3. 部署临时Pod:
    kubectl apply -f temp-storage-pod.yaml
    
  4. kubectl cp从临时Pod复制文件,和方法1一样:
    kubectl cp <namespace>/temp-storage-pod:/data/path/to/backup.sql ./local-backup.sql
    
  5. 用完后记得删除临时Pod,避免浪费资源:
    kubectl delete pod temp-storage-pod -n <namespace>
    

不管用哪种方法,都要确保你有对应的Pod访问权限,并且备份文件的路径是正确的。如果是WordPress的文件,操作逻辑和MySQL Pod完全一样,找到对应的Pod就行啦。

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

火山引擎 最新活动