2

我正在尝试将 Google Filestore 备份到 GCS 存储桶。我还想将主要区域中文件存储的内容同步到次要区域中的另一个文件存储。

为此,我创建了一个在计算引擎 VM 中运行良好的 bash 脚本。我已将其转换为 docker 容器,我在 GKE 集群中作为 kubernetes cronjob 运行。

但是当我在 GKE pod 中运行脚本时,它给了我以下错误:

root@filestore-backup-1594023480-k9wmn:/# mount 10.52.219.10:/vol1 /mnt/filestore-primary 
mount.nfs: access denied by server while mounting 10.52.219.10:/vol1

我能够从容器连接到文件存储:

root@filestore-backup-1594023480-k9wmn:/# telnet 10.52.219.10 111 
Trying 10.52.219.10... 
Connected to 10.52.219.10. 
Escape character is '^]'.

pod ip 范围也会添加到 VPC ip 范围。Filestore 已获得完全访问权限以允许 VPC。相同的脚本在计算引擎 VM 中运行良好。

为什么在 GKE pod 中安装 google 文件存储不起作用?


用于备份谷歌文件存储的 bash 脚本:

#!/bin/bash

# Create the GCloud Authentication file if set
    touch /root/gcloud.json
    echo "$GCP_GCLOUD_AUTH" > /root/gcloud.json
    gcloud auth activate-service-account --key-file=/root/gcloud.json


#backup filestore to GCS

DATE=$(date +"%m-%d-%Y-%T")

mkdir -p /mnt/$FILESHARE_MOUNT_PRIMARY
mount $FILESTORE_IP_PRIMARY:/$FILESHARE_NAME_PRIMARY /mnt/$FILESHARE_MOUNT_PRIMARY

gsutil rsync -r /mnt/$FILESHARE_MOUNT_PRIMARY/ gs://$GCP_BUCKET_NAME/$DATE/


#rsync filestore to secondary region

mkdir -p /mnt/$FILESHARE_MOUNT_SECONDARY
mount $FILESTORE_IP_SECONDARY:/$FILESHARE_NAME_SECONDARY /mnt/$FILESHARE_MOUNT_SECONDARY

rsync -avz /mnt/$FILESHARE_MOUNT_PRIMARY/ /mnt/$FILESHARE_MOUNT_SECONDARY/

所有的变量都在 yaml 中作为环境变量传递。

4

1 回答 1

3

您无法访问它的原因是因为 GKE 使用文件存储的方法与其他 GCP 实例不同,为了能够挂载,您必须创建 Persistent Volume 和 Persistent Volume Claims。

  • 如果您只需要对文件存储的一个静态访问,您可以按照本指南手动设置 PV 和 PVC 以附加到您的应用程序:

  • 如果您想让它更具动态性并为更广泛的使用做好准备,请考虑使用 NFS Client Provisioner。它将创建一个可以在您的 yaml 上引用的 storageClass 简而言之storageClass,为每个访问提供动态的 PV 和 PVC。您可以按照本指南进行操作:

  • 此外,您还可以使用Filestore CSI 驱动程序使 GKE 工作负载能够在不使用 helm 的情况下动态创建和挂载 Filestore 卷。但是,CSI 驱动程序不是受支持的 Google Cloud 产品,因此您应该考虑它是否适合您的生产环境:

选择您的路径,如果您有任何问题,请在评论中告诉我。

于 2020-07-15T09:56:25.883 回答