Kubectl
使用流程
- 下載Kubectl :winget install -e --id Kubernetes.kubectl
- 使用Az login 登入帳號
- 獲取權限 az aks get-credentials --resource-group
<ResourceGroupName>--name<AKSClusterName> - 驗證您是否已成功連接到 AKS 叢集: kubectl get nodes
Copilot
要查看 Kubernetes 叢集中的所有命名空間,您可以使用以下 kubectl 命令:
kubectl get namespaces
這將列出叢集中的所有命名空間及其狀態。
如果您只想查看特定命名空間的詳細信息,可以使用以下命令:
kubectl describe namespace <namespace-name>
- 使用 Azure CLI 查找资源组中的 Kubernetes 资源:
-
首先,确保你已登录到 Azure CLI:
az login -
列出所有资源组:
az group list --output table -
查找特定资源组中的资源:
az resource list --resource-group <resource-group-name> --output table -
使用
kubectl管理 Kubernetes 资源: -
获取 Kubernetes 集群的凭据:
az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name> -
然后你可以使用
kubectl命令来管理集群中的资源。例如,查看所有 Pods:kubectl get pods -n <namespace>
Copilot thread dump
當你使用 kubectl 來查找和分析 thread dump 時,以下是更詳細的步驟和說明,幫助你查找 thread 異常:
-
列出 POD:
這個命令會列出指定 namespace (kubectl get pods -n serviceservice) 中的所有 POD。確認你要進入的 POD 名稱。 -
進入 POD:
使用kubectl exec -it <pod-name> -n service shkubectl exec進入指定的 POD,這裡<pod-name>是你在上一步中找到的 POD 名稱。-it參數允許你進入交互式 shell。 -
生成 thread dump:
在 POD 中執行jstack 1 >> thread.txtjstack命令來生成 thread dump,並將輸出重定向到thread.txt文件中。1是 Java 進程的 PID,通常在容器中只有一個 Java 進程。 -
回到本機端:
使用exitexit命令退出 POD 的 shell,回到本機端。 -
複製 thread dump 文件:
使用kubectl cp <pod-name>:thread.txt -n service ./thread.txt --retries=-1kubectl cp命令將 POD 中的thread.txt文件複製到本地機器。這裡<pod-name>是 POD 的名稱,/path/to/thread.txt是文件在 POD 中的路徑。
查找 thread 異常
-
打開 thread dump 文件: 使用文本編輯器(如 VS Code、Notepad++)打開
thread.txt文件。 -
查找關鍵字:
- "BLOCKED": 表示 thread 被鎖住,可能是死鎖的跡象。
- "WAITING" 或 "TIMED_WAITING": 表示 thread 在等待某個條件或超時。
- "RUNNABLE": 表示 thread 正在執行或準備執行。
-
分析 stack trace:
- 查看每個 thread 的 stack trace,找出長時間運行的 thread 或重複出現的調用。
- 特別注意那些涉及同步代碼塊或鎖的部分,這些地方最容易出現死鎖或性能瓶頸。
-
使用工具:
- Thread Dump Analyzer: 有一些工具可以幫助分析 thread dump,例如 Eclipse MAT、VisualVM 等。
- 線上分析工具: 有一些線上工具可以上傳 thread dump 文件並自動分析,例如 FastThread。
Copilot memory dump
查找和分析 memory dump 需要一些額外的步驟和工具。以下是詳細的步驟說明:
生成 Memory Dump
-
列出 POD:
kubectl get pods -n service列出指定 namespace (
service) 中的所有 POD。 -
進入 POD:
kubectl exec -it <pod-name> -n service sh進入指定的 POD。
-
生成 Memory Dump: 使用
jmap工具來生成 memory dump。假設 Java 進程的 PID 是1,可以使用以下命令:jmap -dump:live,format=b,file=heapdump.hprof 1這個命令會生成一個名為
heapdump.hprof的文件,包含當前 Java 進程的 memory dump。 -
回到本機端:
exit使用
exit命令退出 POD 的 shell。 -
複製 Memory Dump 文件:
kubectl cp service:<pod-name>:/path/to/heapdump.hprof -n service ./heapdump.hprof使用
kubectl cp命令將 POD 中的heapdump.hprof文件複製到本地機器。
分析 Memory Dump
-
使用分析工具:
- Eclipse MAT (Memory Analyzer Tool): 一個強大的工具,用於分析 Java heap dump。可以下載並安裝 Eclipse MAT。
- VisualVM: 另一個流行的工具,可以用來分析 heap dump。可以下載並安裝 VisualVM。
-
打開 Memory Dump 文件: 使用上述工具中的一個打開
heapdump.hprof文件。 -
查找異常:
- 內存泄漏: 查看哪些對象佔用了大量內存,並檢查是否有不必要的對象長時間存在。
- GC Roots: 分析 GC Roots,找出哪些對象無法被垃圾回收。
- Dominators: 使用 Dominator Tree 分析,找出內存佔用最多的對象。
-
生成報告: 工具通常會生成詳細的報告,幫助你理解內存使用情況和潛在的問題。
AKS 上下文
- 檢查當前上下文: 使用以下命令來查看當前的 Kubernetes 上下文:
kubectl config current-context
這將顯示當前使用的 Kubernetes 群集的名稱。
- 列出所有上下文: 使用以下命令來列出所有可用的 Kubernetes 上下文:
kubectl config get-contexts
這將顯示所有配置的上下文及其相關信息,包括當前使用的上下文。
- 切換上下文:
如果需要切換到不同的 AKS 群集,可以使用以下命令:
kubectl config use-context <context-name>
將 <context-name> 替換為你想切換到的上下文名稱。