IBM Cloud Docs
在集群中安装 Portworx

在集群中安装 Portworx

在 IBM Cloud 目录中供应 Portworx 服务实例。 创建服务实例后,使用 Helm 在集群上安装最新的 Portworx 企业版 (px-enterprise)。 此外,Stork 也安装在 IBM Cloud Kubernetes Service 集群上。 Stork 是 Portwortx 存储调度程序。 有了 Stork,你可以将 pod 与其数据同地放置,并创建和恢复 Portworx 卷的快照。

在寻找有关如何更新或除去 Portworx 的指示信息? 请参阅 更新 Portworx移除 Portworx

蒙特利尔地区的专用群集尚不支持 Portworx Enterprise 和 Portworx Backup 的默认安装方法。 如果您需要在蒙特利尔的专用群集中安装 Portworx Enterprise 或 Portworx Backup,请联系 Portworx 支持。 更多信息,请参阅 Portworx 支持

开始之前:

要安装 Portworx,请执行以下操作:

  1. IBM Cloud 目录中打开 Portworx 服务,并填写以下字段:

    1. 选择 IBM Cloud Kubernetes Service 集群所在的区域。

    2. 查看 Portworx 定价信息。

    3. 输入 Portworx 服务实例的名称。

    4. 选择集群所在的资源组。

    5. 标记字段中,输入要安装 Portworx 的集群的名称。 创建 Portworx 服务实例后,就看不到安装 Portworx 的群集了。 为了日后更轻松地找到该集群,请确保输入集群名称和所有其他信息作为标记。

    6. 输入 IBM Cloud API 密钥以检索您有权访问的集群的列表。 如果没有 API 密钥,请参阅管理用户 API 密钥。 输入 API 密钥后,将显示 Kubernetes 或 OpenShift 集群名称 字段。

    7. 输入唯一的 Portworx 集群名称

    8. 云驱动器 菜单中:

      1. 选择 使用云驱动器 (仅限 VPC 集群) 为 Portworx动态供应 Block Storage for VPC。 选择 使用云驱动器后,选择要供应的块存储驱动器的 存储类名大小
      2. 选择 使用已连接的驱动器 (经典,VPC 或 Satellite) 以使用已连接到工作程序节点的块存储器。
    9. Portworx metadata key-value store 下拉列表中,选择要用于存储 Portworx 元数据的 key-value store 的类型。 选择 Portworx KVDB 以在 Portworx 安装期间自动创建键值存储,或者如果要使用现有 Databases for etcd 实例,请选择 Databases for etcd。 如果选择 Databases for etcd,那么将显示 Etcd API 端点Etcd 密钥名称 字段。

    10. 名称空间: 输入要在其中部署 Portworx 资源的名称空间。

    11. 仅 Databases for etcd 必需: 输入 Databases for etcd 服务实例的信息。

      1. 检索 etcd 端点和 Kubernetes 私钥的名称(即,先前为 Databases for etcd 服务实例创建的 Kubernetes 私钥)。
      2. Etcd API 端点字段中,输入您先前检索到的 Databases for etcd 服务实例的 API 端点。 确保以 etcd:<etcd_endpoint1>;etcd:<etcd_endpoint2> 的格式输入端点。 如果有多个端点,请包含所有端点,并用分号 (;) 来分隔各端点。
      3. Etcd 私钥名称字段中,输入在集群中创建的用于存储 Databases for etcd 服务凭证的 Kubernetes 私钥的名称。
    12. Kubernetes 或 OpenShift 集群名称下拉列表中,选择要安装 Portworx 的集群。 如果未列出您的集群,请确保选择正确的 IBM Cloud 区域。 如果区域正确,请验证您是否具有查看和使用集群的正确许可权。 确保选择的群集满足 Portworx 的最低硬件要求

    13. 可选:从 Portworx 秘密存储类型下拉列表中,选择用于存储加密卷密钥的秘密存储类型。

      • Kubernetes 私钥:如果要在集群的 Kubernetes 私钥中存储您自己的定制密钥来加密卷,请选择此选项。 安装 Portworx 之前,私钥不能存在。 您可以在安装 Portworx 之后创建私钥。 更多信息,请参阅 Portworx 文档
      • IBM Key Protect:如果要使用 IBM Key Protect 中的根密钥来加密卷,请选择此选项。 确保按照指示信息来创建 IBM Key Protect 服务实例,并在安装 Portworx 之前,在 portworx 名称空间的 Kubernetes 私钥中存储用于访问服务实例的凭证。
    14. 可选: 如果要设置日志设备或 KVDB 设备,请在 高级选项 字段中输入设备详细信息。 从日志设备的以下选项中进行选择。

      • 输入 j;auto 以允许 Portworx 在要用于日志的某个块存储设备上自动创建 3 GB 分区。
      • 输入 j;</device/path> 以将特定设备用于日志。 例如,输入 j;/dev/vde 以使用位于 /dev/vde 的磁盘。 要查找要用于日志的设备的路径,请登录到工作程序节点并运行 lsblk
      • 输入 kvdb_dev;<device path> 以指定要在其中存储内部 KVDB 数据的设备。 例如,kvdb_dev;/dev/vdd。 要查找要使用的设备的路径,请登录到工作程序节点并运行 lsblk。 要将特定设备用于 KVDB 数据,必须具有 3GB 的可用存储设备或至少 3 个工作程序节点上的可用存储设备。 这些设备还必须在每个工作程序节点上的相同路径上。 例如: /dev/vdd
  2. 单击创建以开始在集群中安装 Portworx。 此过程可能需要几分钟才能完成。 服务详细信息页面将打开,其中包含有关如何验证 Portworx 安装,创建持久卷声明 (PVC) 以及将 PVC 安装到应用程序的指示信息。

  3. IBM Cloud 资源列表中,找到您创建的 Portworx 服务。

  4. 查看 Status 列以确定安装是成功还是失败。 阶段状态更新可能需要几分钟时间。

  5. 如果 Status 更改为 Provision failure,请按照指示信息来启动对安装失败原因的故障诊断。

  6. 如果 Status 更改为 Provisioned,请验证 Portworx 安装是否成功完成,以及是否已识别到所有本地磁盘并已将这些磁盘添加到 Portworx 存储层。

    1. 列出 kube-system 名称空间中的 Portworx pod。 如果看到一个或多个 portworxstorkstork-scheduler pod,说明安装成功。 pod 的数量等于 Portworx 集群中的工作节点数量。 所有 pod 都必须处于 Running 状态。

      kubectl get pods -n kube-system | grep 'portworx\|stork'
      

      示例输出

      portworx-594rw                          1/1       Running     0          20h
      portworx-rn6wk                          1/1       Running     0          20h
      portworx-rx9vf                          1/1       Running     0          20h
      stork-6b99cf5579-5q6x4                  1/1       Running     0          20h
      stork-6b99cf5579-slqlr                  1/1       Running     0          20h
      stork-6b99cf5579-vz9j4                  1/1       Running     0          20h
      stork-scheduler-7dd8799cc-bl75b         1/1       Running     0          20h
      stork-scheduler-7dd8799cc-j4rc9         1/1       Running     0          20h
      stork-scheduler-7dd8799cc-knjwt         1/1       Running     0          20h
      
    2. 登录到其中一个 portworx pod,并列出 Portworx 集群的状态。

      kubectl exec <portworx_pod> -it -n kube-system -- /opt/pwx/bin/pxctl status
      

      示例输出

      Status: PX is operational
      License: Trial (expires in 30 days)
      Node ID: 10.176.48.67
      IP: 10.176.48.67
      Local Storage Pool: 1 pool
      POOL    IO_PRIORITY    RAID_LEVEL    USABLE    USED    STATUS    ZONE    REGION
        0    LOW        raid0        20 GiB    3.0 GiB    Online    dal10    us-south
      Local Storage Devices: 1 device
      Device    Path                        Media Type        Size        Last-Scan
          0:1    /dev/mapper/3600a09803830445455244c4a38754c66    STORAGE_MEDIUM_MAGNETIC    20 GiB        17 Sep 18 20:36 UTC
              total                            -            20 GiB
      Cluster Summary
      Cluster ID: mycluster
          Cluster UUID: a0d287ba-be82-4aac-b81c-7e22ac49faf5
      Scheduler: kubernetes
      Nodes: 2 node(s) with storage (2 online), 1 node(s) without storage (1 online)
        IP        ID        StorageNode    Used    Capacity    Status    StorageStatus    Version        Kernel            OS
        10.184.58.11    10.184.58.11    Yes        3.0 GiB    20 GiB        Online    Up        1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
        10.176.48.67    10.176.48.67    Yes        3.0 GiB    20 GiB        Online    Up (This node)    1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
        10.176.48.83    10.176.48.83    No        0 B    0 B        Online    No Storage    1.5.0.0-bc1c580    4.4.0-133-generic    Ubuntu 20.04.5 LTS
      Global Storage Pool
        Total Used        :  6.0 GiB
        Total Capacity    :  40 GiB
      
    3. 通过查看 CLI 输出的 Cluster Summary 部分中的 StorageNode 列,验证希望包含在 Portworx 存储层中的所有工作程序节点是否都包含在内。 存储层中的工作节点显示为 YesStorageNode 列。

      由于 Portworx 在集群中作为 DaemonSet 运行,因此在部署 Portworx时,将自动检查现有工作程序节点以获取原始块存储器,并将其添加到 Portworx 数据层。 如果将工作程序节点添加到集群并将原始块存储器添加到这些工作程序,请在新的工作程序节点上重新启动 Portworx pod,以便 DaemonSet检测到您的存储卷。

    4. 通过查看 CLI 输出的 Cluster Summary 部分中的 Capacity 列,验证每个存储节点是否都已列出并具有正确的原始块存储量。

    5. 查看分配给属于 Portworx 集群的磁盘的 Portworx I/O 分类。 在设置 Portworx 集群期间,将检查每个磁盘以确定设备的性能概要文件。 概要文件分类取决于工作程序节点连接到的网络的速度以及您拥有的存储设备类型。 SDS 工作程序节点的磁盘分类为 high。 如果将磁盘手动附加到虚拟工作节点,由于虚拟工作节点的网络速度较慢,这些磁盘将被归类为 low

      kubectl exec -it <portworx_pod> -n kube-system -- /opt/pwx/bin/pxctl cluster provision-status
      

      示例输出

      NODE        NODE STATUS    POOL    POOL STATUS    IO_PRIORITY    SIZE    AVAILABLE    USED    PROVISIONED    RESERVEFACTOR    ZONE    REGION        RACK
      10.184.58.11    Up        0    Online        LOW        20 GiB    17 GiB        3.0 GiB    0 B        0        dal12    us-south    default
      10.176.48.67    Up        0    Online        LOW        20 GiB    17 GiB        3.0 GiB    0 B        0        dal10    us-south    default
      10.176.48.83    Up        0    Online        HIGH        3.5 TiB    3.5 TiB        10 GiB    0 B        0        dal10    us-south    default
      

