docker 无法直接在GKE pod中挂载Google文件存储(不使用PV)

qc6wkl3g  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(89)

我试图采取谷歌文件存储备份到一个GCS桶。我也想rsync的内容在主区域的文件存储到另一个文件存储在辅助区域。
为此,我创建了一个bash脚本,它在计算引擎VM中运行良好。我已经将其转换为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中的环境变量传递。

zujrkrfu

zujrkrfu1#

您无法访问它的原因是因为GKE与其他GCP示例使用不同的方法来消耗文件存储,为了能够挂载,您必须创建持久卷和持久卷声明。

  • 如果你只需要一个静态访问文件存储,你可以按照这个指南手动设置PV和PVC来附加到你的应用程序:
  • Filestore - Accessing Fileshares from GKE Clusters
  • 如果您想使其更具动态性,并为更广泛的使用做好准备,请考虑使用NFS客户端配置。它将创建一个storageClass,可以在你的yamls上引用。简而言之,storageClass为每次访问动态地提供PV和PVC。您可以遵循以下指南:
  • How to deploy GCP Filestore with GKE + Helm
  • 此外,您还可以使用Filestore CSI驱动程序来支持GKE工作负载动态创建和挂载Filestore卷,而无需使用helm。但是,CSI驱动程序不是受支持的Google Cloud产品,因此您应该考虑它是否适合您的生产环境:
  • Kubernetes - GCP Filestore CSI Driver

选择你的道路,如果你有任何问题,让我知道在评论。

相关问题