在集群中安装 Portworx
在 IBM Cloud 目录中供应 Portworx 服务实例。 创建服务实例后,使用 Helm 在集群上安装最新的 Portworx 企业版 (px-enterprise
)。 此外,Stork 也安装在 Red Hat OpenShift on IBM Cloud 集群上。 Stork 是 Portwortx 存储调度程序。 有了 Stork,你可以将 pod 与其数据同地放置,并创建和恢复 Portworx 卷的快照。
在寻找有关如何更新或除去 Portworx 的指示信息? 请参阅 更新 Portworx 和 移除 Portworx。
蒙特利尔地区的专用群集尚不支持 Portworx Enterprise 和 Portworx Backup 的默认安装方法。 如果您需要在蒙特利尔的专用群集中安装 Portworx Enterprise 或 Portworx Backup,请联系 Portworx 支持。 更多信息,请参阅 Portworx 支持
开始之前:
-
确保您具有正确的 许可权,以创建 Red Hat OpenShift on IBM Cloud 集群。
-
如果要在经典集群中使用非 SDS 工作程序节点,请 向工作程序节点添加块存储设备。
-
选择是 使用内部 Portworx 键值数据库(KVDB) 还是 创建 Databases for etcd 服务实例 来存储 Portworx 配置和元数据。
-
决定是否要加密 Portworx 卷。 要加密卷,必须 设置 IBM Key Protect 或 Hyper Protect Crypto Services 实例,并将服务信息存储在 Kubernetes secret 中。
-
确保已将映像拉取私钥从
default
复制到kube-system
项目,以便可以从 Container Registry 拉取映像。 确保向 Kubernetes 服务帐户添加映像拉取私钥(即,kube-system
项目的 Kubernetes 服务帐户)。 -
决定是否要将集群包含在 Portworx 灾难恢复配置中。 有关更多信息,请参阅 使用 Portworx设置灾难恢复。
-
如果为 Portworx 日志连接了单独的设备,请确保在登录到工作程序节点时通过运行
lsblk
来检索设备路径。 -
如果为 Portworx KVDB 连接了单独的设备,请确保在登录到工作程序节点时通过运行
lsblk
来检索设备路径。
要安装 Portworx,请执行以下操作:
-
从 IBM Cloud 目录中打开 Portworx 服务,并填写以下字段:
-
选择 Red Hat OpenShift on IBM Cloud 集群所在的区域。
-
查看 Portworx 定价信息。
-
输入 Portworx 服务实例的名称。
-
选择集群所在的资源组。
-
在标记字段中,输入要安装 Portworx 的集群的名称。 创建 Portworx 服务实例后,就看不到安装 Portworx 的群集了。 为了日后更轻松地找到该集群,请确保输入集群名称和所有其他信息作为标记。
-
输入 IBM Cloud API 密钥以检索您有权访问的集群的列表。 如果没有 API 密钥,请参阅管理用户 API 密钥。 输入 API 密钥后,将显示 Kubernetes 或 OpenShift 集群名称 字段。
-
输入唯一的 Portworx 集群名称。
-
在 云驱动器 菜单中:
- 选择 使用云驱动器 (仅限 VPC 集群) 为 Portworx动态供应 Block Storage for VPC。 选择 使用云驱动器后,选择要供应的块存储驱动器的 存储类名 和 大小。
- 选择 使用已连接的驱动器 (经典,VPC 或 Satellite) 以使用已连接到工作程序节点的块存储器。
-
从 Portworx metadata key-value store 下拉列表中,选择要用于存储 Portworx 元数据的 key-value store 的类型。 选择 Portworx KVDB 以在 Portworx 安装期间自动创建键值存储,或者如果要使用现有 Databases for etcd 实例,请选择 Databases for etcd。 如果选择 Databases for etcd,那么将显示 Etcd API 端点 和 Etcd 密钥名称 字段。
-
名称空间: 输入要在其中部署 Portworx 资源的名称空间。
-
仅 Databases for etcd 必需: 输入 Databases for etcd 服务实例的信息。
- 检索 etcd 端点和 Kubernetes 私钥的名称(即,先前为 Databases for etcd 服务实例创建的 Kubernetes 私钥)。
- 在 Etcd API 端点字段中,输入您先前检索到的 Databases for etcd 服务实例的 API 端点。 确保以
etcd:<etcd_endpoint1>;etcd:<etcd_endpoint2>
的格式输入端点。 如果有多个端点,请包含所有端点,并用分号 (;
) 来分隔各端点。 - 在 Etcd 私钥名称字段中,输入在集群中创建的用于存储 Databases for etcd 服务凭证的 Kubernetes 私钥的名称。
-
从 Kubernetes 或 OpenShift 集群名称下拉列表中,选择要安装 Portworx 的集群。 如果未列出您的集群,请确保选择正确的 IBM Cloud 区域。 如果区域正确,请验证您是否具有查看和使用集群的正确许可权。 确保选择的群集满足 Portworx 的最低硬件要求。
-
可选:从 Portworx 秘密存储类型下拉列表中,选择用于存储加密卷密钥的秘密存储类型。
- Kubernetes 私钥:如果要在集群的 Kubernetes 私钥中存储您自己的定制密钥来加密卷,请选择此选项。 安装 Portworx 之前,私钥不能存在。 您可以在安装 Portworx 之后创建私钥。 更多信息,请参阅 Portworx 文档。
- IBM Key Protect:如果要使用 IBM Key Protect 中的根密钥来加密卷,请选择此选项。 确保按照指示信息来创建 IBM Key Protect 服务实例,并在安装 Portworx 之前,在
portworx
项目的 Kubernetes 私钥中存储用于访问服务实例的凭证。
-
可选: 如果要设置日志设备或 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
。
- 输入
-
-
单击创建以开始在集群中安装 Portworx。 此过程可能需要几分钟才能完成。 服务详细信息页面将打开,其中包含有关如何验证 Portworx 安装,创建持久卷声明 (PVC) 以及将 PVC 安装到应用程序的指示信息。
-
从 IBM Cloud 资源列表中,找到您创建的 Portworx 服务。
-
查看 Status 列以确定安装是成功还是失败。 阶段状态更新可能需要几分钟时间。
-
如果 Status 更改为
Provision failure
,请按照指示信息来启动对安装失败原因的故障诊断。 -
如果 Status 更改为
Provisioned
,请验证 Portworx 安装是否成功完成,以及是否已识别到所有本地磁盘并已将这些磁盘添加到 Portworx 存储层。-
列出
kube-system
项目中的 Portworx pod。 如果看到一个或多个portworx
、stork
和stork-scheduler
pod,说明安装成功。 pod 的数量等于 Portworx 集群中的工作节点数量。 所有 pod 都必须处于Running
状态。oc 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
-
登录到其中一个
portworx
pod,并列出 Portworx 集群的状态。oc 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
-
通过查看 CLI 输出的 Cluster Summary 部分中的 StorageNode 列,验证希望包含在 Portworx 存储层中的所有工作程序节点是否都包含在内。 存储层中的工作节点显示为
Yes
。StorageNode 列。由于 Portworx 在集群中作为 DaemonSet 运行,因此在部署 Portworx时,将自动检查现有工作程序节点以获取原始块存储器,并将其添加到 Portworx 数据层。 如果将工作程序节点添加到集群并将原始块存储器添加到这些工作程序,请在新的工作程序节点上重新启动 Portworx pod,以便 DaemonSet检测到您的存储卷。
-
通过查看 CLI 输出的 Cluster Summary 部分中的 Capacity 列,验证每个存储节点是否都已列出并具有正确的原始块存储量。
-
查看分配给属于 Portworx 集群的磁盘的 Portworx I/O 分类。 在设置 Portworx 集群期间,将检查每个磁盘以确定设备的性能概要文件。 概要文件分类取决于工作程序节点连接到的网络的速度以及您拥有的存储设备类型。 SDS 工作程序节点的磁盘分类为
high
。 如果将磁盘手动附加到虚拟工作节点上,由于虚拟工作节点的网络速度较慢,这些磁盘会被归类为low
。oc 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 卷。
-
列出集群中的可用存储类,并检查是否可以使用在 Portworx 安装期间设置的现有 Portworx 存储类。 预定义的存储类已针对数据库使用情况进行优化,并可跨 pod 共享数据。
oc get sc | grep portworx
要查看存储类的详细信息,请运行
oc describe storageclass <storageclass_name>
。 -
如果不想使用现有存储类,请创建定制存储类。 有关可在存储类中指定的受支持选项的完整列表,请参阅 使用动态调配。
-
为存储类创建配置文件。
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
- 输入要跨不同工作程序节点存储的数据的副本数。 允许的数字为
1
,2
或3
。 例如,如果您输入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 优先级。 可用选项为
high
、medium
和low
。 在设置 Portworx 集群期间,将检查每个磁盘以确定设备的性能概要文件。 配置文件分类取决于工作节点的网络带宽和存储设备类型。 SDS 工作程序节点的磁盘分类为high
。 如果将磁盘手动附加到虚拟工作节点上,由于虚拟工作节点的网络速度较慢,这些磁盘会被归类为low
。 - 创建具有存储类的 PVC 时,在
parameters/repl
中指定的副本数量会优先于 I/O 优先级。 例如,如果指定要在高速磁盘上存储的 3 个副本,但在集群中只有一个工作程序节点具有高速磁盘,那么 PVC 创建仍会成功。 数据会在高速和低速磁盘上进行复制。
- 输入要为数据请求的 Portworx I/O 优先级。 可用选项为
parameters.shared
- 定义是否要允许多个 pod 访问同一卷。 在以下选项之间进行选择:
- true:如果将此选项设置为
true
,那么分布在不同区域工作节点上的多个 pod 就可以访问同一个卷。 - 假:如果将此选项设置为
false
,则只有当 pod 部署到连接支持卷的物理磁盘的 Worker 节点上时,才能从多个 pod 访问卷。 如果您的 pod 部署在不同的 Worker 节点上,则 pod 无法访问卷。
- true:如果将此选项设置为
-
创建存储类。
oc apply -f storageclass.yaml
-
验证存储类是否已创建。
oc get sc
-
-
创建持久卷声明 (PVC)。
-
为 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
存储类。
-
创建 PVC。
oc apply -f pvc.yaml
-
验证 PVC 是否已创建并绑定到持久卷 (PV)。 此过程可能需要几分钟时间。
oc get pvc
-
将卷安装到应用程序
要从应用程序访问存储器,必须将 PVC 安装到应用程序。
-
为安装 PVC 的部署创建配置文件。
有关如何使用 Portworx部署有状态集的提示,请参阅 StatefulSets。 Portworx 文档还包含有关如何部署 Cassandra,Kafka,ElasticSearch with Kibana和 WordPress 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.app
和spec.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 的名称。
-
创建部署。
oc apply -f deployment.yaml
-
验证 PV 是否已成功安装到应用程序。
oc 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
-
验证是否可以将数据写入 Portworx 集群。
- 登录到安装 PV 的 pod。
oc exec <pod_name> -it bash
- 浏览到在应用程序部署中定义的卷安装路径。
- 创建文本文件。
echo "This is a test" > test.txt
- 读取所创建的文件。
cat test.txt
- 登录到安装 PV 的 pod。