管理 Kubernetes 上的臨時儲存

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

Kubernetes Pod 使用臨時儲存空間來清理空間、快取和日誌。此儲存體是暫時的,並且是 Pod 的週期專用。暫時儲存不會跨 Pod 共用,而會在 Pod 刪除時離開。

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

下列步驟適用於 Oracle Kubernetes Engine,但概念在其他 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 引擎的更新節點集區

完成下列步驟,以調整含有執行中節點之 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