管理 Kubernetes 上的臨時儲存

Kubernetes Pod 需要臨時 (暫時) 本機儲存體。

Kubernetes Pod 使用臨時儲存空間、快取和日誌。此儲存是暫時儲存的,專屬於 Pod 的生命週期。Pod 不會共用臨時儲存,而且會在 Pod 刪除時離開。

如需有關 Kubernetes 臨時儲存的更多一般資訊,請參閱 Kubernetes 文件中的本機臨時儲存

下列步驟適用於 Oracle Kubernetes 引擎,但概念在其他 Kubernetes 環境中類似。

在節點集區中,節點會使用其開機磁碟區作為 Pod 儲存體。由於映像檔儲存在 /var 目錄中,因此大部分的臨時儲存體會被根分割區中的映像檔佔用。開機磁碟區所需的空間會在您每次安裝 Oracle Blockchain Platform Enterprise Edition 執行處理並在該節點上建立鏈碼時增加。

您可以使用下列 kubelet API 呼叫來檢查臨時儲存總計,以及指定節點中指派給每個 Pod 的數量:
kubectl get --raw "/api/v1/nodes/<node IP>/proxy/stats/summary"
JSON 結果的 rootfsfs 區段會顯示容量和可用的位元組。

您可以在節點執行時調整開機磁碟區的大小,以更新臨時儲存的數量。如需詳細資訊,請參閱 Oracle Kubernetes Engine 的更新節點集區

完成下列步驟,以重新調整 Oracle Kubernetes 引擎叢集上與執行中節點的臨時儲存大小。
  1. 在 Oracle Kubernetes 引擎叢集的資源底下,選取節點集區
  2. 按一下編輯。在編輯節點集區頁面中,選取指定自訂開機磁碟區大小,然後以 GB 輸入開機磁碟區大小值。任何已建立的節點都將使用此值作為臨時儲存。
  3. 針對節點集區中的每個工作節點,完成下列步驟以調整開機磁碟區的大小。
    1. 按一下節點旁的向下箭號,即可查看節點的詳細資訊。
    2. 瀏覽至節點的開機磁碟區,然後按一下編輯
    3. 磁碟區大小和效能底下的編輯磁碟區頁面中,以 GB 為單位指定磁碟區大小值,然後按一下儲存變更
  4. 請完成下列步驟以設定堡壘主機階段作業,然後使用它連線至專用工作節點。
    1. 在執行處理詳細資訊頁面上,按一下 Oracle Cloud 代理程式頁籤,然後啟用堡壘主機 Plugin。
    2. 在搜尋列中搜尋堡壘主機,然後按一下結果中「服務」底下的堡壘主機識別與安全
    3. 按一下建立堡壘主機
    4. 建立堡壘主機頁面上,針對目標虛擬雲端網路 (VCN) 指定 Oracle Kubernetes 引擎 VCN,後面接著叢集名稱。若為目標子網路,請指定 Kubernetes API 端點。針對 CIDR 區塊允許清單,輸入 0.0.0.0/0 ,然後按一下建立堡壘主機
    5. 按一下堡壘主機以開啟它,然後按一下建立階段作業
    6. 輸入 opc 作為使用者名稱值,然後從運算執行處理清單中選取您的節點。
    7. 請將您的 SSH 金鑰貼到新增 SSH 金鑰底下。
    8. 按一下顯示進階選項,然後從目標運算執行處理 IP 位址清單中選取節點或執行處理的 IP 位址。這是節點或執行處理的專用 IPv4 位址,可在執行處理的資訊區段中使用。
    9. 按一下建立階段作業 (Create session)
    10. 從階段作業的相關內容功能表中,按一下複製 SSH 命令
    11. 您現在可以使用 SSH 命令中的 -i 參數提供私密金鑰,透過 SSH 登入節點。
    12. 請針對叢集中的每個工作節點,重複先前的步驟。
  5. 針對每個節點,透過 SSH 登入節點,然後執行下列命令 (掃描新增到執行處理或節點的新區塊儲存裝置),然後在儲存可用時展開檔案系統。
    sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
    echo "1" | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2`/device/rescan
    sudo /usr/libexec/oci-growfs -y

決定暫時儲存用量

您可以執行下列命令檔,查看在 Oracle Kubernetes 引擎上執行之執行處理的暫時儲存用量。此命令檔使用 Kubernetes API 擷取叢集中每個節點上執行之每個 Pod 的暫時儲存用量。

#!/usr/bin/env bash
  
kubectl proxy --append-server-path &
  
set -eo pipefail
  
{
    echo "NODE NAMESPACE POD EPHEMRAL_USED"
    for node in $(kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'); do
        curl -fsSL "http://127.0.0.1:8001/api/v1/nodes/$node/proxy/stats/summary" |
            yq '.pods[] | [.podRef.namespace, .podRef.name, .ephemeral-storage.usedBytes] | join(" ")' |
            while read -r namespace name usedBytes; do
                # A pod might have no running containers and consequently no ephemeral-storage usage.
                echo "$node" "$namespace" "$name" "$(numfmt --to iec "${usedBytes:-0}")"
            done
    done | sort -k4,4rh
} | column -t