使用專用永久磁碟做為暫時性磁碟區


本頁說明如何在 Google Kubernetes Engine (GKE) 工作負載中使用外部儲存空間硬體 (例如 Compute Engine 永久磁碟) 做為暫時性磁碟區。您應該已熟悉 Kubernetes VolumeStorageClasses

何時在 Kubernetes 中使用暫存空間

如果工作負載只需要在應用程式生命週期內使用資料,例如資料處理管道、機器學習工作、批次處理、本機快取或分析,就適合使用暫時性儲存空間。根據預設,GKE 節點開機磁碟的一部分可用於 Pod 中的臨時儲存空間。這種做法通常需要審慎規劃空間。

Kubernetes 一般暫時性磁碟區可讓您使用 PersistentVolumeClaim,明確要求 Pod 的暫時性儲存空間。GKE 會動態佈建 Compute Engine 永久磁碟,並將磁碟附加至節點。這類臨時儲存空間適用於下列情況:

  • 您的工作負載對效能有高度要求,因此需要控管儲存空間硬體。
  • 您需要短期、容器專用的暫存空間。
  • 您想避免使用 emptyDir 佈建臨時儲存空間。emptyDir 在您希望多個容器共用暫時性儲存空間中的資料時,磁碟區仍相當實用。
  • 您需要的暫時性儲存空間容量超過 GKE 內建預設值。
  • 您不想預先為 Standard 模式 GKE 叢集規劃節點開機磁碟大小和類型。

GKE 中的臨時儲存空間類型

一般來說,您可以使用開機磁碟儲存空間容量或專用永久磁碟,做為 Pod 和容器中的暫時性儲存空間。下表說明兩者的差異:

儲存空間類型 使用方法 說明
開機磁碟 - 永久磁碟

在 Pod 規格中使用 emptyDir 掛接磁碟區,並要求所需容量。

如需操作說明,請參閱「建立磁碟區」。

要求的臨時儲存空間取自節點開機磁碟的保留部分。Autopilot 和 Standard 叢集預設都會啟用這項功能。

如果 Pod 要求的臨時儲存空間較小,或是您想在 Pod 中的多個容器之間共用臨時資料,就很適合使用這項功能。

Autopilot

  • 要求大小必須介於 10 MiB 至 10 GiB 之間。
  • 儲存空間硬體類型已預先設定。

標準

沒有大小限制,但需要審慎規劃節點開機磁碟大小和儲存硬體類型。

如要瞭解 GKE 如何計算節點開機磁碟中的臨時儲存空間預留量,請參閱本機臨時儲存空間預留量

本機固態硬碟磁碟
  1. 建立節點集區,並連接本機 SSD 磁碟和相容的機器系列。
  2. 使用 emptyDir 掛接具有必要容量的磁碟區。
  3. 使用 nodeSelector 將 Pod 放置在已連結本機 SSD 磁碟的節點上。

如需操作說明,請參閱「使用本機 SSD 佈建暫時性儲存空間」。

本機 SSD 磁碟使用固定的 375 GB 增量,支援標準模式 GKE 叢集,以及執行 A100 (80 GB) GPU 的 Autopilot 節點。

需要高處理量的臨時儲存空間時,請使用本機 SSD。

詳情請參閱「關於 GKE 的本機 SSD」。

專屬永久磁碟
  1. 視需要為硬體建立 Kubernetes StorageClass。
  2. 在 Pod 規格中,使用 ephemeral 磁碟區類型掛接磁碟區。

本文說明如何要求這類暫時性儲存空間。

Google Cloud 動態佈建所要求的外部硬體、將其附加至節點,並將所要求的磁碟區掛接至 Pod。

當 Pod 有大量臨時儲存空間要求,或您想控管基礎永久磁碟類型時,請使用這項功能。這些磁碟區具有下列屬性:

  • 在 Autopilot 模式和 Standard 模式中,最多可達 64 TiB。
  • Pod 暫存空間要求最多可達 64 TiB。
  • 支援採用 SSD 的磁碟區等專用硬體。
  • 網路附加儲存裝置。
  • 使用 Kubernetes Volume 取得儲存空間,而不是使用 emptyDir 共用節點開機磁碟。