创建 Portworx 卷

开始使用 Kubernetes 动态供应创建 Portworx 卷。

  1. 列出集群中的可用存储类,并检查是否可以使用在 Portworx 安装期间设置的现有 Portworx 存储类。 预定义的存储类已针对数据库使用情况进行优化,并可跨 pod 共享数据。

    kubectl get sc | grep portworx
    

    要查看存储类的详细信息,请运行 kubectl describe storageclass <storageclass_name>

  2. 如果不想使用现有存储类,请创建定制存储类。 有关可在存储类中指定的受支持选项的完整列表,请参阅 使用动态调配

    1. 为存储类创建配置文件。

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: <storageclass_name>
      provisioner: kubernetes.io/portworx-volume
      parameters:
        repl: "<replication_factor>"
        secure: "<true_or_false>"
        priority_io: "<io_priority>"
        shared: "<true_or_false>"
      
      metadata.name
      输入存储类的名称。
      parameters.repl
      输入要跨不同工作程序节点存储的数据的副本数。 允许的数字为 123。 例如,如果您输入 3,那么您的数据将在 Portworx 集群中的三个不同工作节点上复制。 要以高可用性方式存储数据,请使用多专区集群,并跨不同专区中的 3 个工作程序节点复制数据。 您必须有足够的工作节点来满足复制要求。 例如,如果有两个工作程序节点,但指定三个副本,那么使用此存储类创建 PVC 会失败。
      parameters.secure
      指定是否要使用 IBM Key Protect 对卷中的数据进行加密。 在以下选项之间进行选择。
      • true:输入 true,为 Portworx 卷启用加密。 要加密卷,您必须具有 IBM Key Protect 服务实例以及用于保存客户根密钥的 Kubernetes 私钥。 有关如何为 Portworx 卷设置加密的更多信息,请参阅加密 Portworx 卷
      • false:当您输入 false 时,您的 Portworx 卷不会被加密。 如果不指定该选项,Portworx 卷默认不加密。 即使在存储类别中禁用了加密,也可以选择在 PVC 中启用卷加密。 在 PVC 中创建的设置优先于存储类中的设置。
      parameters.priority_io
      输入要为数据请求的 Portworx I/O 优先级。 可用选项为 highmediumlow。 在设置 Portworx 集群期间,将检查每个磁盘以确定设备的性能概要文件。 配置文件分类取决于工作节点的网络带宽和存储设备类型。 SDS 工作程序节点的磁盘分类为 high。 如果将磁盘手动附加到虚拟工作节点,由于虚拟工作节点的网络速度较慢,这些磁盘将被归类为 low
      创建具有存储类的 PVC 时,在 parameters/repl 中指定的副本数量会优先于 I/O 优先级。 例如,如果指定要在高速磁盘上存储的 3 个副本,但在集群中只有一个工作程序节点具有高速磁盘,那么 PVC 创建仍会成功。 数据会在高速和低速磁盘上进行复制。
      parameters.shared
      定义是否要允许多个 pod 访问同一卷。 在以下选项之间进行选择:
      • true:如果将此选项设置为 true,那么分布在不同区域工作节点上的多个 pod 就可以访问同一个卷。
      • 假:如果将此选项设置为 false,则只有当 pod 部署到连接支持卷的物理磁盘的 Worker 节点上时,才能从多个 pod 访问卷。 如果您的 pod 部署在不同的 Worker 节点上,则 pod 无法访问卷。
    2. 创建存储类。

      kubectl apply -f storageclass.yaml
      
    3. 验证存储类是否已创建。

      kubectl get sc
      
  3. 创建持久卷声明 (PVC)。

    1. 为 PVC 创建配置文件。

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: mypvc
      spec:
        accessModes:
          - <access_mode>
        resources:
          requests:
            storage: <size>
        storageClassName: portworx-shared-sc
      
      metadata.name
      输入 PVC 的名称,如 mypvc
      spec.accessModes
      输入您要使用的 Kubernetes 访问模式
      resources.requests.storage
      输入要从 Portworx 集群分配的存储量(以千兆字节为单位)。 例如,要从 Portworx 集群分配 2 千兆字节,请输入 2Gi。 可以指定的存储量受 Portworx 集群中可用存储量的限制。 如果您在存储类中指定的复制因子大于 1,那么您在 PVC 中指定的存储量将保留在多个工作节点上。
      spec.storageClassName
      输入先前选择或创建并要用于供应 PV 的存储类的名称。 示例 YAML 文件使用 portworx-shared-sc 存储类。
    2. 创建 PVC。

      kubectl apply -f pvc.yaml
      
    3. 验证 PVC 是否已创建并绑定到持久卷 (PV)。 此过程可能需要几分钟时间。

      kubectl get pvc
      

