協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
使用 kubectl 及 S3 擷取受管節點的節點日誌
了解如何為已安裝節點監控代理程式的 Amazon EKS 受管節點擷取節點記錄。
先決條件
請確認您已具備以項目:
-
現有已安裝節點監控代理程式的 Amazon EKS 叢集。如需詳細資訊,請參閱 啟用節點自動修復並調查節點運作狀態問題。
-
已安裝並設定為可與您叢集通訊的
kubectl命令列工具。 -
已安裝 AWS CLI 並以足夠許可登入,具備建立 S3 儲存貯體和物件的許可。
-
已安裝最新版本 Python 3
-
已安裝適用於 Python 3 的 AWS SDK (Boto 3)。
步驟 1:建立 S3 儲存貯體目的地 (選用)
若您還沒有 S3 儲存貯體來儲存日誌,請先建立一個。使用下列 AWS CLI 命令。儲存貯體預設為 private 存取控制清單。以您選擇的唯一儲存貯體名稱取代 bucket-name。
aws s3api create-bucket --bucketbucket-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 上傳記錄檔。您無法使用 AWS CLI 建立預先簽章的 S3 上傳 URL。
-
決定您要在儲存貯體中的哪個位置儲存日誌。例如,您可使用
2024-11-12/logs1.tar.gz作為金鑰。 -
將以下 Python 程式碼儲存到檔案
presign-upload.py。取代<bucket-name>與<key>。金鑰應以.tar.gz結尾。import boto3; print(boto3.client('s3').generate_presigned_url( ClientMethod='put_object', Params={'Bucket': '<bucket-name>', 'Key': '<key>'}, ExpiresIn=1000 )) -
使用以下命令執行指令碼
python presign-upload.py -
記錄 URL 輸出。在下一個步驟中將此值用作
http-put-destination。
如需詳細資訊,請參閱《AWS Boto3 Python SDK 文件》中的產生預先簽章的 URL 來上傳檔案
步驟 3:建立 NodeDiagnostic 資源
識別您要從中收集日誌的節點名稱。
建立 NodeDiagnostic 資訊清單,使用該節點名稱作為資源名稱,並提供 HTTP PUT URL 目的地。
apiVersion: eks.amazonaws.com/v1alpha1 kind: NodeDiagnostic metadata: name:node-namespec: 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./node-logs.tar.gz
步驟 5:清理 NodeDiagnostic 資源
-
NodeDiagnostic資源不會自動刪除。取得日誌成品後,您應自行清除這些項目
# Delete the NodeDiagnostic resource kubectl delete nodediagnostics.eks.amazonaws.com/node-name