Kubectl

使用流程

  1. 下載Kubectl :winget install -e --id Kubernetes.kubectl
  2. 使用Az login 登入帳號
  3. 獲取權限 az aks get-credentials --resource-group <ResourceGroupName> --name <AKSClusterName>
  4. 驗證您是否已成功連接到 AKS 叢集: kubectl get nodes

Copilot

要查看 Kubernetes 叢集中的所有命名空間,您可以使用以下 kubectl 命令:

kubectl get namespaces

這將列出叢集中的所有命名空間及其狀態。

如果您只想查看特定命名空間的詳細信息,可以使用以下命令:

kubectl describe namespace <namespace-name>
  1. 使用 Azure CLI 查找资源组中的 Kubernetes 资源
  2. 首先,确保你已登录到 Azure CLI:

    az login
    
  3. 列出所有资源组:

    az group list --output table
    
  4. 查找特定资源组中的资源:

    az resource list --resource-group <resource-group-name> --output table
    
  5. 使用 kubectl 管理 Kubernetes 资源

  6. 获取 Kubernetes 集群的凭据:

    az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name>
    
  7. 然后你可以使用 kubectl 命令来管理集群中的资源。例如,查看所有 Pods:

    kubectl get pods -n <namespace>
    

Copilot thread dump

當你使用 kubectl 來查找和分析 thread dump 時,以下是更詳細的步驟和說明,幫助你查找 thread 異常:

  1. 列出 POD:

    kubectl get pods -n service
    
    這個命令會列出指定 namespace (service) 中的所有 POD。確認你要進入的 POD 名稱。

  2. 進入 POD:

    kubectl exec -it <pod-name> -n service sh
    
    使用 kubectl exec 進入指定的 POD,這裡 <pod-name> 是你在上一步中找到的 POD 名稱。-it 參數允許你進入交互式 shell。

  3. 生成 thread dump:

    jstack 1 >> thread.txt
    
    在 POD 中執行 jstack 命令來生成 thread dump,並將輸出重定向到 thread.txt 文件中。1 是 Java 進程的 PID,通常在容器中只有一個 Java 進程。

  4. 回到本機端:

    exit
    
    使用 exit 命令退出 POD 的 shell,回到本機端。

  5. 複製 thread dump 文件:

    kubectl cp <pod-name>:thread.txt -n service ./thread.txt --retries=-1
    
    使用 kubectl cp 命令將 POD 中的 thread.txt 文件複製到本地機器。這裡 <pod-name> 是 POD 的名稱,/path/to/thread.txt 是文件在 POD 中的路徑。

查找 thread 異常

  1. 打開 thread dump 文件: 使用文本編輯器(如 VS Code、Notepad++)打開 thread.txt 文件。

  2. 查找關鍵字:

    • "BLOCKED": 表示 thread 被鎖住,可能是死鎖的跡象。
    • "WAITING""TIMED_WAITING": 表示 thread 在等待某個條件或超時。
    • "RUNNABLE": 表示 thread 正在執行或準備執行。
  3. 分析 stack trace:

    • 查看每個 thread 的 stack trace,找出長時間運行的 thread 或重複出現的調用。
    • 特別注意那些涉及同步代碼塊或鎖的部分,這些地方最容易出現死鎖或性能瓶頸。
  4. 使用工具:

    • Thread Dump Analyzer: 有一些工具可以幫助分析 thread dump,例如 Eclipse MAT、VisualVM 等。
    • 線上分析工具: 有一些線上工具可以上傳 thread dump 文件並自動分析,例如 FastThread。

Copilot memory dump

查找和分析 memory dump 需要一些額外的步驟和工具。以下是詳細的步驟說明:

生成 Memory Dump

  1. 列出 POD:

    kubectl get pods -n service
    

    列出指定 namespace (service) 中的所有 POD。

  2. 進入 POD:

    kubectl exec -it <pod-name> -n service sh
    

    進入指定的 POD。

  3. 生成 Memory Dump: 使用 jmap 工具來生成 memory dump。假設 Java 進程的 PID 是 1,可以使用以下命令:

    jmap -dump:live,format=b,file=heapdump.hprof 1
    

    這個命令會生成一個名為 heapdump.hprof 的文件,包含當前 Java 進程的 memory dump。

  4. 回到本機端:

    exit
    

    使用 exit 命令退出 POD 的 shell。

  5. 複製 Memory Dump 文件:

    kubectl cp service:<pod-name>:/path/to/heapdump.hprof -n service ./heapdump.hprof
    

    使用 kubectl cp 命令將 POD 中的 heapdump.hprof 文件複製到本地機器。

分析 Memory Dump

  1. 使用分析工具:

    • Eclipse MAT (Memory Analyzer Tool): 一個強大的工具,用於分析 Java heap dump。可以下載並安裝 Eclipse MAT
    • VisualVM: 另一個流行的工具,可以用來分析 heap dump。可以下載並安裝 VisualVM
  2. 打開 Memory Dump 文件: 使用上述工具中的一個打開 heapdump.hprof 文件。

  3. 查找異常:

    • 內存泄漏: 查看哪些對象佔用了大量內存,並檢查是否有不必要的對象長時間存在。
    • GC Roots: 分析 GC Roots,找出哪些對象無法被垃圾回收。
    • Dominators: 使用 Dominator Tree 分析,找出內存佔用最多的對象。
  4. 生成報告: 工具通常會生成詳細的報告,幫助你理解內存使用情況和潛在的問題。

AKS 上下文

  1. 檢查當前上下文: 使用以下命令來查看當前的 Kubernetes 上下文:
kubectl config current-context

這將顯示當前使用的 Kubernetes 群集的名稱。

  1. 列出所有上下文: 使用以下命令來列出所有可用的 Kubernetes 上下文:
kubectl config get-contexts

這將顯示所有配置的上下文及其相關信息,包括當前使用的上下文。

  1. 切換上下文

如果需要切換到不同的 AKS 群集,可以使用以下命令:

kubectl config use-context <context-name>

<context-name> 替換為你想切換到的上下文名稱。