在叢集裡安裝 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 備份功能。 若需在蒙特婁的私有專屬叢集中安裝 Portworx Enterprise 或 Portworx 備份服務,請聯絡 Portworx 支援團隊。 如需更多資訊,請參閱 Portworx 支援頁面
開始之前:
-
請確定您具有正確的 許可權 來建立 Red Hat OpenShift on IBM Cloud 叢集。
-
如果您想要在標準叢集裡使用非 SDS 工作者節點,請 將區塊儲存裝置新增至工作者節點。
-
選擇您要 使用內部 Portworx 鍵值資料庫(KVDB) 還是 建立 Databases for etcd 服務實例 以儲存 Portworx 配置和 meta 資料。
-
請決定是否要對您的「Portworx」磁碟區進行加密。 若要對您的儲存卷進行加密,您必須 設定一個 IBM Key Protect 或 Hyper Protect Crypto Services 實例,並將您的服務資訊儲存於 Kubernetes 機密中。
-
確保已將映像檔取回密碼從
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 meta 資料鍵值儲存庫 下拉清單中,選擇要用來儲存 Portworx meta 資料的鍵值儲存庫類型。 選取 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-schedulerPod 時,安裝即成功。 Pod 的數量等於您 Portworx 叢集中的工作節點數量。 所有 Pod 都必須處於Running狀況。
oc get pods -n kube-system | grep 'portworx\|stork' ``` 輸出範例 ```sh {: screen} 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 叢集的狀態。 ```sh {: pre} oc exec <portworx_pod> -it -n kube-system -- /opt/pwx/bin/pxctl status ``` 輸出範例 ```sh {: screen} 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 儲存空間層中的所有工作者節點是否都包含在內。 `Yes` 位於儲存層的工作節點,會在 **StorageNode** 欄位中顯示為「xml-ph-0000@deepl.internal」。 由於 Portworx 會以 DaemonSet 的形式在您的叢集上運行,當您部署 Portworx 時,系統會自動檢查現有工作節點是否具備原始區塊儲存裝置,並將其加入 Portworx 資料層。 若您向叢集新增工作節點,並在這些工作節點上添加原始區塊儲存裝置,請重新啟動新增工作節點上的 Portworx Pod,以便 DaemonSet 能偵測到您的儲存卷。 {: note} 4. 檢閱 CLI 輸出之 **Cluster Summary** 區段中的 **Capacity** 直欄,以驗證列出的每個儲存空間節點都具有正確的原始區塊儲存空間數量。 5. 檢閱已指派給屬於 Portworx 叢集之磁碟的 Portworx I/O 分類。 設定 Portworx 叢集期間,會檢查每個磁碟,以判定裝置的效能設定檔。 設定檔分類取決於工作者節點所連接網路的速度,以及您擁有的儲存裝置類型。 SDS 工作者節點的磁碟會分類為 `high`。 若您手動將磁碟掛載至虛擬工作節點,由於虛擬工作節點的網路速度較慢,這些磁碟將被歸類為「`low`」。 ```sh {: pre} oc exec -it <portworx_pod> -n kube-system -- /opt/pwx/bin/pxctl cluster provision-status ``` 輸出範例 ```sh {: screen} 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 會失敗。 {: note} `parameters.secure` : 指定是否要使用 IBM Key Protect 對磁區中的資料進行加密。 請從下列選項中進行選擇。 - `true`: 輸入 `true`,以啟用 Portworx 磁區的加密功能。 若要加密磁區,您必須具有 IBM Key Protect 服務實例以及保留客戶根金鑰的 Kubernetes 密碼。 如需如何設定 Portworx 磁區加密的相關資訊,請參閱[加密 Portworx 磁區](/docs/openshift?topic=openshift-storage_portworx_encryption)。 - `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 建立仍會成功。 您的資料會同時抄寫至高速及低速磁碟。 `parameters.shared` : 定義是否要容許多個 Pod 存取相同磁區。 請從下列選項中進行選擇: - 正確:若將此選項設定為「`true`」,則可讓分佈於不同區域工作節點上的多個 Pod 存取同一個卷。 - 錯誤:若將此選項設定為「`false`」,您僅能在以下情況下從多個 Pod 存取該卷:這些 Pod 必須部署在已掛載該卷所對應實體磁碟的工作節點上。 如果您的 Pod 部署在不同的工作節點上,該 Pod 將無法存取該卷。 2. 建立儲存空間類別。 ```sh {: pre} oc apply -f storageclass.yaml ``` 3. 驗證已建立儲存空間類別。 ```sh {: pre} 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」存取模式](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes){: external}。 `resources.requests.storage` : 輸入您要從 Portworx 叢集指派的儲存空間數量(以 GB 為單位)。 例如,若要從 Portworx 叢集指派 2 GB,請輸入 `2Gi`。 您可指定的儲存空間數量受限於 Portworx 叢集裡可用的儲存空間數量。 若您在儲存類別中指定的複製因子大於 1,則您在 PVC 中指定的儲存空間將預留於多個工作節點上。 `spec.storageClassName` : 輸入您先前選擇或建立的儲存空間類別名稱,以及您要用來佈建 PV 的儲存空間類別名稱。 此範例 YAML 檔案使用 `portworx-shared-sc` 儲存類別。 2. 建立您的 PVC。 ```sh {: pre} oc apply -f pvc.yaml ``` 3. 驗證已建立您的 PVC,並且已連結至持續性磁區 (PV)。 此處理程序可能需要幾分鐘的時間。 ```sh {: pre} oc get pvc ```
將磁區裝載到應用程式
若要從應用程式存取儲存空間,您必須將 PVC 裝載至應用程式。
-
為裝載 PVC 的部署建立一個配置檔。
有關如何使用
Portworx部署具狀態集的提示,請參閱 StatefulSets。 Portworx 的文件還包含以下部署範例:- 將 Cassandra 與 Kibana 一起部署- Kafka 將 ElasticSearch 與 Kibana 一起部署- 將 WordPress 與 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 使用者身分存取儲存空間,請在部署的 YAML 檔案中,於
fsGroup區段中指定 Pod 的安全性上下文 ,並定義您要授予存取權限的使用者群組。 如需更多資訊,請參閱 《 以非 root 使用者身分存取 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 ``` 2. 導覽至您在應用程式部署中定義的磁區裝載路徑。 3. 建立文字檔。 ```sh {: pre} echo "This is a test" > test.txt ``` 4. 讀取您所建立的檔案。 ```sh {: pre} cat test.txt ```