搜索

5.11. AWS Elastic File Service CSI Driver Operator

download PDF

5.11.1. 概述

OpenShift Container Platform 可以使用 AWS Elastic File Service (EFS) 的 Container Storage Interface (CSI) 驱动程序置备持久性卷 (PV)。

在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储配置 CSI 卷

安装 AWS EFS CSI Driver Operator 后,OpenShift Container Platform 在 openshift-cluster-csi-drivers 命名空间中默认安装 AWS EFS CSI Operator 和 AWS EFS CSI 驱动程序。这可让 AWS EFS CSI Driver Operator 创建挂载到 AWS EFS 资产中的 CSI 置备 PV。

  • 安装之后,AWS EFS CSI Driver Operator 不会默认创建存储类来创建持久性卷声明 (PVC)。但是,您可以手动创建 AWS EFS StorageClass。AWS EFS CSI Driver Operator 支持动态卷置备,方法是允许按需创建存储卷。这消除了集群管理员预置备存储的需求。
  • AWS EFS CSI 驱动程序 允许您创建并挂载 AWS EFS PV。
注意

AWS EFS 只支持区域卷,不支持 zonal 卷。

5.11.2. 关于 CSI

在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。

CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。

5.11.3. 设置 AWS EFS CSI Driver Operator

  1. 安装 AWS EFS CSI Driver Operator (一个红帽 operator)。
  2. 如果您将 AWS EFS 与 AWS Secure Token Service (STS)搭配使用,请获取 STS 的角色 Amazon Resource Name (ARN)。安装 AWS EFS CSI Driver Operator 需要此项。
  3. 安装 AWS EFS CSI Driver Operator。
  4. 安装 AWS EFS CSI 驱动程序。

5.11.3.1. 获取安全令牌服务的角色 Amazon 资源名称

此流程解释了如何获取角色 Amazon 资源名称(ARN),以使用 AWS 安全令牌服务(STS)上的 OpenShift Container Platform 配置 AWS EFS CSI Driver Operator。

重要

在安装 AWS EFS CSI Driver Operator 前执行这个步骤(请参阅安装 AWS EFS CSI Driver Operator 流程)。

先决条件

  • 使用具有 cluster-admin 角色的用户访问集群。
  • AWS 帐户凭证

流程

您可以以多种方式获取 ARN 角色。以下流程演示了使用与集群安装相同的概念和 CCO 实用程序 (ccoctl) 二进制工具的方法。

获取使用 STS 配置 AWS EFS CSI Driver Operator 的角色 ARN:

  1. 从 OpenShift Container Platform 发行镜像中提取 ccoctl,用于使用 STS 安装集群。如需更多信息,请参阅"配置 Cloud Credential Operator 工具程序"。
  2. 创建并保存 EFS CredentialsRequest YAML 文件,如以下示例所示,然后将其放在 credrequests 目录中:

    示例

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: openshift-aws-efs-csi-driver
      namespace: openshift-cloud-credential-operator
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AWSProviderSpec
        statementEntries:
        - action:
          - elasticfilesystem:*
          effect: Allow
          resource: '*'
      secretRef:
        name: aws-efs-cloud-credentials
        namespace: openshift-cluster-csi-drivers
      serviceAccountNames:
      - aws-efs-csi-driver-operator
      - aws-efs-csi-driver-controller-sa

  3. 运行 ccoctl 工具在 AWS 中生成新的 IAM 角色,并在本地文件系统中创建一个 YAML 文件(<path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml)。

    $ ccoctl aws create-iam-roles --name=<name> --region=<aws_region> --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
    • name=<name> 是用于标记为跟踪而创建的云资源的名称。
    • region=<aws_region > 是创建云资源的 AWS 区域。
    • dir=<path_to_directory_with_list_of_credentials_requests>/credrequests 是包含上一步中 EFS CredentialsRequest 文件的目录。
    • <aws_account_id> 是 AWS 帐户 ID。

      示例

      $ ccoctl aws create-iam-roles --name my-aws-efs --credentials-requests-dir credrequests --identity-provider-arn arn:aws:iam::123456789012:oidc-provider/my-aws-efs-oidc.s3.us-east-2.amazonaws.com

      输出示例

      2022/03/21 06:24:44 Role arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud- created
      2022/03/21 06:24:44 Saved credentials configuration to: /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
      2022/03/21 06:24:45 Updated Role policy for Role my-aws-efs-openshift-cluster-csi-drivers-aws-efs-cloud-

  4. 从上一步中的示例输出的第一行中复制角色 ARN。角色 ARN 在 "Role" 和 "created" 之间。在本例中,角色 ARN 是 "arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud"。

    安装 AWS EFS CSI Driver Operator 时,您将需要角色 ARN。

