6.10. AWS Elastic File Service CSI Driver Operator
6.10.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。
6.10.2. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
6.10.3. 设置 AWS EFS CSI Driver Operator 复制链接链接已复制到粘贴板!
- 如果您将 AWS EFS 与 AWS Secure Token Service (STS)搭配使用,请获取 STS 的角色 Amazon Resource Name (ARN)。安装 AWS EFS CSI Driver Operator 需要此项。
- 安装 AWS EFS CSI Driver Operator。
- 安装 AWS EFS CSI 驱动程序。
6.10.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
) 二进制工具的方法。
如果您使用 One Zone 文件系统,您需要创建两个 CredentialRequests
,一个用于控制器,另一个用于驱动程序节点。如需更多信息,请参阅使用 STS 设置一个区文件系统。
获取使用 STS 配置 AWS EFS CSI Driver Operator 的角色 ARN:
-
从 OpenShift Container Platform 发行镜像中提取
ccoctl
,用于使用 STS 安装集群。如需更多信息,请参阅"配置 Cloud Credential Operator 工具程序"。 创建并保存 EFS
CredentialsRequest
YAML 文件,如以下示例所示,然后将其放在credrequests
目录中:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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-
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-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
从上一步中的示例输出的第一行中复制角色 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。
6.10.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:
- 登录到 web 控制台。
安装 AWS EFS CSI Operator:
-
点 Ecosystem
Software Catalog。 - 通过在过滤框中键入 AWS EFS CSI 来找到 AWS EFS CSI Operator。
- 点 AWS EFS CSI Driver Operator 按钮。
重要确保选择 AWS EFS CSI Driver Operator,而不是 AWS EFS Operator。AWS EFS Operator 是一个社区 Operator,不受红帽支持。
- 在 AWS EFS CSI Driver Operator 页面中,点 Install。
在 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。
点 Install。
安装完成后,AWS EFS CSI Operator 会在 web 控制台的 Installed Operators 部分列出。
-
点 Ecosystem
后续步骤
6.10.3.3. 安装 AWS EFS CSI 驱动程序 复制链接链接已复制到粘贴板!
安装 AWS EFS CSI Driver Operator (Red Hat operator)后,您要安装 AWS EFS CSI 驱动程序。
先决条件
- 访问 OpenShift Container Platform Web 控制台。
流程
-
点 Administration
CustomResourceDefinitions ClusterCSIDriver。 - 在 Instances 选项卡上,单击 Create ClusterCSIDriver。
使用以下 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
等待以下 Conditions 更改为 "True" 状态:
- AWSEFSDriverNodeServiceControllerAvailable
- AWSEFSDriverControllerServiceControllerAvailable
6.10.4. 创建 AWS EFS 存储类 复制链接链接已复制到粘贴板!
存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。
安装后,AWS EFS CSI Driver Operator (一个 Red Hat operator) 不会默认创建存储类。但是,您可以手动创建 AWS EFS 存储类。
6.10.4.1. 使用控制台创建 AWS EFS 存储类 复制链接链接已复制到粘贴板!
流程
-
在 OpenShift Container Platform Web 控制台中,点 Storage
Storage Classes。 - 在 StorageClasses 页面中,点 Create StorageClass。
在 StorageClass 页面中,执行以下步骤:
- 输入一个名称来指代存储类。
- 可选:输入描述。
- 选择 reclaim 策略。
-
从 Provisioner 下拉列表中,选择
efs.csi.aws.com
。 - 可选:为所选置备程序设置配置参数。
- 点 Create。
6.10.4.2. 使用 CLI 创建 AWS EFS 存储类 复制链接链接已复制到粘贴板!
流程
创建
StorageClass
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
provisioningMode
必须是efs-ap
才能启用动态置备。- 2
fileSystemId
必须是手动创建的 EFS 卷的 ID。- 3
directoryPerms
是卷的根目录的默认权限。在本例中,该卷只能被所有者访问。- 4 5
gidRangeStart
和gidRangeEnd
设置用于设置 AWS 访问点 GID 的 POSIX 组 ID(GID)范围。如果未指定,则默认范围为 50000-7000000。每个置备的卷(即 AWS 访问点)都会被分配一个这个范围内的唯一 GID。- 6
BasePath
是 EFS 卷上用于创建动态置备卷的目录。在这种情况下,PV 被置备为 EFS 卷上的 "/dynamic_provisioning/<random uuid>"。只有 子目录挂载到使用该 PV 的 pod。
注意集群管理员可创建几个
StorageClass
对象,各自使用不同的 EFS 卷。
6.10.5. AWS EFS CSI 跨帐户支持 复制链接链接已复制到粘贴板!
跨帐户支持允许您在一个 AWS 帐户中有一个 OpenShift Container Platform 集群,并使用 AWS Elastic File System (EFS) Container Storage Interface (CSI) 驱动程序在另一个 AWS 帐户中挂载文件系统。
先决条件
- 使用管理员权限访问 OpenShift Container Platform 集群
- 两个有效的 AWS 帐户
- 已安装 EFS CSI Operator。有关安装 EFS CSI Operator 的详情,请参考 安装 AWS EFS CSI Driver Operator 部分。
- OpenShift Container Platform 集群和 EFS 文件系统必须位于同一 AWS 区域。
- 确保以下流程中使用的两个虚拟私有云(VPC)使用不同的网络无类别间路由(CIDR)范围。
-
访问 OpenShift Container Platform CLI (
oc
)。 - 访问 AWS CLI。
-
访问
jq
命令行 JSON 处理器。
流程
以下流程解释了如何设置:
- OpenShift Container Platform AWS Account A:包含在 VPC 中部署的 Red Hat OpenShift Container Platform 集群 v4.16 或更高版本
- AWS 帐户 B:包含 VPC (包括子网、路由表和网络连接)。EFS 文件系统将在此 VPC 中创建。
在帐户间使用 AWS EFS:
设置环境:
运行以下命令来配置环境变量:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建工作目录:
mkdir -p $SCRATCH_DIR
mkdir -p $SCRATCH_DIR
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform CLI 中运行以下命令来验证集群连接:
oc whoami
$ oc whoami
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确定 OpenShift Container Platform 集群类型并设置节点选择器:
EFS 跨帐户功能需要为运行 EFS CSI 控制器 pod 的节点分配 AWS IAM 策略。但是,对于每个 OpenShift Container Platform 类型,这并不一致。
如果您的集群部署为 Hosted Control Plane (HyperShift),请运行以下命令将
NODE_SELECTOR
环境变量设置为保存 worker 节点标签:export NODE_SELECTOR=node-role.kubernetes.io/worker
export NODE_SELECTOR=node-role.kubernetes.io/worker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于所有其他 OpenShift Container Platform 类型,请运行以下命令将
NODE_SELECTOR
环境变量设置为保存 master 节点标签:export NODE_SELECTOR=node-role.kubernetes.io/master
export NODE_SELECTOR=node-role.kubernetes.io/master
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,将 AWS CLI 配置集配置为帐户切换的环境变量:
export AWS_ACCOUNT_A="<ACCOUNT_A_NAME>" export AWS_ACCOUNT_B="<ACCOUNT_B_NAME>"
export AWS_ACCOUNT_A="<ACCOUNT_A_NAME>" export AWS_ACCOUNT_B="<ACCOUNT_B_NAME>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确保 AWS CLI 被配置为 JSON 输出格式作为两个帐户的默认值:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} aws configure get output export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws configure get output
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} aws configure get output export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws configure get output
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果前面的命令返回:
- No value: 默认输出格式已设置为 JSON,且不需要任何更改。
- 任何值 :重新配置 AWS CLI 以使用 JSON 格式。有关更改输出格式的详情,请参考 AWS 文档中的在 AWS CLI 中设置输出格式。
运行以下命令,在 shell 中取消设置
AWS_PROFILE
以防止与AWS_DEFAULT_PROFILE
冲突:unset AWS_PROFILE
unset AWS_PROFILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 AWS 帐户 B IAM 角色和策略:
运行以下命令切换到您的帐户 B 配置文件:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 EFS CSI Driver Operator 定义 IAM 角色名称:
export ACCOUNT_B_ROLE_NAME=${CLUSTER_NAME}-cross-account-aws-efs-csi-operator
export ACCOUNT_B_ROLE_NAME=${CLUSTER_NAME}-cross-account-aws-efs-csi-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 IAM 信任策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 EFS CSI Driver Operator 创建 IAM 角色:
ACCOUNT_B_ROLE_ARN=$(aws iam create-role \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --assume-role-policy-document file://$SCRATCH_DIR/AssumeRolePolicyInAccountB.json \ --query "Role.Arn" --output text) \ && echo $ACCOUNT_B_ROLE_ARN
ACCOUNT_B_ROLE_ARN=$(aws iam create-role \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --assume-role-policy-document file://$SCRATCH_DIR/AssumeRolePolicyInAccountB.json \ --query "Role.Arn" --output text) \ && echo $ACCOUNT_B_ROLE_ARN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 IAM 策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 IAM 策略:
ACCOUNT_B_POLICY_ARN=$(aws iam create-policy --policy-name "${CLUSTER_NAME}-efs-csi-policy" \ --policy-document file://$SCRATCH_DIR/EfsPolicyInAccountB.json \ --query 'Policy.Arn' --output text) \ && echo ${ACCOUNT_B_POLICY_ARN}
ACCOUNT_B_POLICY_ARN=$(aws iam create-policy --policy-name "${CLUSTER_NAME}-efs-csi-policy" \ --policy-document file://$SCRATCH_DIR/EfsPolicyInAccountB.json \ --query 'Policy.Arn' --output text) \ && echo ${ACCOUNT_B_POLICY_ARN}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略附加到角色:
aws iam attach-role-policy \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --policy-arn "${ACCOUNT_B_POLICY_ARN}"
aws iam attach-role-policy \ --role-name "${ACCOUNT_B_ROLE_NAME}" \ --policy-arn "${ACCOUNT_B_POLICY_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 AWS 帐户 A IAM 角色和策略:
运行以下命令切换到您的帐户 A 配置集:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 IAM 策略文档:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 AWS Account A 中,运行以下命令,将 AWS 管理的策略 "AmazonElasticFileSystemClientFullAccess" 附加到 OpenShift Container Platform 集群 master 角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将策略附加到 IAM 实体以允许角色假设:
此步骤取决于您的集群配置。在这两种情况下,EFS CSI Driver Operator 使用实体进行 AWS 身份验证,并且必须授予这个实体来假定帐户 B 中的角色。
如果集群:
- 没有启用 STS :EFS CSI Driver Operator 使用 IAM 用户实体进行 AWS 身份验证。继续步骤 "Attach policy to IAM User to allow role assumption"。
- 启用 STS :EFS CSI Driver Operator 使用 IAM 角色实体进行 AWS 身份验证。继续步骤 "Attach policy to IAM Role 以允许角色假设"。
将策略附加到 IAM 用户以允许角色假设
运行以下命令,识别 EFS CSI Driver Operator 使用的 IAM 用户:
EFS_CSI_DRIVER_OPERATOR_USER=$(oc -n openshift-cloud-credential-operator get credentialsrequest/openshift-aws-efs-csi-driver -o json | jq -r '.status.providerStatus.user')
EFS_CSI_DRIVER_OPERATOR_USER=$(oc -n openshift-cloud-credential-operator get credentialsrequest/openshift-aws-efs-csi-driver -o json | jq -r '.status.providerStatus.user')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略附加到 IAM 用户:
aws iam put-user-policy \ --user-name "${EFS_CSI_DRIVER_OPERATOR_USER}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
aws iam put-user-policy \ --user-name "${EFS_CSI_DRIVER_OPERATOR_USER}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将策略附加到 IAM 角色以允许角色假设:
运行以下命令,识别 EFS CSI Driver Operator 当前使用的 IAM 角色名称:
EFS_CSI_DRIVER_OPERATOR_ROLE=$(oc -n ${CSI_DRIVER_NAMESPACE} get secret/aws-efs-cloud-credentials -o jsonpath='{.data.credentials}' | base64 -d | grep role_arn | cut -d'/' -f2) && echo ${EFS_CSI_DRIVER_OPERATOR_ROLE}
EFS_CSI_DRIVER_OPERATOR_ROLE=$(oc -n ${CSI_DRIVER_NAMESPACE} get secret/aws-efs-cloud-credentials -o jsonpath='{.data.credentials}' | base64 -d | grep role_arn | cut -d'/' -f2) && echo ${EFS_CSI_DRIVER_OPERATOR_ROLE}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略附加到 EFS CSI Driver Operator 使用的 IAM 角色中:
aws iam put-role-policy \ --role-name "${EFS_CSI_DRIVER_OPERATOR_ROLE}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
aws iam put-role-policy \ --role-name "${EFS_CSI_DRIVER_OPERATOR_ROLE}" \ --policy-name efs-cross-account-inline-policy \ --policy-document file://$SCRATCH_DIR/AssumeRoleInlinePolicyPolicyInAccountA.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 VPC 对等:
运行以下命令,从帐户 A 到帐户 B 启动对等请求:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} PEER_REQUEST_ID=$(aws ec2 create-vpc-peering-connection --vpc-id "${AWS_ACCOUNT_A_VPC_ID}" --peer-vpc-id "${AWS_ACCOUNT_B_VPC_ID}" --peer-owner-id "${AWS_ACCOUNT_B_ID}" --query VpcPeeringConnection.VpcPeeringConnectionId --output text)
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_A} PEER_REQUEST_ID=$(aws ec2 create-vpc-peering-connection --vpc-id "${AWS_ACCOUNT_A_VPC_ID}" --peer-vpc-id "${AWS_ACCOUNT_B_VPC_ID}" --peer-owner-id "${AWS_ACCOUNT_B_ID}" --query VpcPeeringConnection.VpcPeeringConnectionId --output text)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,接受帐户 B 的对等请求:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id "${PEER_REQUEST_ID}"
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B} aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id "${PEER_REQUEST_ID}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检索帐户 A 的路由表 ID,并将路由添加到帐户 B VPC 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检索帐户 B 的路由表 ID,并将路由添加到帐户 A VPC 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在帐户 B 中配置安全组,以允许从帐户 A 到 EFS 的 NFS 流量:
运行以下命令切换到您的帐户 B 配置文件:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 EFS 访问配置 VPC 安全组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在帐户 B 中创建区域范围的 EFS 文件系统:
运行以下命令切换到您的帐户 B 配置文件:
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
export AWS_DEFAULT_PROFILE=${AWS_ACCOUNT_B}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建区域范围内的 EFS 文件系统:
CROSS_ACCOUNT_FS_ID=$(aws efs create-file-system --creation-token efs-token-1 \ --region ${AWS_REGION} \ --encrypted | jq -r '.FileSystemId') \ && echo $CROSS_ACCOUNT_FS_ID
CROSS_ACCOUNT_FS_ID=$(aws efs create-file-system --creation-token efs-token-1 \ --region ${AWS_REGION} \ --encrypted | jq -r '.FileSystemId') \ && echo $CROSS_ACCOUNT_FS_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 EFS 配置区域范围内的挂载目标:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在 VPC 的每个子网中创建一个挂载点。
为跨帐户访问配置 EFS Operator:
运行以下命令,为后续步骤中创建的 secret 和存储类定义自定义名称:
export SECRET_NAME=my-efs-cross-account export STORAGE_CLASS_NAME=efs-sc-cross
export SECRET_NAME=my-efs-cross-account export STORAGE_CLASS_NAME=efs-sc-cross
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform CLI 中运行以下命令来创建引用帐户 B 中角色 ARN 的 secret:
oc create secret generic ${SECRET_NAME} -n ${CSI_DRIVER_NAMESPACE} --from-literal=awsRoleArn="${ACCOUNT_B_ROLE_ARN}"
oc create secret generic ${SECRET_NAME} -n ${CSI_DRIVER_NAMESPACE} --from-literal=awsRoleArn="${ACCOUNT_B_ROLE_ARN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform CLI 中运行以下命令来授予 CSI 驱动程序控制器对新创建的 secret 的访问权限:
oc -n ${CSI_DRIVER_NAMESPACE} create role access-secrets --verb=get,list,watch --resource=secrets oc -n ${CSI_DRIVER_NAMESPACE} create rolebinding --role=access-secrets default-to-secrets --serviceaccount=${CSI_DRIVER_NAMESPACE}:aws-efs-csi-driver-controller-sa
oc -n ${CSI_DRIVER_NAMESPACE} create role access-secrets --verb=get,list,watch --resource=secrets oc -n ${CSI_DRIVER_NAMESPACE} create rolebinding --role=access-secrets default-to-secrets --serviceaccount=${CSI_DRIVER_NAMESPACE}:aws-efs-csi-driver-controller-sa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform CLI 中运行以下命令来创建从 Account B 中引用 EFS ID 和之前创建的 secret 的新存储类:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10.6. 一个区文件系统 复制链接链接已复制到粘贴板!
6.10.6.1. 一个区文件系统概述 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持 AWS Elastic File System (EFS) One Zone 文件系统,它是一个 EFS 存储选项,可在单个可用区(AZ)内存储数据。这与默认的 EFS 存储选项相反,该选项可在区域内的多个 AZ 之间冗余存储数据。
从 OpenShift Container Platform 4.19 升级的集群与区域 EFS 卷兼容。
只有在单区集群中支持动态置备一个区域卷。集群中的所有节点都必须与用于动态置备的 EFS 卷位于同一个 AZ。
支持在区域集群中手动置备一个区域卷,假设持久性卷(PV)具有正确的 spec.nodeAffinity
,表示卷所在的区。
对于 Cloud Credential Operator (CCO) Mint 模式或 Passthrough,不需要额外的配置。但是,对于安全令牌服务(STS),请使用使用 STS 设置一个区域文件系统 一节中的 步骤。
6.10.6.2. 使用 STS 设置一个区文件系统 复制链接链接已复制到粘贴板!
以下流程解释了如何使用安全令牌服务(STS)设置 AWS One Zone 文件系统:
先决条件
- 使用具有 cluster-admin 角色的用户访问集群。
- AWS 帐户凭证
流程
使用 STS 配置一个区文件系统:
按照 Section Obtain a role Amazon Resource Name for Security Token Service 中的内容,在
credrequests
目录中创建 两个CredentialsRequests
:-
对于 控制器
CredentialsRequest
,请遵循没有任何更改的步骤。 对于 驱动程序节点
CredentialsRequest
,请使用以下示例文件:驱动程序节点的 CredentialsRequest YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
metadata.annotations.credentials.openshift.io/role-arns-vars
设置为NODE_ROLEARN
。
ccoctl
输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
对于 控制器
- 使用此流程前面创建的控制器 ARN 安装 AWS EFS CSI 驱动程序。
通过运行以下命令来编辑 Operator 的订阅,并通过运行以下命令来添加带有驱动程序节点的 ARN 的
NODE_ROLEARN
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10.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
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在设置动态置备时遇到问题,请参阅 AWS EFS 故障排除。
6.10.8. 使用 Amazon Elastic File Storage 创建静态 PV 复制链接链接已复制到粘贴板!
可以使用 Amazon Elastic File Storage (Amazon EFS) 卷作为单个 PV,而无需动态置备。整个卷挂载到 pod。
先决条件
- 您已创建了 Amazon EFS 卷。
流程
使用以下 YAML 文件创建 PV:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在设置静态 PV 时遇到问题,请参阅 AWS EFS 故障排除。
6.10.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。
6.10.10. AWS EFS 存储 CSI 使用指标 复制链接链接已复制到粘贴板!
6.10.10.1. 使用指标概述 复制链接链接已复制到粘贴板!
Amazon Web Services (AWS) Elastic File Service (EFS) 存储 Container Storage Interface (CSI) 使用指标允许您监控动态或静态置备的 EFS 卷使用空间量。
此功能默认被禁用,因为打开指标可能会导致性能下降。
AWS EFS 使用指标功能通过递归的方式浏览卷中的文件来收集 AWS EFS CSI Driver 中的卷指标。由于这种工作方式可以会降低系统的性能,因此管理员需要明确启用此功能。
6.10.10.2. 使用 Web 控制台启用使用指标 复制链接链接已复制到粘贴板!
使用 Web 控制台启用 Amazon Web Services (AWS) Elastic File Service (EFS) Storage Container Storage Interface (CSI)使用指标:
- 点 Administration > CustomResourceDefinitions。
-
在 CustomResourceDefinitions 页的Name 下拉菜单旁边键入
clustercsidriver
。 - 点 CRD ClusterCSIDriver。
- 点 YAML 标签。
在
spec.aws.efsVolumeMetrics.state
下,将值设为RecursiveWalk
。RecursiveWalk
表示 AWS EFS CSI Driver 中的卷指标集合通过递归浏览卷中的文件来执行。ClusterCSIDriver efs.csi.aws.com YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要定义递归过程的运行方式,您还可以设置以下字段:
-
refreshPeriodMinutes
:指定卷指标的刷新频率(以分钟为单位)。如果此字段留空,则会选择合理的默认值,该默认值可能会随时间变化。当前默认为 240 分钟。有效范围为 1 到 43,200 分钟。 -
fsRateLimit
: 定义每个文件系统的 goroutines 中处理卷指标的速率限制。如果此字段留空,则会选择合理的默认值,该默认值可能会随时间变化。当前默认为 5 个 goroutines。有效范围为 1 到 100 个 goroutines。
-
- 点击 Save。
要禁用 AWS EFS CSI 使用指标,请使用前面的流程,但对于 spec.aws.efsVolumeMetrics.state
,将值从 RecursiveWalk
改为 Disabled
。
6.10.10.3. 使用 CLI 启用使用指标 复制链接链接已复制到粘贴板!
使用 CLI 启用 Amazon Web Services (AWS) Elastic File Service (EFS) Storage Container Storage Interface (CSI) 使用指标:
运行以下命令来编辑 ClusterCSIDriver :
oc edit clustercsidriver efs.csi.aws.com
$ oc edit clustercsidriver efs.csi.aws.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec.aws.efsVolumeMetrics.state
下,将值设为RecursiveWalk
。RecursiveWalk
表示 AWS EFS CSI Driver 中的卷指标集合通过递归浏览卷中的文件来执行。ClusterCSIDriver efs.csi.aws.com YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要定义递归过程的运行方式,您还可以设置以下字段:
-
refreshPeriodMinutes
:指定卷指标的刷新频率(以分钟为单位)。如果此字段留空,则会选择合理的默认值,该默认值可能会随时间变化。当前默认为 240 分钟。有效范围为 1 到 43,200 分钟。 -
fsRateLimit
: 定义每个文件系统的 goroutines 中处理卷指标的速率限制。如果此字段留空,则会选择合理的默认值,该默认值可能会随时间变化。当前默认为 5 个 goroutines。有效范围为 1 到 100 个 goroutines。
-
-
保存对
efs.csi.aws.com
对象的更改。
要禁用 AWS EFS CSI 使用指标,请使用前面的流程,但对于 spec.aws.efsVolumeMetrics.state
,将值从 RecursiveWalk
改为 Disabled
。
6.10.11. 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示 AWS EFS Operator 错误,请查看
ClusterCSIDriver
状态:oc get clustercsidriver efs.csi.aws.com -o yaml
$ oc get clustercsidriver efs.csi.aws.com -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果卷无法挂载到容器集(如下命令的输出中所示):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指示卷未挂载的警告消息。
此错误通常是由 AWS 在 OpenShift Container Platform 节点和 Amazon EFS 之间丢弃数据包造成的。
检查以下内容是否正确:
- AWS 防火墙和安全组
- 网络:端口号和 IP 地址
6.10.12. 卸载 AWS EFS CSI Driver Operator 复制链接链接已复制到粘贴板!
在卸载 AWS EFS CSI Driver Operator (红帽操作器)后,无法访问所有 EFS PV。
先决条件
- 访问 OpenShift Container Platform Web 控制台。
流程
从 web 控制台卸载 AWS EFS CSI Driver Operator:
- 登录到 web 控制台。
- 停止所有使用 AWS EFS PV 的应用程序。
删除所有 AWS EFS PV:
-
点 Storage
PersistentVolumeClaims。 - 选择 AWS EFS CSI Driver Operator 使用的每个 PVC,点击 PVC 最右侧的下拉菜单,然后点 Delete PersistentVolumeClaims。
-
点 Storage
卸载 AWS EFS CSI 驱动程序 :
注意在卸载 Operator 前,必须先删除 CSI 驱动程序。
-
点 Administration
CustomResourceDefinitions ClusterCSIDriver。 - 在 Instances 选项卡上,单击左侧的 efs.csi.aws.com,单击下拉菜单,然后单击 Delete ClusterCSIDriver。
- 出现提示时,单击 Delete。
-
点 Administration
卸载 AWS EFS CSI Operator:
-
点 Ecosystem
Installed Operators。 - 在 Installed Operators 页面中,在 Search by name 框中输入 AWS EFS CSI 来查找 Operator,然后点击它。
-
在 Installed Operators > Operator 详情 页面的右上角,点 Actions
Uninstall Operator。 当在 Uninstall Operator 窗口中提示时,点 Uninstall 按钮从命名空间中删除 Operator。Operator 在集群中部署的任何应用程序都需要手动清理。
卸载后,AWS EFS CSI Driver Operator 不会在 web 控制台的 Installed Operators 部分列出。
-
点 Ecosystem
在销毁集群 (openshift-install destroy cluster
) 前,您必须删除 AWS 中的 EFS 卷。如果有使用集群的 VPC 的 EFS 卷,OpenShift Container Platform 集群将无法被销毁。Amazon 不允许删除这样的 VPC。