第 4 章 配置持久性存储
4.1. 使用 AWS Elastic Block Store 的持久性存储
OpenShift Container Platform 支持 Amazon Elastic Block Store (EBS) 卷。您可以使用 Amazon EC2 为 OpenShift Container Platform 集群置备持久性存储。
Kubernetes 持久性卷框架允许管理员提供带有持久性存储的集群,并使用户可以在不了解底层存储架构的情况下请求这些资源。您可以动态置备 Amazon EBS 卷。持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Container Platform 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。您可以定义 KMS 密钥来加密 AWS 上的 container-persistent 卷。默认情况下,新创建的使用 OpenShift Container Platform 版本 4.10 和更高版本的集群使用 gp3 存储和 AWS EBS CSI 驱动程序。
存储的高可用性功能由底层存储供应商实现。
OpenShift Container Platform 4.12 及更新的版本为 AWS Block in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。
CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 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)卷及其相应的存储类,但不得同时使用这两个卷类型。对于 in-tree 和 CSI 卷,最大附加的 EBS 卷数量会单独计算,因此每种类型您都最多可以有 39 个 EBS 卷。
有关访问额外存储选项(如卷快照)的详情,请参考 AWS Elastic Block Store CSI Driver Operator。
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,这些内容无法在树状卷插件中使用。