5.11.3.2. 安装 AWS EFS CSI Driver Operator

默认情况下,AWS EFS CSI Driver Operator (一个 Red Hat Operator)不会在 OpenShift Container Platform 中安装。使用以下步骤在集群中安装和配置 AWS EFS CSI Driver Operator。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。

流程

从 web 控制台安装 AWS EFS CSI Driver Operator:

  1. 登录到 web 控制台。
  2. 安装 AWS EFS CSI Operator:

    1. Operators OperatorHub
    2. 通过在过滤框中键入 AWS EFS CSI 来找到 AWS EFS CSI Operator。
    3. AWS EFS CSI Driver Operator 按钮。

      重要

      确保选择 AWS EFS CSI Driver Operator,而不是 AWS EFS OperatorAWS EFS Operator 是一个社区 Operator,不受红帽支持。

    4. AWS EFS CSI Driver Operator 页面中,点 Install
    5. Install Operator 页面中,确保:

      • 如果您使用 AWS Secure Token Service (STS) 的 AWS EFS,在角色 ARN 字段中输入从 Obtaining a role Amazon Resource Name for Security Token Service 过程的最后一步中复制的 ARN 角色。
      • 选择 All namespaces on the cluster (default)
      • 安装的命名空间 被设置为 openshift-cluster-csi-drivers
    6. Install

      安装完成后,AWS EFS CSI Operator 会在 web 控制台的 Installed Operators 部分列出。

5.11.3.3. 安装 AWS EFS CSI 驱动程序

先决条件

  • 访问 OpenShift Container Platform Web 控制台。

流程

  1. Administration CustomResourceDefinitions ClusterCSIDriver
  2. Instances 选项卡上,单击 Create ClusterCSIDriver
  3. 使用以下 YAML 文件:

    apiVersion: operator.openshift.io/v1
    kind: ClusterCSIDriver
    metadata:
        name: efs.csi.aws.com
    spec:
      managementState: Managed
  4. Create
  5. 等待以下 Conditions 更改为 "True" 状态:

    • AWSEFSDriverNodeServiceControllerAvailable
    • AWSEFSDriverControllerServiceControllerAvailable

5.11.4. 创建 AWS EFS 存储类

存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。

安装后,AWS EFS CSI Driver Operator (一个 Red Hat operator) 不会默认创建存储类。但是,您可以手动创建 AWS EFS 存储类。

5.11.4.1. 使用控制台创建 AWS EFS 存储类

流程

  1. 在 OpenShift Container Platform 控制台中点 Storage StorageClasses
  2. StorageClasses 页面中,点 Create StorageClass
  3. StorageClass 页面中,执行以下步骤:

    1. 输入一个名称来指代存储类。
    2. 可选:输入描述。
    3. 选择 reclaim 策略。
    4. Provisioner 下拉列表中,选择 efs.csi.aws.com
    5. 可选:为所选置备程序设置配置参数。
  4. Create

5.11.4.2. 使用 CLI 创建 AWS EFS 存储类

