第 4 章 配置持久性存储
4.1. 使用 AWS Elastic Block Store 的持久性存储
OpenShift Container Platform 支持 AWS Elastic Block Store 卷 (EBS) 。您可以使用 Amazon EC2 为 OpenShift Container Platform 集群置备持久性存储。我们假设您对 Kubernetes 和 AWS 有一定的了解。
Kubernetes 持久性卷框架允许管理员提供带有持久性存储的集群,并使用户可以在不了解底层存储架构的情况下请求这些资源。AWS Elastic Block Store 卷可以动态部署。持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Container Platform 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。您可以定义 KMS 密钥来加密 AWS 上的 container-persistent 卷。
OpenShift Container Platform 默认使用 in-tree (非 CSI)插件来置备 AWS EBS 存储。
在以后的 OpenShift Container Platform 版本中,计划使用现有树内插件置备的卷迁移到对应的 CSI 驱动程序。CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移。
完全迁移后,未来的 OpenShift Container Platform 版本将最终删除树内插件。
存储的高可用性功能由底层存储供应商实现。
对于 OpenShift Container Platform,可以从 AWS EBS in-tree 自动迁移到 Container Storage Interface(CSI)驱动程序作为技术预览(TP)功能。启用迁移后,使用现有 in-tree 驱动程序置备的卷会自动迁移到使用 AWS EBS CSI 驱动程序。如需更多信息,请参阅 CSI 自动迁移功能。
4.1.1. 创建 EBS 存储类
存储类用于区分和划分存储级别和使用。通过定义存储类,用户可以获得动态置备的持久性卷。
4.1.2. 创建持久性卷声明
先决条件
当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。
流程
-
在 OpenShift Container Platform 控制台中,点击 Storage
Persistent Volume Claims。 - 在持久性卷声明概述页中,点 Create Persistent Volume Claim。
在出现的页面中定义所需选项。
- 从下拉菜单中选择之前创建的存储类。
- 输入存储声明的唯一名称。
- 选择访问模式。这决定了所创建存储声明的读写权限。
- 定义存储声明的大小。
- 点击 Create 创建持久性卷声明,并生成一个持久性卷。
4.1.3. 卷格式
在 OpenShift Container Platform 挂载卷并将其传递给容器之前,它会检查它是否包含由 fstype
参数指定的文件系统。如果没有使用文件系统格式化该设备,该设备中的所有数据都会被删除,并使用指定的文件系统自动格式化该设备。
这将可以使用未格式化的 AWS 卷作为持久性卷,因为 OpenShift Container Platform 在第一次使用前会对其进行格式化。
4.1.4. 一个节点上的 EBS 卷的最大数目
默认情况下,OpenShift Container Platform 最多支持把 39 个 EBS 卷附加到一个节点。这个限制与 AWS 卷限制一致。卷限制取决于实例类型。
作为集群管理员,您必须使用树内或 Container Storage Interface(CSI)卷及其相应的存储类,但不得同时使用这两个卷类型。附加的最大 EBS 卷数将单独计算为 in-tree 和 CSI 卷。
4.1.5. 使用 KMS 密钥在 AWS 上加密容器持久性卷
在部署到 AWS 时,定义在 AWS 上加密容器持久性卷的 KMS 密钥很有用。
先决条件
- 底层基础架构必须包含存储。
- 您必须在 AWS 上创建客户 KMS 密钥。
流程
创建存储类:
$ cat << EOF | oc create -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class-name> 1 parameters: fsType: ext4 2 encrypted: "true" kmsKeyId: keyvalue 3 provisioner: ebs.csi.aws.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer EOF
- 1
- 指定存储类的名称。
- 2
- 在置备的卷中创建的文件系统。
- 3
- 指定加密 container-persistent 卷时要使用的密钥的完整 Amazon 资源名称 (ARN)。如果没有提供任何密钥,但
encrypted
字段被设置为true
,则使用默认的 KMS 密钥。请参阅 AWS 文档中的查找 AWS 的密钥 ID 和密钥 ARN。
使用指定 KMS 密钥的存储类创建 PVC:
$ cat << EOF | oc create -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem storageClassName: <storage-class-name> resources: requests: storage: 1Gi EOF
创建工作负载容器以使用 PVC:
$ cat << EOF | oc create -f - kind: Pod metadata: name: mypod spec: containers: - name: httpd image: quay.io/centos7/httpd-24-centos7 ports: - containerPort: 80 volumeMounts: - mountPath: /mnt/storage name: data volumes: - name: data persistentVolumeClaim: claimName: mypvc EOF
4.1.6. 其他资源
- 有关访问额外存储选项的信息,如卷快照,请参阅 AWS Elastic Block Store CSI Driver Operator,这些内容无法在树状卷插件中使用。