第 4 章 配置持久性存储


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

Red Hat OpenShift Service on AWS 集群使用四个存储类预构建,它们使用 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 卷。持久性卷不与单个项目或命名空间绑定,它们可以在 Red Hat OpenShift Service on AWS 集群中共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。您可以定义 KMS 密钥来加密 AWS 上的 container-persistent 卷。默认情况下,使用 Red Hat OpenShift Service on AWS 版本 4.10 及之后的版本使用 gp3 存储和 AWS EBS CSI 驱动程序 新创建的集群。

重要

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

4.1.1. 创建 EBS 存储类

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

4.1.2. 创建持久性卷声明

先决条件

在将存储挂载为 Red Hat OpenShift Service on AWS 中的卷之前,存储必须存在于底层基础架构中。

流程

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

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

4.1.3. 卷格式

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

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

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

默认情况下,Red Hat OpenShift Service on AWS 支持最多 39 个 EBS 卷附加到一个节点。这个限制与 AWS 卷限制一致。卷限制取决于实例类型。

重要

作为集群管理员,您必须使用树内或 Container Storage Interface(CSI)卷及其相应的存储类,但不得同时使用这两个卷类型。附加的最大 EBS 卷号会单独计算树内和 CSI 卷,这意味着每种类型最多可有 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.