編輯

共用方式為


修正在 AKS Arc 中管理記憶體時的已知問題和錯誤

使用本文可協助您針對 AKS Arc 中的記憶體相關問題進行疑難解答和解決。

設定永續性磁碟區宣告會導致錯誤:「無法初始化代理程式。 錯誤:mkdir /var/log/agent:許可權遭拒」

這個許可權遭拒的錯誤表示預設記憶體類別可能不適合您的工作負載,而且發生在 Kubernetes 1.19.x 版或更新版本上執行的 Linux 工作負載中。 遵循安全性最佳做法,許多 Linux 工作負載會指定 securityContext fsGroup Pod 的設定。 工作負載無法在 Azure 本機上的 AKS 上啟動,因為預設記憶體類別未指定 fstype (=ext4) 參數,因此 Kubernetes 無法根據 fsGroup 工作負載所要求的變更檔案和永續性磁碟區的擁有權。

若要解決此問題, 請定義可用來布建 PVC 的自定義儲存類別

容器記憶體介面 Pod 停滯在 'ContainerCreating' 狀態

新的 Kubernetes 工作負載叢集是使用 Kubernetes 1.16.10 版建立,然後更新為 1.16.15。 更新之後, csi-msk8scsi-node-9x47m Pod 會卡在 ContainerCreating 狀態中,而 kube-proxy-qqnkr Pod 會卡在 終止 狀態,如下列輸出所示:

Error: kubectl.exe get nodes  
NAME              STATUS     ROLES    AGE     VERSION 
moc-lf22jcmu045   Ready      <none>   5h40m   v1.16.15 
moc-lqjzhhsuo42   Ready      <none>   5h38m   v1.16.15 
moc-lwan4ro72he   NotReady   master   5h44m   v1.16.15

\kubectl.exe get pods -A 

NAMESPACE     NAME                        READY   STATUS              RESTARTS   AGE 
    5h38m 
kube-system   csi-msk8scsi-node-9x47m     0/3     ContainerCreating   0          5h44m 
kube-system   kube-proxy-qqnkr            1/1     Terminating         0          5h44m  

由於 kubelet 最終處於不良狀態,且無法再與 API 伺服器通訊,因此唯一的解決方案是重新啟動 kubelet 服務。 重新啟動之後,叢集會進入 執行 中狀態。

從損毀傾印記錄中填滿的磁碟記憶體

磁碟記憶體可以從所建立的損毀傾印記錄中填滿。 這是因為日內瓦代理程式用戶端憑證已經過期。 徵兆如下所示:

  • 服務無法啟動。
  • Kubernetes Pod、部署等因資源不足而無法啟動。

重要

此問題可能會影響 2023 年 4 月 18 日至 2023 年 3 月發行之後所建立的所有新水手管理和目標叢集節點。 此問題已在 2023-05-09 版和更新版本中修正。

此問題可能會影響任何涉及配置磁碟空間或寫入新檔案的作業,因此任何「磁碟空間/資源不足」錯誤都是很好的提示。 若要檢查此問題是否存在於指定的節點上,請執行下列殼層命令:

clouduser@moc-lwm2oudnskl $ sudo du -h /var/lib/systemd/coredump/

此命令會報告診斷檔案所耗用的儲存空間。

根本原因

用來向服務端點驗證日內瓦代理程式的客戶端憑證到期會導致代理程序當機,導致損毀傾印。 代理程式的當機/重試迴圈在初始啟動時大約為 5 秒,而且沒有逾時。 這表示節點文件系統每隔幾秒鐘就會建立一個新的檔案(約 330 MB),這可以快速取用磁碟記憶體。

風險降低

慣用的風險降低措施是升級至具有更新憑證的最新版本 1.10.18.10425 版。 若要這樣做,請先手動 將您的工作負載叢集 升級至任何 支援的次要版本, 再更新 Azure 本機主機。

如需 AKS Arc 版本的詳細資訊,以及 Azure 本機新聞上所有最新的 AKS,請訂閱 AKS 版本頁面

如果升級不是選項,您可以關閉 mdsd 服務。 針對每個 Mariner 節點:

  1. 使用下列殼層命令關閉日內瓦代理程式:

    sudo systemctl disable --now mdsd
    
  2. 確認日內瓦代理程式已成功停用:

    sudo systemctl status mdsd
    
  3. 使用下列命令刪除累積的檔案:

    sudo find /var/lib/systemd/coredump/ -type f -mmin +1 -exec rm -f {} \;
    sudo find /run/systemd/propagate -name 'systemd-coredump@*' -delete
    sudo journalctl --rotate && sudo journalctl --vacuum-size=500M
    
  4. 重新啟動節點:

    sudo reboot
    

記憶體 Pod 當機,記錄會指出 『createSubDir』 參數無效

如果您在部署中安裝了SMB或NFS CSI驅動程式,而且從舊版升級至May組建,就會發生錯誤。 不再接受其中一個稱為 createSubDir的參數。 如果這適用於您的部署,請遵循下列指示來解決記憶體類別失敗。

如果您遇到此錯誤,記憶體 Pod 會當機,且記錄指出 createSubDir 參數無效。

重新建立記憶體類別。

建立永續性磁碟區時,嘗試掛接磁碟區會失敗

在 AKS Arc 環境中刪除永續性磁碟區或永續性磁碟區宣告之後,會建立新的永續性磁碟區以對應至相同的共用。 不過,嘗試掛接磁碟區時,掛接會失敗,而 Pod 會因錯誤 NewSmbGlobalMapping failed而逾時。

若要解決掛接新磁碟區失敗的問題,您可以透過 SSH 連線到 Windows 節點並執行 Remove-SMBGlobalMapping 並提供對應至磁碟區的共用。 執行此命令之後,嘗試掛接磁碟區應該會成功。