常见问题解答:PilotGo-plugin-llmops使用过程中的15个高频问题
常见问题解答:PilotGo-plugin-llmops使用过程中的15个高频问题
【免费下载链接】PilotGo-plugin-llmopsLLM-assisted cluster fault analysis, inspection, and operation and maintenance management.项目地址: https://gitcode.com/openeuler/PilotGo-plugin-llmops
前往项目官网免费下载:https://ar.openeuler.org/ar/
PilotGo-plugin-llmops是一款基于LLM的集群故障分析、检查和运维管理工具,旨在帮助用户更高效地进行多集群Kubernetes日常运维与交付。本文整理了用户在使用过程中最常遇到的15个问题,并提供详细解决方案。
一、环境配置相关问题
1. 如何正确设置KUBECONFIG环境变量?
KUBECONFIG环境变量用于指定kubectl读取的kubeconfig文件路径,支持多个文件以冒号/分号分隔,是跨平台通用的配置方式。
Linux/macOS系统:
# 查看当前配置 export KUBECONFIG=/path/to/config # 合并多个kubeconfig文件 export KUBECONFIG="~/.kube/config:~/.kube/another-config" # 验证配置生效 kubectl config get-contexts kubectl config current-contextWindows系统(PowerShell):
# 设置KUBECONFIG环境变量 $env:KUBECONFIG="C:\Users\YourName\.kube\config" # 验证配置生效 kubectl config get-contexts注意:设置KUBECONFIG后,kubectl会优先使用此环境变量指定的配置文件,而非默认的~/.kube/config。
2. 多集群环境下如何避免操作错误?
推荐固定流程(先确认,再执行):
# 1) 列出所有集群context kubectl config get-contexts # 2) 查看当前context(必须确认) kubectl config current-context # 3) 针对目标操作,显式指定--context(多集群强烈建议) kubectl --context <ctx> get ns如果用户没有给出context,必须先通过问题/线索推断或要求提供(至少给出候选列表与风险提醒),再进入后续步骤。
二、安装部署相关问题
3. Linux平台如何安装kubelet/kubeadm/kubectl?
方法一:使用官方源安装(推荐)
Ubuntu/Debian系统:
# 更新apt并安装依赖 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gpg # 添加Kubernetes官方仓库 mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装kubelet kubeadm kubectl sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 启动kubelet sudo systemctl enable --now kubeletCentOS/RHEL/Rocky Linux系统:
# 添加Kubernetes官方仓库 sudo cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key EOF # 安装kubelet kubeadm kubectl sudo yum install -y kubelet kubeadm kubectl # 启动kubelet sudo systemctl enable --now kubelet4. Windows平台如何安装kubelet?
准备工作:
# 创建Kubernetes目录 mkdir C:\k mkdir C:\etc\kubernetes mkdir C:\var\lib\kubelet mkdir C:\var\log\kubelet下载并安装kubelet:
# 下载kubelet二进制文件(以v1.29.0为例) $version = "v1.29.0" $kubeletUrl = "https://dl.k8s.io/release/$version/bin/windows/amd64/kubelet.exe" $kubeadmUrl = "https://dl.k8s.io/release/$version/bin/windows/amd64/kubeadm.exe" $kubectlUrl = "https://dl.k8s.io/release/$version/bin/windows/amd64/kubectl.exe" # 下载到C:\k目录 Invoke-WebRequest -Uri $kubeletUrl -OutFile C:\k\kubelet.exe Invoke-WebRequest -Uri $kubeadmUrl -OutFile C:\k\kubeadm.exe Invoke-WebRequest -Uri $kubectlUrl -OutFile C:\k\kubectl.exe # 添加到系统PATH [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)配置kubelet服务:
# 下载nssm(Non-Sucking Service Manager)用于创建Windows服务 $nssmUrl = "https://nssm.cc/release/nssm-2.24.zip" Invoke-WebRequest -Uri $nssmUrl -OutFile C:\k\nssm.zip Expand-Archive C:\k\nssm.zip -DestinationPath C:\k\ # 创建kubelet服务 C:\k\nssm-2.24\win64\nssm.exe install kubelet "C:\k\kubelet.exe" # 设置服务参数 C:\k\nssm-2.24\win64\nssm.exe set kubelet AppParameters "--kubeconfig=C:\k\config --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:3.9 --cgroups-per-qos=false --enforce-node-allocatable= --network-plugin=cni --cni-bin-dir=C:\opt\cni\bin --cni-conf-dir=C:\etc\cni\net.d" C:\k\nssm-2.24\win64\nssm.exe set kubelet AppDirectory "C:\k" # 启动服务 Start-Service kubelet5. 如何将新节点加入现有集群?
Linux节点加入集群:
# 1. 在Master节点生成join token kubeadm token create --print-join-command # 2. 在Worker节点执行join命令(从上面获取) sudo kubeadm join <control-plane-endpoint>:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> # 3. 配置kubectl(复制admin.conf到本地) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configWindows节点加入集群:
# 1. 在Master节点生成join token kubeadm token create --print-join-command # 2. 在Windows节点执行join命令 C:\k\kubeadm.exe join <control-plane-endpoint>:6443 --token <token> ` --discovery-token-ca-cert-hash sha256:<hash> # 3. 配置kubectl # 从Master节点复制admin.conf到Windows节点C:\Users\YourName\.kube\config # 或使用KUBECONFIG环境变量 [Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\Users\YourName\.kube\config", [EnvironmentVariableTarget]::User)三、日常运维相关问题
6. 如何快速检查集群健康状态?
执行以下命令获取集群健康快照(只读):
kubectl --context <ctx> get nodes -o wide kubectl --context <ctx> get pods -A -o wide kubectl --context <ctx> get events -A --sort-by=.lastTimestamp kubectl --context <ctx> top nodes 2>/dev/null || true kubectl --context <ctx> top pods -A 2>/dev/null || true关注点:
- 节点状态:MemoryPressure/DiskPressure/PIDPressure/NetworkUnavailable
- 异常Pod:
Pending/CrashLoopBackOff/ImagePullBackOff/Evicted - 近期Warning事件:调度失败、探针失败、拉镜像失败、驱逐、卷挂载失败
7. 如何查看节点资源可用量?
方法1:使用kubectl top(需要metrics-server)
kubectl top nodes方法2:查看节点容量和可分配资源
kubectl get nodes -o custom-columns=NODE:.metadata.name,CPU_CAPACITY:.status.capacity.cpu,CPU_ALLOCATABLE:.status.allocatable.cpu,MEM_CAPACITY:.status.capacity.memory,MEM_ALLOCATABLE:.status.allocatable.memory方法3:查看节点资源使用详情(含已分配/剩余)
kubectl describe nodes | grep -E "(Name:|Allocated resources:|Capacity:|Allocatable:|cpu|memory)"8. 如何筛选可用内存低于2GB的节点?
# 使用kubectl配合jsonpath和awk筛选 kubectl get nodes -o json | jq -r '.items[] | select(.status.allocatable.memory | gsub("Ki"; "") | tonumber < 2097152) | .metadata.name' # 或使用自定义输出配合脚本筛选 kubectl get nodes -o custom-columns=NODE:.metadata.name,MEM_ALLOCATABLE:.status.allocatable.memory | awk '$2 ~ /Ki$/ {mem=substr($2,1,length($2)-2); if (mem < 2097152) print $1 " 内存不足: " $2}'9. 如何查询指定namespace下Running状态的Pod?
# 单条命令实现 kubectl get pods -n default --field-selector=status.phase=Running -o custom-columns=POD:.metadata.name,RESTARTS:.status.containerStatuses[0].restartCount,NODE:.spec.nodeName,STATUS:.status.phase # 或更详细版本(显示所有容器重启次数) kubectl get pods -n default --field-selector=status.phase=Running -o custom-columns=POD:.metadata.name,RESTARTS:".status.containerStatuses[*].restartCount",NODE:.spec.nodeName,READY:".status.containerStatuses[*].ready"四、故障排除相关问题
10. kubelet无法启动如何排查?
Linux系统:
# 查看日志 sudo journalctl -u kubelet -f sudo journalctl -u kubelet --since="1 hour ago" # 检查配置文件 sudo cat /var/lib/kubelet/config.yaml ls -la /etc/kubernetes/Windows系统:
# 查看事件日志 Get-WinEvent -LogName "Application" -Source "kubelet" | Select-Object -First 20 # 查看kubelet日志文件 Get-Content C:\var\log\kubelet\kubelet.log -Tail 5011. 节点显示NotReady状态如何处理?
# 检查节点状态 kubectl describe node <node-name> # 检查kubelet配置 kubectl get node <node-name> -o yaml常见原因:
- CNI插件未安装或配置错误
- kubelet无法连接到API Server
- 系统资源不足
12. 如何查询过去10分钟内包含"error"的日志?
# 使用--since参数查询最近10分钟的日志 kubectl logs nginx-xxx -n default --since=10m | grep "error" # 如果Pod有多个容器,指定容器名 kubectl logs nginx-xxx -c <container-name> -n default --since=10m | grep -i "error" # 查看之前容器的日志(如果Pod重启过) kubectl logs nginx-xxx -n default --previous --since=10m | grep -i "error" # 多个Pod聚合日志(使用label选择器) kubectl logs -l app=nginx -n default --since=10m --all-containers=true | grep -i "error"13. 发布后Pod出现CrashLoopBackOff如何处理?
发布失败快速诊断步骤:
kubectl --context <ctx> -n <ns> get pods -l app=<label> -o wide kubectl --context <ctx> -n <ns> describe pod <pod> kubectl --context <ctx> -n <ns> logs <pod> --tail=200 kubectl --context <ctx> -n <ns> logs <pod> --previous --tail=200 kubectl --context <ctx> -n <ns> get events --sort-by=.lastTimestamp | tail -n 30常见根因方向:
- 镜像拉取失败:仓库/权限/Tag/镜像不存在
- 探针失败:readiness/liveness/startup配置不合理或依赖外部组件
- 资源不足:requests太高调度失败、limits太低OOM
- 配置错误:ConfigMap/Secret键缺失、挂载路径冲突、环境变量拼写
- Service selector不匹配:无endpoints导致流量失败
五、高级操作相关问题
14. 如何安全地回滚Deployment发布?
# 查看发布历史 kubectl --context <ctx> -n <ns> rollout history deploy/<name> # 回滚到上一版本 kubectl --context <ctx> -n <ns> rollout undo deploy/<name> # 回滚到指定版本 kubectl --context <ctx> -n <ns> rollout undo deploy/<name> --to-revision=<revision> # 检查回滚状态 kubectl --context <ctx> -n <ns> rollout status deploy/<name> --timeout=5m15. 如何从CronJob立刻触发一次Job执行?
# 从CronJob立刻触发一次 kubectl --context <ctx> -n <ns> create job --from=cronjob/<cronjob> <job-name> # 查看Job状态 kubectl --context <ctx> -n <ns> get jobs # 查看Job日志 kubectl --context <ctx> -n <ns> logs job/<job-name> --tail=200总结
以上是PilotGo-plugin-llmops使用过程中的15个高频问题及解决方案。如果您遇到其他问题,可以查阅项目中的详细文档或提交issue寻求帮助。在进行任何操作前,请确保已经明确目标集群(context)和命名空间(namespace),遵循"先读后写+证据链"的原则,确保操作的安全性和可追溯性。
需要获取项目代码,请使用以下命令克隆仓库:
git clone https://gitcode.com/openeuler/PilotGo-plugin-llmops【免费下载链接】PilotGo-plugin-llmopsLLM-assisted cluster fault analysis, inspection, and operation and maintenance management.项目地址: https://gitcode.com/openeuler/PilotGo-plugin-llmops
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