流程

  • 创建 StorageClass 对象:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: efs-sc
    provisioner: efs.csi.aws.com
    parameters:
      provisioningMode: efs-ap 1
      fileSystemId: fs-a5324911 2
      directoryPerms: "700" 3
      gidRangeStart: "1000" 4
      gidRangeEnd: "2000" 5
      basePath: "/dynamic_provisioning" 6
    1
    provisioningMode 必须是 efs-ap 才能启用动态置备。
    2
    fileSystemId 必须是手动创建的 EFS 卷的 ID。
    3
    directoryPerms 是卷的根目录的默认权限。在本例中,该卷只能被所有者访问。
    4 5
    gidRangeStartgidRangeEnd 设置用于设置 AWS 访问点 GID 的 POSIX 组 ID(GID)范围。如果未指定,则默认范围为 50000-7000000。每个置备的卷(即 AWS 访问点)都会被分配一个这个范围内的唯一 GID。
    6
    BasePath 是 EFS 卷上用于创建动态置备卷的目录。在这种情况下,PV 被置备为 EFS 卷上的 "/dynamic_provisioning/<random uuid>"。只有 子目录挂载到使用该 PV 的 pod。
    注意

    集群管理员可创建几个 StorageClass 对象,各自使用不同的 EFS 卷。

5.11.5. AWS EFS CSI 跨帐户支持

跨帐户支持允许您在一个 AWS 帐户中有一个 OpenShift Container Platform 集群,并使用 AWS Elastic File System (EFS) Container Storage Interface (CSI) 驱动程序在另一个 AWS 帐户中挂载文件系统。

注意

OpenShift Container Platform 集群和 EFS 文件系统必须位于同一区域。

先决条件

  • 使用管理员权限访问 OpenShift Container Platform 集群
  • 两个有效的 AWS 帐户

流程

以下流程演示了如何设置:

  • AWS 帐户 A 中的 OpenShift Container Platform 集群
  • 在帐户 B 中挂载 AWS EFS 文件系统

