在叢集裡安裝 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 支援頁面

開始之前:

若要安裝 Portworx,請執行下列動作:

  1. 從「IBM Cloud」目錄中開啟「Portworx」服務,並依下列方式填寫各欄位:

    1. 選取 Red Hat OpenShift on IBM Cloud 叢集所在的地區。

    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 meta 資料鍵值儲存庫 下拉清單中,選擇要用來儲存 Portworx meta 資料的鍵值儲存庫類型。 選取 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 狀況。
        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 卷。

  1. 列出叢集裡的可用儲存空間類別,並檢查是否可以使用在 Portworx 安裝期間設定的現有 Portworx 儲存空間類別。 預先定義的儲存空間類別已針對資料庫使用情況進行最佳化,並可跨 Pod 共用資料。

    oc get sc | grep portworx
    

    若要檢視儲存類別的詳細資訊,請執行 oc 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`
        :   輸入您要跨不同工作者節點儲存之資料的抄本數目。 容許的數字為 `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
        ```
    
  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」存取模式](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 裝載至應用程式。

  1. 為裝載 PVC 的部署建立一個配置檔。

    有關如何使用 Portworx 部署具狀態集的提示,請參閱 StatefulSets。 Portworx 的文件還包含以下部署範例:- 將 Cassandra 與 Kibana 一起部署- KafkaElasticSearch 與 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.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 使用者身分存取儲存空間,請在部署的 YAML 檔案中,於 fsGroup 區段中指定 Pod 的安全性上下文 ,並定義您要授予存取權限的使用者群組。 如需更多資訊,請參閱 《 以非 root 使用者身分存取 Portworx 卷宗 》。
    spec.containers.volumeMounts.mountPath
    容器內裝載磁區之目錄的絕對路徑。 若要讓不同應用程式共用同一個卷,您可以為每個應用程式指定 卷的子路徑
    spec.containers.volumeMounts.name
    要裝載至 Pod 之磁區的名稱。
    volumes.name
    要裝載至 Pod 之磁區的名稱。 通常,此名稱與 volumeMounts/name 相同。
    volumes.persistentVolumeClaim.claimName
    連結您要使用之 PV 的 PVC 名稱。
  2. 建立部署。

    oc apply -f deployment.yaml
    
  3. 驗證 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
    
  4. 驗證您可以將資料寫入至 Portworx 叢集。

    1. 登入可裝載 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
        ```