×

AWS 上的 Red Hat OpenShift 服务集群预先构建了四个使用 Amazon Elastic Block Store (Amazon EBS) 卷的存储类。这些存储类可以使用,并且假设您对 Kubernetes 和 AWS 有一定的了解。

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

名称 供应程序

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 卷。持久卷不绑定到单个项目或命名空间;它们可以在 AWS 上的 Red Hat OpenShift 服务集群中共享。持久卷声明特定于项目或命名空间,用户可以请求它们。您可以定义一个 KMS 密钥来加密 AWS 上的容器持久卷。默认情况下,使用 Red Hat OpenShift Service on AWS 版本 4.10 及更高版本的最新创建的集群使用 gp3 存储和 AWS EBS CSI 驱动程序

基础架构中存储的高可用性留给底层存储提供商。

创建 EBS 存储类

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

创建持久卷声明

先决条件

在将存储作为卷安装到 AWS 上的 Red Hat OpenShift 服务中之前,必须在底层基础架构中存在存储。

步骤
  1. 在 AWS 上的 Red Hat OpenShift 服务控制台中,点击**存储** → **持久卷声明**。

  2. 在持久卷声明概述中,点击**创建持久卷声明**。

  3. 在出现的页面上定义所需选项。

    1. 从下拉菜单中选择之前创建的存储类。

    2. 输入存储声明的唯一名称。

    3. 选择访问模式。此选择决定存储声明的读写访问权限。

    4. 定义存储声明的大小。

  4. 点击**创建**以创建持久卷声明并生成持久卷。

卷格式

在 AWS 上的 Red Hat OpenShift 服务安装卷并将其传递给容器之前,它会检查卷是否包含持久卷定义中的fsType参数指定的 文件系统。如果设备未格式化为文件系统,则设备中的所有数据都将被擦除,并且设备将自动格式化为给定的文件系统。

此验证使您可以将未格式化的 AWS 卷用作持久卷,因为 AWS 上的 Red Hat OpenShift 服务会在第一次使用之前对其进行格式化。

节点上 EBS 卷的最大数量

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

作为集群管理员,您必须使用树内或容器存储接口 (CSI) 卷及其各自的存储类,但切勿同时使用这两种卷类型。树内和 CSI 卷的已附加 EBS 卷的最大数量分别计算,这意味着您可以最多拥有每种类型的 39 个 EBS 卷。

有关访问其他存储选项(例如,树内卷插件无法使用的卷快照)的信息,请参阅 AWS Elastic Block Store CSI 驱动程序运算符

使用 KMS 密钥加密 AWS 上的容器持久卷

在部署到 AWS 时具有明确的合规性和安全准则时,定义 KMS 密钥以加密 AWS 上的容器持久卷非常有用。

先决条件
  • 底层基础架构必须包含存储。

  • 您必须在 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 指定加密容器持久卷时要使用的密钥的完整 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

其他资源