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

Google Cloud NetApp Volumes后端配置选项和示例

贡献者 netapp-aruldeepa

了解Google Cloud NetApp Volumes的后端配置选项并查看配置示例。

后端配置选项

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

参数 描述 默认

version

始终为 1

storageDriverName

存储驱动程序的名称

价值 `storageDriverName`必须指定为“google-cloud-netapp-volumes”。

backendName

(可选)存储后端自定义名称

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

storagePools

用于指定卷创建存储池的可选参数。

projectNumber

Google Cloud 帐户项目编号。该值可在 Google Cloud 门户网站首页找到。

location

Trident创建 GCNV 卷的 Google Cloud 位置。创建跨区域 Kubernetes 集群时,在以下位置创建的卷: `location`可用于跨多个 Google Cloud 区域的节点上调度的工作负载。跨区域运输会产生额外费用。

apiKey

用于 Google Cloud 服务帐户的 API 密钥 netapp.admin`角色。它包含 Google Cloud 服务帐户私钥文件的 JSON 格式内容(原封不动地复制到后端配置文件中)。这 `apiKey`必须包含以下键的键值对: `typeproject_idclient_emailclient_idauth_uritoken_uriauth_provider_x509_cert_url , 和 client_x509_cert_url

nfsMountOptions

对 NFS 挂载选项进行精细控制。

"nfsvers=3"

limitVolumeSize

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

(默认情况下不强制执行)

serviceLevel

存储池的服务级别及其容量。这些值是 flexstandardpremium , 或者 extreme

labels

要应用于卷的任意 JSON 格式标签集

""

network

Google Cloud 网络用于 GCNV 卷。

debugTraceFlags

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

无效的

nasType

配置 NFS 或 SMB 卷的创建。选项有 nfs, `smb`或空值。设置为 null 则默认使用 NFS 卷。

nfs

supportedTopologies

表示此后端支持的区域和区域列表。更多信息,请参阅"使用 CSI 拓扑"。例如:
supportedTopologies:
- topology.kubernetes.io/region: asia-east1
topology.kubernetes.io/zone: asia-east1-a

卷配置选项

您可以控制默认卷配置 `defaults`配置文件部分。

参数 描述 默认

exportRule

新卷的出口规则。必须是以逗号分隔的 IPv4 地址列表,地址可以任意组合。

“0.0.0.0/0”

snapshotDir

访问 `.snapshot`目录

NFSv4 为“true”,NFSv3 为“false”。

snapshotReserve

快照预留的卷百分比

(接受默认值 0)

unixPermissions

新卷的 Unix 权限(4 位八进制数字)。

""

示例配置

以下示例展示了基本配置,其中大多数参数都保留默认值。这是定义后端最简单的方法。

最小配置

这是最基本的后端配置。通过这种配置, Trident会发现您已委派给配置位置中Google Cloud NetApp Volumes的所有存储池,并随机将新卷放置在其中一个存储池上。因为 `nasType`省略了 `nfs`默认设置生效,后端将为 NFS 卷进行配置。

如果您刚开始使用Google Cloud NetApp Volumes并进行尝试,这种配置是理想的,但在实践中,您很可能需要为配置的卷提供额外的范围。

---
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-gcnv-secret
type: Opaque
stringData:
  private_key_id: f2cb6ed6d7cc10c453f7d3406fc700c5df0ab9ec
  private_key: |
    -----BEGIN PRIVATE KEY-----\n
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m\n
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m\n
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m\n
    XsYg6gyxy4zq7OlwWgLwGa==\n
    -----END PRIVATE KEY-----\n

---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcnv
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: "123455380079"
  location: europe-west6
  serviceLevel: premium
  apiKey:
    type: service_account
    project_id: my-gcnv-project
    client_email: myproject-prod@my-gcnv-project.iam.gserviceaccount.com
    client_id: "103346282737811234567"
    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/myproject-prod%40my-gcnv-project.iam.gserviceaccount.com
  credentials:
    name: backend-tbc-gcnv-secret
