使用 kubectl 及 S3 擷取受管節點的節點日誌 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 --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 上傳記錄檔。您無法使用 AWS CLI 建立預先簽章的 S3 上傳 URL。

  1. 決定您要在儲存貯體中的哪個位置儲存日誌。例如,您可使用 2024-11-12/logs1.tar.gz 作為金鑰。

  2. 將以下 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 ))
  3. 使用以下命令執行指令碼

    python presign-upload.py
  4. 記錄 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-name spec: logCapture: destination: http-put-destination

將清單檔案套用至叢集。

kubectl apply -f nodediagnostic.yaml

您可以透過描述 NodeDiagnostic 資源以檢查集合的狀態:

  • 狀態為 SuccessSuccessWithErrors 表示任務已完成,且日誌已上傳到提供的目的地 (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