×

OpenShift Container Platform 支持 Amazon Elastic Block Store (EBS) 卷。您可以使用Amazon EC2 来配置您的 OpenShift Container Platform 集群的持久性存储。

Kubernetes 持久卷框架允许管理员使用持久性存储配置集群,并为用户提供了一种请求这些资源的方法,而无需了解底层基础架构。您可以动态配置 Amazon EBS 卷。持久卷不绑定到单个项目或命名空间;它们可以在 OpenShift Container Platform 集群中共享。持久卷声明特定于项目或命名空间,用户可以请求它们。您可以定义一个 KMS 密钥来加密 AWS 上的容器持久卷。默认情况下,使用 OpenShift Container Platform 4.10 及更高版本的全新创建的集群使用 gp3 存储和AWS EBS CSI 驱动程序

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

OpenShift Container Platform 4.12 及更高版本为 AWS Block 内置卷插件提供自动迁移到其等效的 CSI 驱动程序。

CSI 自动迁移应该无缝进行。迁移不会更改您使用所有现有 API 对象的方式,例如持久卷、持久卷声明和存储类。有关迁移的更多信息,请参见CSI 自动迁移

创建 EBS 存储类

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

创建持久卷声明

先决条件

存储必须存在于底层基础架构中,然后才能将其作为卷安装到 OpenShift Container Platform 中。

步骤
  1. 在 OpenShift Container Platform 控制台中,单击**存储** → **持久卷声明**。

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

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

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

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

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

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

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

卷格式

在 OpenShift Container Platform 挂载卷并将其传递给容器之前,它会检查卷是否包含持久卷定义中的fsType参数指定的挂载点。如果设备未格式化为文件系统,则设备中的所有数据将被擦除,并且设备将自动使用给定的文件系统进行格式化。

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

节点上 EBS 卷的最大数量

默认情况下,OpenShift Container Platform 支持最多 39 个连接到一个节点的 EBS 卷。此限制与AWS 卷限制一致。卷限制取决于实例类型。

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

有关访问其他存储选项(例如,内置卷插件无法实现的卷快照)的信息,请参见AWS Elastic Block Store CSI 驱动程序操作符

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

定义 KMS 密钥以加密 AWS 上的容器持久卷在您在部署到 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

其他资源