Skip to main content
本产品推出了新版本。
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

为 GCP 后端配置 CVS

贡献者

了解如何使用提供的示例配置将适用于Google Cloud Platform (GCP)的NetApp Cloud Volumes Service (CVS)配置为Astra Trident安装的后端。

了解适用于GCP的CVS的Astra Trident支持

Astra Trident支持默认CVS服务类型为on的卷 "GCP"。无论CVS服务类型允许的最小值如何、Astra Trident都不支持小于100 GiB的CVS卷。因此、如果请求的卷小于最小大小、Trident会自动创建100 GiB卷。

您需要的内容

以配置和使用 "适用于 Google Cloud 的 Cloud Volumes Service" 后端,您需要满足以下要求:

  • 配置了 NetApp CVS 的 Google Cloud 帐户

  • Google Cloud 帐户的项目编号

  • Google Cloud服务帐户 netappcloudvolumes.admin role

  • CVS 服务帐户的 API 密钥文件

后端配置选项

有关后端配置选项,请参见下表:

参数 Description Default

version

始终为 1

storageDriverName

存储驱动程序的名称

"GCP-CVS"

backendName

自定义名称或存储后端

驱动程序名称 + "_" + API 密钥的一部分

storageClass

存储类型选择选项 hardware (性能优化)或 software (CVS服务类型)

projectNumber

Google Cloud 帐户项目编号。该值可在 Google Cloud 门户的主页页面上找到。

apiRegion

CVS 帐户区域。后端将在该区域配置卷。

apiKey

Google Cloud服务帐户的API密钥 netappcloudvolumes.admin 角色。它包括 Google Cloud 服务帐户专用密钥文件的 JSON 格式的内容(逐字复制到后端配置文件)。

proxyURL

代理服务器需要连接到 CVS 帐户时的代理 URL 。代理服务器可以是 HTTP 代理,也可以是 HTTPS 代理。对于 HTTPS 代理,将跳过证书验证,以允许在代理服务器中使用自签名证书。不支持启用了身份验证的代理服务器。

nfsMountOptions

精细控制 NFS 挂载选项。

"nfsvers=3"

limitVolumeSize

如果请求的卷大小超过此值,则配置失败

"" (默认情况下不强制实施)

serviceLevel

新卷的 CVS 服务级别。这些值包括 "standard" , "premer" 和 "Extreme " 。

标准

network

用于CVS卷的GCP网络

default

debugTraceFlags

故障排除时要使用的调试标志。示例、 \{"api":false, "method":true}。除非您正在进行故障排除并需要详细的日志转储,否则请勿使用此功能。

如果使用共享VPC网络、则同时使用这两者 projectNumberhostProjectNumber 必须指定。在这种情况下、 projectNumber 是服务项目、和 hostProjectNumber 是主机项目。

apiRegion 表示Astra Trident创建CVS卷的GCP区域。创建跨区域Kubernetes集群时、在中创建的CVS卷 apiRegion 可用于在多个GCP区域的节点上计划的工作负载。请注意,跨区域流量会产生额外成本。

备注
  • 要启用跨区域访问、请定义StorageClass allowedTopologies 必须包括所有地区。例如:

    - key: topology.kubernetes.io/region
      values:
      - us-east1
      - europe-west1
  • storageClass 是一个可选参数、可用于选择所需的 "CVS 服务类型"。您可以从基本CVS服务类型中进行选择 (storageClass=software)或CVS-Performance服务类型 (storageClass=hardware)、Trident默认使用此选项。请确保指定 apiRegion 提供相应的CVS storageClass 在后端定义中。

注意 Astra Trident 与 Google Cloud 上的基本 CVS 服务类型集成是一项 * 测试版功能 * ,不适用于生产工作负载。在 CVS-Performance 服务类型中, Trident 是 "* 完全支持 "* ,默认情况下会使用它。

