協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 kubectl 及 S3 擷取受管節點的節點日誌
了解如何為已安裝節點監控代理程式的 Amazon EKS 受管節點擷取節點記錄。
先決條件
請確認您已具備以項目:
-
現有已安裝節點監控代理程式的 Amazon EKS 叢集。如需詳細資訊,請參閱啟用節點自動修復並調查節點運作狀態問題。
-
已安裝並設定為可與您叢集通訊的
kubectl命令列工具。 -
安裝並登入 AWS 的 CLI 具有足夠的許可來建立 S3 儲存貯體和物件。
-
已安裝最新版本 Python 3
-
已安裝適用於 Python 3、Boto 3 的 AWS SDK。
步驟 1:建立 S3 儲存貯體目的地 (選用)
若您還沒有 S3 儲存貯體來儲存日誌,請先建立一個。使用下列 AWS CLI 命令。儲存貯體預設為 private 存取控制清單。以您選擇的唯一儲存貯體名稱取代 bucket-name。
aws s3api create-bucket --bucket<bucket-name>
步驟 2:建立用於 HTTP Put 的預先簽章 S3 URL
Amazon EKS 透過對您指定的 URL 執行 HTTP PUT 操作來回傳節點記錄。在本教學中,我們將產生一個預先簽章的 S3 HTTP PUT URL。
日誌會以 gzip 壓縮的 tar 檔 (副檔名為 .tar.gz) 形式傳回。
注意
您必須使用 AWS API 或 SDK 來建立預先簽章的 S3 上傳 URL,以供 EKS 上傳日誌檔案。您無法使用 CLI 建立預先簽章的 S3 AWS 上傳 URL。
-
決定您要在儲存貯體中的哪個位置儲存日誌。例如,您可以使用
2024-11-12/logs1.tar.gz做為金鑰。 -
將下列 Python 程式碼儲存至檔案 https://
presign-upload.py。取代<bucket-name>和<key>。金鑰應以.tar.gz結尾。import boto3; print(boto3.client('s3').generate_presigned_url( ClientMethod='put_object', Params={'Bucket': '[.replaceable]`<bucket-name>`', 'Key': '[.replaceable]`<key>`'}, ExpiresIn=[.replaceable]`1000` )) -
使用以下命令執行指令碼
python presign-upload.py -
記錄 URL 輸出。在下一個步驟中將此值用作
http-put-destination。
如需詳細資訊,請參閱在適用於 Python 文件的Boto3 開發套件中產生預先簽章的 URL 以上傳檔案
步驟 3:建立 NodeDiagnostic 資源
識別您要從中收集日誌的節點名稱。
建立 NodeDiagnostic 資訊清單,使用該節點名稱作為資源名稱,並提供 HTTP PUT URL 目的地。
apiVersion: eks.amazonaws.com/v1alpha1 kind: NodeDiagnostic metadata: name:<node-name>spec: logCapture: destination:http-put-destination
將清單檔案套用至叢集。
kubectl apply -f nodediagnostic.yaml
您可以透過描述 NodeDiagnostic 資源以檢查集合的狀態:
-
狀態為
Success或SuccessWithErrors表示任務已完成,且日誌已上傳到提供的目的地 (SuccessWithErrors表示可能缺少部分日誌) -
如果狀態為「失敗」,請確認上傳 URL 格式正確且未過期。
kubectl describe nodediagnostics.eks.amazonaws.com/<node-name>
步驟 4:從 S3 下載日誌
請等待大約一分鐘再嘗試下載日誌。然後使用 S3 CLI 下載日誌。
# Once NodeDiagnostic shows Success status, download the logs aws s3 cp s3://<bucket-name>/key./<path-to-node-logs>.tar.gz
步驟 5:清理 NodeDiagnostic 資源
-
NodeDiagnostic資源不會自動刪除。取得日誌成品後,您應自行清除這些項目
# Delete the NodeDiagnostic resource kubectl delete nodediagnostics.eks.amazonaws.com/<node-name>