SMB卷配置
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcnv1
  namespace: trident
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: "123456789"
  location: asia-east1
  serviceLevel: flex
  nasType: smb
  apiKey:
    type: service_account
    project_id: cloud-native-data
    client_email: trident-sample@cloud-native-data.iam.gserviceaccount.com
    client_id: "123456789737813416734"
    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/trident-sample%40cloud-native-data.iam.gserviceaccount.com
  credentials:
    name: backend-tbc-gcnv-secret
使用存储池过滤器进行配置
---
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-gcnv-secret
type: Opaque
stringData:
  private_key_id: f2cb6ed6d7cc10c453f7d3406fc700c5df0ab9ec
  private_key: |
    -----BEGIN PRIVATE KEY-----
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    XsYg6gyxy4zq7OlwWgLwGa==
    -----END PRIVATE KEY-----

---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcnv
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: "123455380079"
  location: europe-west6
  serviceLevel: premium
  storagePools:
    - premium-pool1-europe-west6
    - premium-pool2-europe-west6
  apiKey:
    type: service_account
    project_id: my-gcnv-project
    client_email: myproject-prod@my-gcnv-project.iam.gserviceaccount.com
    client_id: "103346282737811234567"
    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/myproject-prod%40my-gcnv-project.iam.gserviceaccount.com
  credentials:
    name: backend-tbc-gcnv-secret
虚拟池配置

此后端配置在单个文件中定义了多个虚拟池。虚拟池在以下位置定义: `storage`部分。当您有多个支持不同服务级别的存储池,并且想要在 Kubernetes 中创建代表这些存储级别的存储类时,它们非常有用。虚拟池标签用于区分不同的池子。例如,在下面的例子中 `performance`标签和 `serviceLevel`类型用于区分虚拟池。

您还可以设置一些适用于所有虚拟池的默认值,并覆盖各个虚拟池的默认值。在下面的例子中, `snapshotReserve`和 `exportRule`作为所有虚拟池的默认值。

更多信息,请参阅"虚拟池"

---
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-gcnv-secret
type: Opaque
stringData:
  private_key_id: f2cb6ed6d7cc10c453f7d3406fc700c5df0ab9ec
  private_key: |
    -----BEGIN PRIVATE KEY-----
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    znHczZsrrtHisIsAbOguSaPIKeyAZNchRAGzlzZE4jK3bl/qp8B4Kws8zX5ojY9m
    XsYg6gyxy4zq7OlwWgLwGa==
    -----END PRIVATE KEY-----

---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcnv
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: "123455380079"
  location: europe-west6
  apiKey:
    type: service_account
    project_id: my-gcnv-project
    client_email: myproject-prod@my-gcnv-project.iam.gserviceaccount.com
    client_id: "103346282737811234567"
    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/myproject-prod%40my-gcnv-project.iam.gserviceaccount.com
  credentials:
    name: backend-tbc-gcnv-secret
  defaults:
    snapshotReserve: "10"
    exportRule: 10.0.0.0/24
  storage:
    - labels:
        performance: extreme
      serviceLevel: extreme
      defaults:
        snapshotReserve: "5"
        exportRule: 0.0.0.0/0
    - labels:
        performance: premium
      serviceLevel: premium
    - labels:
        performance: standard
      serviceLevel: standard
GKE 的云身份
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcp-gcnv
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: '012345678901'
  network: gcnv-network
  location: us-west2
  serviceLevel: Premium
  storagePool: pool-premium1
支持的拓扑配置

Trident可根据区域和可用区为工作负载提供卷。这 `supportedTopologies`此后端配置中的块用于提供每个后端的区域和区域列表。此处指定的区域和区域值必须与每个 Kubernetes 集群节点上的标签中的区域和区域值相匹配。这些区域和分区代表存储类中可以提供的允许值的列表。对于包含后端提供的区域和可用区子集的存储类, Trident会在所述区域和可用区中创建卷。更多信息,请参阅"使用 CSI 拓扑"