如要進一步瞭解這類暫時磁碟區,請參閱「一般暫時磁碟區」。

定價

如本指南所述,透過一般暫時性磁碟區佈建的儲存空間會依據 Compute Engine 磁碟定價計費。

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。
  • 確認您有執行 1.23 以上版本的 GKE Autopilot 或 Standard 叢集。
  • 請確認專案 Google Cloud 有足夠的配額,可供儲存硬體使用。如要管理配額,請參閱查看專案的配額

建立 StorageClass

建立自訂 Kubernetes StorageClass 時,您可以根據價格和效能需求,指定要佈建的儲存空間類型。這是選用步驟,但建議執行。如要使用 GKE 預設的 StorageClass (採用 pd-balanced 永久磁碟類型),請略過這個步驟。

  1. 將下列資訊清單儲存為 ephemeral-pd-class.yaml

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ephemeral-ssd
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: STORAGE_TYPE
    

    STORAGE_TYPE 替換成您想要的永久磁碟類型名稱,例如 pd-ssd。如需支援的類型清單,請參閱 Compute Engine 說明文件中的「永久磁碟類型」。

  2. 建立 StorageClass:

    kubectl create -f ephemeral-pd-class.yaml
    

在 Pod 中要求暫存儲存空間容量

如要佈建、連結及使用外部硬體做為暫時性儲存空間,請將相應的磁碟區新增至 Pod 資訊清單,並將磁碟區掛接項目新增至容器規格。

  1. 將下列資訊清單儲存為 ephemeral-ssd-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ephemeral-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          storage: ephemeral
      template:
        metadata:
          labels:
            storage: ephemeral
        spec:
          containers:
          - name: ephemeral-container
            image: nginx
            resources:
              requests:
                cpu: 500m
                memory: 2Gi
                ephemeral-storage: 2Gi
            volumeMounts:
            - mountPath: "/short-term"
              name: ephemeral-volume
          volumes:
          - name: ephemeral-volume
            ephemeral:
              volumeClaimTemplate:
                metadata:
                  labels:
                    type: ephemeral
                spec:
                  accessModes: ["ReadWriteOnce"]
                  storageClassName: "ephemeral-ssd"
                  resources:
                    requests:
                      storage: 1Ti
    

    這份資訊清單會建立新的 Kubernetes PersistentVolumeClaim,要求名為 ephemeral-volume 的新 PersistentVolume,並具備下列屬性:

    • spec.volumes.ephemeralephemeral 磁碟區類型。
    • .spec.accessModes磁碟區存取模式,可決定 Pod 的讀取/寫入存取權,以及節點間的磁碟區共用情形。本範例使用 ReadWriteOnce,將 PersistentVolume 掛接到單一節點,供節點上的一或多個 Pod 存取。詳情請參閱「存取模式」。
    • .spec.storageClassName(選用) 您建立的 StorageClass 名稱。如果省略這個欄位,GKE 會使用預設的 StorageClass,並佈建 pd-balanced 永久磁碟。
    • .spec.resources.requests.storage所需的儲存空間容量。
  2. 建立 Deployment:

    kubectl create -f ephemeral-ssd-deployment.yaml
    

GKE 會佈建符合 PersistentVolumeClaim 需求的 Compute Engine 磁碟,並將磁碟附加至節點。GKE 會將磁碟區掛接到 Pod,並為容器提供要求的容量。

確認 GKE 已掛接暫時磁碟區

  1. 在 Pod 中建立殼層工作階段:

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. 檢查已掛接的磁碟區:

    df -h

    輸出結果會與下列內容相似:

    Filesystem                Size      Used Available Use% Mounted on
    ...
    /dev/sdb               1006.9G     28.0K   1006.8G   0% /short-term
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hosts
    /dev/sda1                94.3G      3.6G     90.6G   4% /dev/termination-log
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hostname
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/resolv.conf
    ...
    
  3. 結束殼層工作階段:

    exit
    

後續步驟