搜索

第 4 章 配置持久性存储

download PDF

4.1. 使用 AWS Elastic Block Store 的持久性存储

OpenShift Dedicated 集群预构建了四个存储类,它们使用 Amazon Elastic Block Store (Amazon EBS) 卷。这些存储类可供使用,并假设您对 Kubernetes 和 AWS 有一定的了解。

以下是四个预构建的存储类:

名称Provisioner

gp2

kubernetes.io/aws-ebs

gp2-csi

ebs.csi.aws.com

gp3 (默认)

kubernetes.io/aws-ebs

gp3-csi

ebs.csi.aws.com

gp3 存储类被设置为默认存储类,但您可以选择任何存储类作为默认存储类。

Kubernetes 持久性卷框架允许管理员提供带有持久性存储的集群,并使用户可以在不了解底层存储架构的情况下请求这些资源。您可以动态置备 Amazon EBS 卷。持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Dedicated 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。您可以定义 KMS 密钥来加密 AWS 上的 container-persistent 卷。默认情况下,使用 OpenShift Dedicated 版本 4.10 及之后的版本创建的集群使用 gp3 存储和 AWS EBS CSI 驱动程序

重要

存储的高可用性功能由底层存储供应商实现。

4.1.1. 创建 EBS 存储类

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

4.1.2. 创建持久性卷声明

先决条件

当存储可以被挂载为 OpenShift Dedicated 中的卷之前,它必须已存在于底层的存储系统中。

流程

  1. 在 OpenShift Dedicated 控制台中,点 Storage Persistent Volume Claims
  2. 在持久性卷声明概述页中,点 Create Persistent Volume Claim
  3. 在出现的页面中定义所需选项。

    1. 从下拉菜单中选择之前创建的存储类。
    2. 输入存储声明的唯一名称。
    3. 选择访问模式。此选择决定了存储声明的读写访问权限。
    4. 定义存储声明的大小。
  4. 点击 Create 创建持久性卷声明,并生成一个持久性卷。

4.1.3. 卷格式

在 OpenShift Dedicated 挂载卷并将其传递给容器之前,它会检查卷是否包含由持久性卷定义中的 fsType 参数指定的文件系统。如果没有使用文件系统格式化该设备,该设备中的所有数据都会被删除,并使用指定的文件系统自动格式化该设备。

此验证可让您将未格式化的 AWS 卷用作持久性卷,因为 OpenShift Dedicated 在首次使用前会进行格式化。

4.1.4. 一个节点上的 EBS 卷的最大数目

默认情况下,OpenShift Dedicated 最多支持把 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 密钥。

流程

  1. 创建存储类:

    $ 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
  2. 使用指定 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
  3. 创建工作负载容器以使用 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. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.