每个后端都会在一个 Google Cloud 区域中配置卷。要在其他区域创建卷,您可以定义其他后端。

您可以通过在配置文件的特殊部分中指定以下选项来控制默认配置每个卷的方式。请参见以下配置示例。

参数 Description Default

exportRule

新卷的导出规则

"0.0.0.0/0

snapshotDir

访问 .snapshot 目录

false

snapshotReserve

为快照预留的卷百分比

"" (接受 CVS 默认值为 0 )

size

新卷的大小

"100Gi"

exportRule 值必须是以CIDR表示法表示的IPv4地址或IPv4子网任意组合的逗号分隔列表。

备注 对于在 CVS Google Cloud 后端创建的所有卷, Trident 会在配置存储池时将其上的所有标签复制到该存储卷。存储管理员可以为每个存储池定义标签,并对存储池中创建的所有卷进行分组。这样,您就可以根据后端配置中提供的一组可自定义标签来方便地区分卷了。

示例 1 :最低配置

这是绝对的最低后端配置。

{
    "version": 1,
    "storageDriverName": "gcp-cvs",
    "projectNumber": "012345678901",
    "apiRegion": "us-west2",
    "apiKey": {
        "type": "service_account",
        "project_id": "my-gcp-project",
        "private_key_id": "<id_value>",
        "private_key": "
        -----BEGIN PRIVATE KEY-----
        <key_value>
        -----END PRIVATE KEY-----\n",
        "client_email": "cloudvolumes-admin-sa@my-gcp-project.iam.gserviceaccount.com",
        "client_id": "123456789012345678901",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudvolumes-admin-sa%40my-gcp-project.iam.gserviceaccount.com"
    }
}

示例 2 :基本 CVS 服务类型配置

此示例显示了使用基本 CVS 服务类型的后端定义,该服务类型适用于通用工作负载,可提供轻 / 中性能以及高区域可用性。

{
    "version": 1,
    "storageDriverName": "gcp-cvs",
    "projectNumber": "012345678901",
    "storageClass": "software",
    "apiRegion": "us-east4",
    "apiKey": {
        "type": "service_account",
        "project_id": "my-gcp-project",
        "private_key_id": "<id_value>",
        "private_key": "
        -----BEGIN PRIVATE KEY-----
        <key_value>
        -----END PRIVATE KEY-----\n",
        "client_email": "cloudvolumes-admin-sa@my-gcp-project.iam.gserviceaccount.com",
        "client_id": "123456789012345678901",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudvolumes-admin-sa%40my-gcp-project.iam.gserviceaccount.com"
    }
}

示例 3 :单服务级别配置

此示例显示了一个后端文件,该文件对 Google Cloud us-west2 区域中由 Astra Trident 创建的所有存储应用相同的方面。此示例还显示了的使用情况 proxyURL 在后端配置文件中。

{
    "version": 1,
    "storageDriverName": "gcp-cvs",
    "projectNumber": "012345678901",
    "apiRegion": "us-west2",
    "apiKey": {
        "type": "service_account",
        "project_id": "my-gcp-project",
        "private_key_id": "<id_value>",
        "private_key": "
        -----BEGIN PRIVATE KEY-----
        <key_value>
        -----END PRIVATE KEY-----\n",
        "client_email": "cloudvolumes-admin-sa@my-gcp-project.iam.gserviceaccount.com",
        "client_id": "123456789012345678901",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudvolumes-admin-sa%40my-gcp-project.iam.gserviceaccount.com"
    },
    "proxyURL": "http://proxy-server-hostname/",
    "nfsMountOptions": "vers=3,proto=tcp,timeo=600",
    "limitVolumeSize": "10Ti",
    "serviceLevel": "premium",
    "defaults": {
        "snapshotDir": "true",
        "snapshotReserve": "5",
        "exportRule": "10.0.0.0/24,10.0.1.0/24,10.0.2.100",
        "size": "5Ti"
    }
}