---
version: 1
storageDriverName: google-cloud-netapp-volumes
subscriptionID: 9f87c765-4774-fake-ae98-a721add45451
tenantID: 68e4f836-edc1-fake-bff9-b2d865ee56cf
clientID: dd043f63-bf8e-fake-8076-8de91e5713aa
clientSecret: SECRET
location: asia-east1
serviceLevel: flex
supportedTopologies:
  - topology.kubernetes.io/region: asia-east1
    topology.kubernetes.io/zone: asia-east1-a
  - topology.kubernetes.io/region: asia-east1
    topology.kubernetes.io/zone: asia-east1-b

下一步是什么?

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

kubectl create -f <backend-file>

要验证后端是否创建成功,请运行以下命令:

kubectl get tridentbackendconfig

NAME               BACKEND NAME       BACKEND UUID                           PHASE   STATUS
backend-tbc-gcnv   backend-tbc-gcnv   b2fd1ff9-b234-477e-88fd-713913294f65   Bound   Success

如果后端创建失败,则后端配置存在问题。您可以使用以下方式描述后端: `kubectl get tridentbackendconfig <backend-name>`运行以下命令查看日志以确定原因:

tridentctl logs

在您发现并纠正配置文件中的问题后,您可以删除后端并再次运行创建命令。

存储类定义

以下是一个基本内容 `StorageClass`上述后端所指的定义。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gcnv-nfs-sc
provisioner: csi.trident.netapp.io
parameters:
  backendType: "google-cloud-netapp-volumes"

使用以下示例定义 `parameter.selector`场地:

使用 `parameter.selector`你可以为每个对象指定。 `StorageClass`这"虚拟池"用于托管卷。该卷将具有所选池中定义的方面。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: extreme-sc
provisioner: csi.trident.netapp.io
parameters:
  selector: performance=extreme
  backendType: google-cloud-netapp-volumes

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-sc
provisioner: csi.trident.netapp.io
parameters:
  selector: performance=premium
  backendType: google-cloud-netapp-volumes

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard-sc
provisioner: csi.trident.netapp.io
parameters:
  selector: performance=standard
  backendType: google-cloud-netapp-volumes

有关存储类的更多详细信息,请参阅"创建存储类"

SMB卷的示例定义

使用 nasTypenode-stage-secret-name , 和 `node-stage-secret-namespace`您可以指定 SMB 卷并提供所需的 Active Directory 凭据。任何 Active Directory 用户/密码,无论拥有任何权限或没有权限,都可以用作节点阶段密钥。

默认命名空间上的基本配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gcnv-sc-smb
provisioner: csi.trident.netapp.io
parameters:
  backendType: "google-cloud-netapp-volumes"
  trident.netapp.io/nasType: "smb"
  csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
  csi.storage.k8s.io/node-stage-secret-namespace: "default"
每个命名空间使用不同的密钥
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gcnv-sc-smb
provisioner: csi.trident.netapp.io
parameters:
  backendType: "google-cloud-netapp-volumes"
  trident.netapp.io/nasType: "smb"
  csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
  csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
每个卷使用不同的密钥
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gcnv-sc-smb
provisioner: csi.trident.netapp.io
parameters:
  backendType: "google-cloud-netapp-volumes"
  trident.netapp.io/nasType: "smb"
  csi.storage.k8s.io/node-stage-secret-name: ${pvc.name}
  csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
备注 `nasType: smb`筛选支持 SMB 卷的存储池。 `nasType: nfs`或者 `nasType: null`NFS池过滤器。

PVC定义示例

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: gcnv-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  storageClassName: gcnv-nfs-sc

要验证 PVC 是否已绑定,请运行以下命令:

kubectl get pvc gcnv-nfs-pvc

NAME          STATUS   VOLUME                                    CAPACITY  ACCESS MODES   STORAGECLASS AGE
gcnv-nfs-pvc  Bound    pvc-b00f2414-e229-40e6-9b16-ee03eb79a213  100Gi     RWX            gcnv-nfs-sc  1m