在帐户间使用 AWS EFS:

  1. 使用 AWS 帐户 A 安装 OpenShift Container Platform 集群,并安装 EFS CSI Driver Operator。
  2. 在 AWS 帐户 B 中创建 EFS 卷:

    1. 创建一个带有 CIDR 虚拟私有云 (VPC)(例如称为 "my-efs-vpc”),例如“172.20.0.0/16” 以及 AWS EFS 卷的子网。
    2. 在 AWS 控制台中,转至 https://console.aws.amazon.com/efs
    3. Create new filesystem

      1. 创建一个文件系统,如 "my-filesystem"。
      2. 选择之前创建的 VPC ("my-efs-vpc")。
      3. 接受其余设置的默认值。
    4. 确保已创建了卷和挂载目标:

      1. https://console.aws.amazon.com/efs#/file-systems.
      2. 点您的卷,在 Network 选项卡中,等待所有 Mount Targets 可用(大约 1-2 分钟)。
    5. Network 选项卡中,复制安全组 ID。下一步需要它。
  3. 配置 AWS 帐户 B 上 AWS EFS 卷的网络访问:

    1. 进入 https://console.aws.amazon.com/ec2/v2/home#SecurityGroups
    2. 通过过滤之前复制的组 ID 来查找 AWS EFS 卷使用的安全组。
    3. Inbound rules 选项卡中,点 Edit inbound rules,然后添加新规则来允许 OpenShift Container Platform 节点访问 AWS EFS 卷(即,使用集群中的 NFS 端口):

      • 类型 :NFS
      • 协议 :TCP
      • 端口范围 :2049
      • :OpenShift Container Platform 集群节点的自定义/IP 地址范围(如 "10.0.0.0/16")
    4. 保存规则。

      注意

      如果您遇到挂载问题,请重新检查端口号、IP 地址范围,并验证 AWS EFS 卷是否使用预期的安全组。

  4. 在 AWS 帐户 A 的 OpenShift Container Platform 集群 VPC 和 AWS 帐户 B 中的 AWS EFS VPC 之间创建 VPC 对等:

    确保两个 VPC 使用不同的网络 CIDR,并在创建 VPC 对等后,在每个 VPC 中添加路由来连接两个 VPC 网络。

    1. 在帐户 B 中创建一个名为 "my-efs-crossaccount-peering-connection" 的对等连接。对于本地 VPC ID,请使用 EFS-located VPC。要与 VPC 用于帐户 A 的对等,对于 VPC ID,请使用 OpenShift Container Platform 集群 VPC ID。
    2. 接受 AWS 帐户 A 中的对等连接。
    3. 修改 AWS 帐户 B 中每个子网的路由表 (EFS-volume 使用的子网):

      1. 在左侧窗格中,在 Virtual private cloud 下,单向下箭头以展开可用选项。
      2. Virtual private cloud 下,点 Route tables"。
      3. Routes 选项卡。
      4. Destination 下,输入 10.0.0.0/16。
      5. Target 下,使用来自创建的对等连接的对等连接类型点。
    4. 修改 AWS 帐户 A 中每个子网的路由表 (OpenShift Container Platform 集群节点使用的子网):

      1. 在左侧窗格中,在 Virtual private cloud 下,单向下箭头以展开可用选项。
      2. Virtual private cloud 下,点 Route tables"。
      3. Routes 选项卡。
      4. Destination 下,在帐户 B 中输入 VPC 的 CIDR,本例中为 172.20.0.0/16。
      5. Target 下,使用来自创建的对等连接的对等连接类型点。
  5. 在 AWS 帐户 B 中创建一个 IAM 角色,如 "my-efs-acrossaccount-role",它与 AWS 帐户 A 具有信任关系,并使用调用"my-efs-acrossaccount-driver-policy"的权限添加内联 AWS EFS 策略。

    这个角色供在 AWS 帐户 A 的 OpenShift Container Platform 集群上运行的 CSI 驱动程序控制器服务决定 AWS 帐户 B 中文件系统的挂载目标。

    # Trust relationships trusted entity trusted account A configuration on my-efs-acrossaccount-role in account B
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::301721915996:root"
                },
                "Action": "sts:AssumeRole",
                "Condition": {}
            }
        ]
    }
    
    # my-cross-account-assume-policy policy attached to my-efs-acrossaccount-role in account B
    
    {
        "Version": "2012-10-17",
        "Statement": {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role"
        }
    }
    
    # my-efs-acrossaccount-driver-policy attached to my-efs-acrossaccount-role in account B
    
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:DescribeSubnets"
                ],
                "Resource": "*"
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": [
                    "elasticfilesystem:DescribeMountTargets",
                    "elasticfilesystem:DeleteAccessPoint",
                    "elasticfilesystem:ClientMount",
                    "elasticfilesystem:DescribeAccessPoints",
                    "elasticfilesystem:ClientWrite",
                    "elasticfilesystem:ClientRootAccess",
                    "elasticfilesystem:DescribeFileSystems",
                    "elasticfilesystem:CreateAccessPoint"
                ],
                "Resource": [
                    "arn:aws:elasticfilesystem:*:589722580343:access-point/*",
                    "arn:aws:elasticfilesystem:*:589722580343:file-system/*"
                ]
            }
        ]
    }
  6. 在 AWS 帐户 A 中,将内联策略附加到 AWS EFS CSI 驱动程序控制器服务帐户的 IAM 角色中,并具有在之前创建的 IAM 角色上执行安全令牌服务(STS)所需的权限。

    # my-cross-account-assume-policy policy attached to Openshift cluster efs csi driver user in account A
    
    {
        "Version": "2012-10-17",
        "Statement": {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role"
        }
    }
  7. 在 AWS 帐户 A 中,将 AWS 管理的策略 "AmazonElasticFileSystemClientFullAccess" 附加到 OpenShift Container Platform 集群 master 角色。角色名称的格式是 <clusterID>-master-role (例如,my-0120ef-czjrl-master-role)。
  8. 创建一个 Kubernetes secret,使用 awsRoleArn 作为键,以及之前创建的角色作为值:

    $ oc -n openshift-cluster-csi-drivers create secret generic my-efs-cross-account --from-literal=awsRoleArn='arn:aws:iam::589722580343:role/my-efs-acrossaccount-role'

    由于驱动程序控制器需要从 secret 获取跨帐户角色信息,您需要将 secret 角色绑定添加到 AWS EFS CSI 驱动程序控制器 ServiceAccount (SA):

    $ oc -n openshift-cluster-csi-drivers create role access-secrets --verb=get,list,watch --resource=secrets
    
    $ oc -n openshift-cluster-csi-drivers create rolebinding --role=access-secrets default-to-secrets --serviceaccount=openshift-cluster-csi-drivers:aws-efs-csi-driver-controller-sa
  9. 在帐户 B 中为文件系统 (AWS EFS 卷) 中创建一个 filesystem 策略,它允许 AWS 帐户 A 在其上执行挂载。

    This step is not mandatory, but can be safer for AWS EFS volume usage.
    # EFS volume filesystem policy in account B
    {
        "Version": "2012-10-17",
        "Id": "efs-policy-wizard-8089bf4a-9787-40f0-958e-bc2363012ace",
        "Statement": [
            {
                "Sid": "efs-statement-bd285549-cfa2-4f8b-861e-c372399fd238",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "*"
                },
                "Action": [
                    "elasticfilesystem:ClientRootAccess",
                    "elasticfilesystem:ClientWrite",
                    "elasticfilesystem:ClientMount"
                ],
                "Resource": "arn:aws:elasticfilesystem:us-east-2:589722580343:file-system/fs-091066a9bf9becbd5",
                "Condition": {
                    "Bool": {
                        "elasticfilesystem:AccessedViaMountTarget": "true"
                    }
                }
            },
            {
                "Sid": "efs-statement-03646e39-d80f-4daf-b396-281be1e43bab",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::589722580343:role/my-efs-acrossaccount-role"
                },
                "Action": [
                    "elasticfilesystem:ClientRootAccess",
                    "elasticfilesystem:ClientWrite",
                    "elasticfilesystem:ClientMount"
                ],
                "Resource": "arn:aws:elasticfilesystem:us-east-2:589722580343:file-system/fs-091066a9bf9becbd5"
            }
        ]
    }
  10. 使用类似如下的配置创建 AWS EFS 卷存储类:

    # The cross account efs volume storageClass
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: efs-cross-account-mount-sc
    provisioner: efs.csi.aws.com
    mountOptions:
      - tls
    parameters:
      provisioningMode: efs-ap
      fileSystemId: fs-00f6c3ae6f06388bb
      directoryPerms: "700"
      gidRangeStart: "1000"
      gidRangeEnd: "2000"
      basePath: "/account-a-data"
      csi.storage.k8s.io/provisioner-secret-name: my-efs-cross-account
      csi.storage.k8s.io/provisioner-secret-namespace: openshift-cluster-csi-drivers
    volumeBindingMode: Immediate