将卷安装到应用程序

要从应用程序访问存储器,必须将 PVC 安装到应用程序。

  1. 为安装 PVC 的部署创建配置文件。

    有关如何使用 Portworx 部署有状态集的提示,请参阅 StatefulSets. Portworx 文档还包含有关如何部署 Cassandra,KafkaElasticSearch with KibanaWordPress with MySQL的示例。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          schedulerName: stork
          containers:
          - image: <image_name>
            name: <container_name>
          securityContext:
              fsGroup: <group_ID>
            volumeMounts:
            - name: <volume_name>
              mountPath: /<file_path>
          volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>
    
    metadata.labels.app
    部署的标签。
    spec.selector.matchLabels.appspec.template.metadata.labels.app
    应用程序的标签。
    template.metadata.labels.app
    部署的标签。
    spec.schedulerName
    使用 Stork 作为 Portworx 集群的调度程序。 借助 Stork,您可以将 pod 与其数据同地放置,在出现存储错误时提供 pod 的无缝迁移,并使创建和恢复 Portworx 卷的快照变得更容易。
    spec.containers.image
    要使用的映像的名称。 要列出 IBM Cloud Container Registry 帐户中的可用映像,请运行 ibmcloud cr image-list
    spec.containers.name
    要部署到集群的容器的名称。
    spec.containers.securityContext.fsGroup
    可选:要使用非 root 用户访问存储,请为 pod 指定 安全上下文,并在部署 YAML 的 fsGroup 部分定义一组要授予访问权限的用户。 更多信息,请参阅 使用非根用户访问 Portworx 卷
    spec.containers.volumeMounts.mountPath
    在容器中安装卷的目录的绝对路径。 如果要在不同应用程序之间共享音量,可以为每个应用程序指定 音量子路径
    spec.containers.volumeMounts.name
    要安装到 pod 中的卷的名称。
    volumes.name
    要安装到 pod 中的卷的名称。 通常情况下,该名称与 volumeMounts/name 相同。
    volumes.persistentVolumeClaim.claimName
    绑定要使用的 PV 的 PVC 的名称。
  2. 创建部署。

    kubectl apply -f deployment.yaml
    
  3. 验证 PV 是否已成功安装到应用程序。

    kubectl describe deployment <deployment_name>
    

    安装点位于 Volume Mounts 字段中,卷位于 Volumes 字段中。

    Volume Mounts:
            /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro)
            /volumemount from myvol (rw)
    ...
    Volumes:
        myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    mypvc
        ReadOnly:    false
    
  4. 验证是否可以将数据写入 Portworx 集群。

    1. 登录到安装 PV 的 pod。
      kubectl exec <pod_name> -it bash
      
    2. 浏览到在应用程序部署中定义的卷安装路径。
    3. 创建文本文件。
      echo "This is a test" > test.txt
      
    4. 读取所创建的文件。
      cat test.txt