5.7. AWS Elastic File Service CSI Driver Operator
5.7.1. 概述
OpenShift Container Platform 可以使用 AWS Elastic File Service (EFS) 的 Container Storage Interface (CSI) 驱动程序置备持久性卷 (PV)。
AWS EFS Driver Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在使用 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 CSI 驱动程序。
AWS EFS 只支持区域卷,不支持 zonal 卷。
5.7.2. 关于 CSI
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
5.7.3. 安装 AWS EFS CSI Driver Operator
默认情况下,AWS EFS CSI Driver Operator 不会在 OpenShift Container Platform 中安装。使用以下步骤在集群中安装和配置 AWS EFS CSI Driver Operator。
先决条件
- 访问 OpenShift Container Platform Web 控制台。
流程
从 web 控制台安装 AWS EFS CSI Driver Operator:
- 登录到 web 控制台。
安装 AWS EFS CSI Operator:
-
点 Operators
OperatorHub。 - 通过在过滤框中键入 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 页面中,确保:
- 选择 All namespaces on the cluster (default)。
- 安装的命名空间 被设置为 openshift-cluster-csi-drivers。
点 Install。
安装完成后,AWS EFS CSI Operator 会在 web 控制台的 Installed Operators 部分列出。
-
点 Operators
安装 AWS EFS CSI 驱动程序:
-
点 Administration
CustomResourceDefinitions ClusterCSIDriver。 - 在 Instances 选项卡上,单击 Create ClusterCSIDriver。
使用以下 YAML 文件:
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: efs.csi.aws.com spec: managementState: Managed
- 点 Create。
等待以下 Conditions 变为 "true" 状态:
- AWSEFSDriverCredentialsRequestControllerAvailable
- AWSEFSDriverNodeServiceControllerAvailable
- AWSEFSDriverControllerServiceControllerAvailable
-
点 Administration
5.7.4. 创建 AWS EFS 存储类
存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。
安装之后,AWS EFS CSI Driver Operator 不会默认创建存储类。但是,您可以手动创建 AWS EFS 存储类。
5.7.4.1. 使用控制台创建 AWS EFS 存储类
流程
-
在 OpenShift Container Platform 控制台中点 Storage
StorageClasses。 - 在 StorageClasses 页面中,点 Create StorageClass。
在 StorageClass 页面中,执行以下步骤:
- 输入一个名称来指代存储类。
- 可选:输入描述。
- 选择 reclaim 策略。
-
从 Provisioner 下拉列表中,选择
efs.csi.aws.com
。 - 可选:为所选置备程序设置配置参数。
- 点 Create。
5.7.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
gidRangeStart
和gidRangeEnd
设置用于设置 AWS 访问点 GID 的 POSIX 组 ID(GID)范围。如果未指定,则默认范围为 50000-7000000。每个置备的卷(即 AWS 访问点)都会被分配一个这个范围内的唯一 GID。- 6
BasePath
是 EFS 卷上用于创建动态置备卷的目录。在这种情况下,PV 被置备为 EFS 卷上的 "/dynamic_provisioning/<random uuid>"。只有 子目录挂载到使用该 PV 的 pod。
注意集群管理员可创建几个
StorageClass
对象,各自使用不同的 EFS 卷。
5.7.5. 在 AWS 中创建和配置对 EFS 卷的访问
此流程解释了如何在 AWS 中创建和配置 EFS 卷,以便在 OpenShift Container Platform 中使用它们。
先决条件
- AWS 帐户凭证
流程
在 AWS 中创建和配置对 EFS 卷的访问:
- 在 AWS 控制台中,打开 https://console.aws.amazon.com/efs。
点击 Create 文件系统 :
- 输入文件系统的名称。
- 对于 Virtual Private Cloud (VPC),请选择 OpenShift Container Platform 的虚拟私有云 (VPC)。
- 接受所有其他选择的默认设置。
等待卷和挂载目标完成完全创建:
- 访问 https://console.aws.amazon.com/efs#/file-systems。
- 单击您的卷,在 Network 选项卡中,等待所有挂载目标变为可用状态(约 1-2 分钟)。
- 在 Network 选项卡上,复制安全组 ID(下一步中您将需要此 ID)。
- 进入 https://console.aws.amazon.com/ec2/v2/home#SecurityGroups,并查找 EFS 卷使用的安全组。
在 Inbound rules 选项卡中,点 Edit inbound rules,然后使用以下设置添加新规则,以允许 OpenShift Container Platform 节点访问 EFS 卷:
- 类型 :NFS
- 协议 :TCP
- 端口范围 :2049
源 :您的节点的自定义/IP 地址范围(例如:"10.0.0.0/16")
此步骤允许 OpenShift Container Platform 使用集群中的 NFS 端口。
- 保存规则。
5.7.6. AWS EFS 的动态置备
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 卷大小监控。
先决条件
- 您已创建了 AWS 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 故障排除。
其他资源
- 创建并配置对 AWS EFS 卷的访问
- 创建 AWS EFS 存储类 :!StorageClass :
5.7.7. 使用 AWS EFS 创建静态 PV
可以在没有动态置备的情况下将 AWS EFS 卷用作单个 PV。整个卷挂载到 pod。
先决条件
流程
使用以下 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
如果您在设置静态 PV 时遇到问题,请参阅 AWS EFS 故障排除。
5.7.8. AWS EFS 安全
以下信息对 AWS 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.7.9. AWS EFS 故障排除
以下信息提供了有关如何排除 AWS 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 节点和 AWS EFS 之间丢弃数据包造成的。
检查以下内容是否正确(请参阅在 AWS 中创建和配置 EFS 卷访问权限):
- AWS 防火墙和安全组
- 网络:端口号和 IP 地址
5.7.10. 卸载 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:
-
点 Operators
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 部分列出。
-
点 Operators
在销毁集群 (openshift-install destroy cluster
) 前,您必须删除 AWS 中的 EFS 卷。如果有使用集群的 VPC 的 EFS 卷,OpenShift Container Platform 集群将无法被销毁。Amazon 不允许删除这样的 VPC。