5.11.6. 在 AWS 中创建和配置对 EFS 卷的访问

此流程解释了如何在 AWS 中创建和配置 EFS 卷,以便在 OpenShift Container Platform 中使用它们。

先决条件

  • AWS 帐户凭证

流程

在 AWS 中创建和配置对 EFS 卷的访问:

  1. 在 AWS 控制台中,打开 https://console.aws.amazon.com/efs
  2. 点击 Create 文件系统

    • 输入文件系统的名称。
    • 对于 Virtual Private Cloud (VPC),请选择 OpenShift Container Platform 的虚拟私有云 (VPC)。
    • 接受所有其他选择的默认设置。
  3. 等待卷和挂载目标完成完全创建:

    1. 访问 https://console.aws.amazon.com/efs#/file-systems
    2. 单击您的卷,在 Network 选项卡中,等待所有挂载目标变为可用状态(约 1-2 分钟)。
  4. Network 选项卡上,复制安全组 ID(下一步中您将需要此 ID)。
  5. 进入 https://console.aws.amazon.com/ec2/v2/home#SecurityGroups,并查找 EFS 卷使用的安全组。
  6. Inbound rules 选项卡中,点 Edit inbound rules,然后使用以下设置添加新规则,以允许 OpenShift Container Platform 节点访问 EFS 卷:

    • 类型 :NFS
    • 协议 :TCP
    • 端口范围 :2049
    • :您的节点的自定义/IP 地址范围(例如:"10.0.0.0/16")

      此步骤允许 OpenShift Container Platform 使用集群中的 NFS 端口。

  7. 保存规则。