示例 4 :虚拟存储池配置

此示例显示了使用虚拟存储池和配置的后端定义文件 StorageClasses 这是指它们。

在下面所示的示例后端定义文件中、为所有存储池设置了特定的默认值、这些存储池设置了 snapshotReserve 5%和 exportRule 到0.0.0.0/0。虚拟存储池在中进行定义 storage 部分。在此示例中、每个存储池都设置了自己的存储池 serviceLevel、并且某些池会覆盖默认值。

{
    "version": 1,
    "storageDriverName": "gcp-cvs",
    "projectNumber": "012345678901",
    "apiRegion": "us-west2",
    "apiKey": {
        "type": "service_account",
        "project_id": "my-gcp-project",
        "private_key_id": "<id_value>",
        "private_key": "
        -----BEGIN PRIVATE KEY-----
        <key_value>
        -----END PRIVATE KEY-----\n",
        "client_email": "cloudvolumes-admin-sa@my-gcp-project.iam.gserviceaccount.com",
        "client_id": "123456789012345678901",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudvolumes-admin-sa%40my-gcp-project.iam.gserviceaccount.com"
    },
    "nfsMountOptions": "vers=3,proto=tcp,timeo=600",

    "defaults": {
        "snapshotReserve": "5",
        "exportRule": "0.0.0.0/0"
    },

    "labels": {
        "cloud": "gcp"
    },
    "region": "us-west2",

    "storage": [
        {
            "labels": {
                "performance": "extreme",
                "protection": "extra"
            },
            "serviceLevel": "extreme",
            "defaults": {
                "snapshotDir": "true",
                "snapshotReserve": "10",
                "exportRule": "10.0.0.0/24"
            }
        },
        {
            "labels": {
                "performance": "extreme",
                "protection": "standard"
            },
            "serviceLevel": "extreme"
        },
        {
            "labels": {
                "performance": "premium",
                "protection": "extra"
            },
            "serviceLevel": "premium",
            "defaults": {
                "snapshotDir": "true",
                "snapshotReserve": "10"
            }
        },

        {
            "labels": {
                "performance": "premium",
                "protection": "standard"
            },
            "serviceLevel": "premium"
        },

        {
            "labels": {
                "performance": "standard"
            },
            "serviceLevel": "standard"
        }
    ]
}

以下 StorageClass 定义引用了上述存储池。使用 parameters.selector 字段中、您可以为每个StorageClass指定用于托管卷的虚拟池。卷将在选定池中定义各个方面。

第一个StorageClass (cvs-extreme-extra-protection)映射到第一个虚拟存储池。这是唯一一个可提供极高性能且 Snapshot 预留为 10% 的池。最后一个StorageClass (cvs-extra-protection)调用提供10%快照预留的任何存储池。Astra Trident 决定选择哪个虚拟存储池,并确保满足快照预留要求。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-extreme-extra-protection
provisioner: netapp.io/trident
parameters:
  selector: "performance=extreme; protection=extra"
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-extreme-standard-protection
provisioner: netapp.io/trident
parameters:
  selector: "performance=premium; protection=standard"
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-premium-extra-protection
provisioner: netapp.io/trident
parameters:
  selector: "performance=premium; protection=extra"
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-premium
provisioner: netapp.io/trident
parameters:
  selector: "performance=premium; protection=standard"
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-standard
provisioner: netapp.io/trident
parameters:
  selector: "performance=standard"
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cvs-extra-protection
provisioner: netapp.io/trident
parameters:
  selector: "protection=extra"
allowVolumeExpansion: true

下一步是什么?

创建后端配置文件后,运行以下命令:

tridentctl create backend -f <backend-file>

如果后端创建失败,则后端配置出现问题。您可以运行以下命令来查看日志以确定发生原因:

tridentctl logs

确定并更正配置文件中的问题后,您可以再次运行 create 命令。