5.11.7. Amazon Elastic File Storage 的动态置备

AWS EFS CSI 驱动程序支持不同于其他 CSI 驱动程序的动态置备形式。它将新 PV 调配为预先存在的 EFS 卷的子目录。PV 相互独立。但是,它们共享相同的 EFS 卷。删除卷时,置备的所有 PV 也会被删除。EFS CSI 驱动程序为每个此类子目录创建一个 AWS Access Point。由于 AWS AccessPoint 限制,您只能从一个 StorageClass/EFS 卷动态置备 1000 个 PV。

重要

请注意,EFS 不强制执行 PVC.spec.resources

在以下示例中,您请求 5 GiB 的空间。但是,创建的 PV 是无限的,可以存储任何数量的数据(如 PB)。当在卷中存储太多数据时,一个被破坏的应用甚至恶意应用程序也可能会导致大量开支。

强烈建议在 AWS 中使用 EFS 卷大小监控。

先决条件

  • 您已创建了 Amazon Elastic File Storage (Amazon EFS)卷。
  • 您已创建了 AWS EFS 存储类。

流程

启用动态置备:

  • 照常创建 PVC (或 StatefulSet 或 Template),引用之前创建的 StorageClass

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test
    spec:
      storageClassName: efs-sc
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi

如果您在设置动态置备时遇到问题,请参阅 AWS EFS 故障排除

5.11.8. 使用 Amazon Elastic File Storage 创建静态 PV

可以使用 Amazon Elastic File Storage (Amazon EFS) 卷作为单个 PV,而无需动态置备。整个卷挂载到 pod。

先决条件

  • 您已创建了 Amazon EFS 卷。

流程

  • 使用以下 YAML 文件创建 PV:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: efs-pv
    spec:
      capacity: 1
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: efs.csi.aws.com
        volumeHandle: fs-ae66151a 2
        volumeAttributes:
          encryptInTransit: "false" 3
    1
    spec.capacity 没有任何含义,CSI 驱动程序会忽略它。只有在绑定到 PVC 时才会使用它。应用可以将任意数量的数据存储到卷中。
    2
    volumeHandle 必须与您在 AWS 中创建的 EFS 卷相同。如果您提供自己的访问点,volumeHandle 应为 <EFS volume ID>::<access point ID>。例如: fs-6e633ada::fsap-081a1d293f0004630
    3
    如果需要,您可以在传输中禁用加密。加密功能会被默认启用。

如果您在设置静态 PV 时遇到问题,请参阅 AWS EFS 故障排除

5.11.9. Amazon Elastic File Storage 安全性

以下信息对于 Amazon Elastic File Storage (Amazon EFS) 安全非常重要。

例如,在使用接入点(例如,使用前面描述的动态置备)时,Amazon 会自动将文件的 GID 替换为接入点的 GID。此外,EFS 在评估文件系统权限时,会考虑访问点的用户 ID、组 ID 和次要组 ID。EFS 忽略 NFS 客户端的 ID。有关接入点的详情请参考 https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html

因此,EFS 卷静默忽略 FSGroup;OpenShift Container Platform 无法将卷上的文件 GID 替换为 FSGroup。任何可以访问挂载的 EFS 接入点的 pod 都可以访问其中的任何文件。

与此无关,传输中的加密默认是启用的。如需更多信息,请参阅 https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html

5.11.10. Amazon Elastic File Storage 故障排除

以下信息提供了有关如何对 Amazon Elastic File Storage (Amazon EFS) 问题进行故障排除的指导:

  • AWS EFS Operator 和 CSI 驱动程序在命名空间 openshift-cluster-csi-drivers 中运行
  • 要启动收集 AWS EFS Operator 和 CSI 驱动程序的日志,请运行以下命令:

    $ oc adm must-gather
    [must-gather      ] OUT Using must-gather plugin-in image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5
    [must-gather      ] OUT namespace/openshift-must-gather-xm4wq created
    [must-gather      ] OUT clusterrolebinding.rbac.authorization.k8s.io/must-gather-2bd8x created
    [must-gather      ] OUT pod for plug-in image quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 created
  • 要显示 AWS EFS Operator 错误,请查看 ClusterCSIDriver 状态:

    $ oc get clustercsidriver efs.csi.aws.com -o yaml
  • 如果卷无法挂载到容器集(如下命令的输出中所示):

    $ oc describe pod
    ...
      Type     Reason       Age    From               Message
      ----     ------       ----   ----               -------
      Normal   Scheduled    2m13s  default-scheduler  Successfully assigned default/efs-app to ip-10-0-135-94.ec2.internal
      Warning  FailedMount  13s    kubelet            MountVolume.SetUp failed for volume "pvc-d7c097e6-67ec-4fae-b968-7e7056796449" : rpc error: code = DeadlineExceeded desc = context deadline exceeded 1
      Warning  FailedMount  10s    kubelet            Unable to attach or mount volumes: unmounted volumes=[persistent-storage], unattached volumes=[persistent-storage kube-api-access-9j477]: timed out waiting for the condition
    1
    指示卷未挂载的警告消息。

    此错误通常是由 AWS 在 OpenShift Container Platform 节点和 Amazon EFS 之间丢弃数据包造成的。

    检查以下内容是否正确:

    • AWS 防火墙和安全组
    • 网络:端口号和 IP 地址

5.11.11. 卸载 AWS EFS CSI Driver Operator

在卸载 AWS EFS CSI Driver Operator (红帽操作器)后,无法访问所有 EFS PV。

先决条件

  • 访问 OpenShift Container Platform Web 控制台。

流程

从 web 控制台卸载 AWS EFS CSI Driver Operator:

  1. 登录到 web 控制台。
  2. 停止所有使用 AWS EFS PV 的应用程序。
  3. 删除所有 AWS EFS PV:

    1. Storage PersistentVolumeClaims
    2. 选择 AWS EFS CSI Driver Operator 使用的每个 PVC,点击 PVC 最右侧的下拉菜单,然后点 Delete PersistentVolumeClaims
  4. 卸载 AWS EFS CSI 驱动程序

    注意

    在卸载 Operator 前,必须先删除 CSI 驱动程序。

    1. Administration CustomResourceDefinitions ClusterCSIDriver
    2. Instances 选项卡上,单击左侧的 efs.csi.aws.com,单击下拉菜单,然后单击 Delete ClusterCSIDriver
    3. 出现提示时,单击 Delete
  5. 卸载 AWS EFS CSI Operator:

    1. Operators Installed Operators
    2. Installed Operators 页面中,在 Search by name 框中输入 AWS EFS CSI 来查找 Operator,然后点击它。
    3. Installed Operators > Operator 详情 页面的右上角,点 Actions Uninstall Operator
    4. 当在 Uninstall Operator 窗口中提示时,点 Uninstall 按钮从命名空间中删除 Operator。Operator 在集群中部署的任何应用程序都需要手动清理。

      卸载后,AWS EFS CSI Driver Operator 不会在 web 控制台的 Installed Operators 部分列出。

注意

在销毁集群 (openshift-install destroy cluster) 前,您必须删除 AWS 中的 EFS 卷。如果有使用集群的 VPC 的 EFS 卷,OpenShift Container Platform 集群将无法被销毁。Amazon 不允许删除这样的 VPC。

5.11.12. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.