awx-on-k3s排错宝典:Pod状态异常与日志分析实战指南
【免费下载链接】awx-on-k3sAn example implementation of AWX on single node K3s using AWX Operator, with easy-to-use simplified configuration with ownership of data and passwords.项目地址: https://gitcode.com/gh_mirrors/aw/awx-on-k3s
在使用awx-on-k3s部署和日常运维过程中,Pod状态异常是常见的技术难题。本文将系统梳理Pod故障排查流程,通过实战案例详解日志分析技巧,帮助用户快速定位并解决各类容器运行问题,确保AWX在K3s环境中稳定运行。
排错准备:核心工具与基础命令
必备kubectl命令集
排查Pod问题的第一步是掌握基础状态查询命令,这些命令能帮助你快速定位异常Pod:
# 查看awx命名空间下所有Pod状态 kubectl -n awx get pod # 查看特定Pod的详细事件 kubectl -n awx describe pod <Pod名称> # 查看Pod内容器日志 kubectl -n awx logs -f <Pod名称> -c <容器名称>日志分析关键路径
针对AWX部署的特殊架构,这些日志路径尤为重要:
- AWX Operator日志:
kubectl -n awx logs -f deployment/awx-operator-controller-manager - Web容器初始化日志:
kubectl -n awx logs -f deployment/awx-web -c init - 数据库迁移日志:
kubectl -n awx logs -f job/awx-migration-<VERSION> - PostgreSQL日志:
kubectl -n awx logs -f statefulset/awx-postgres-15
常见Pod状态异常解决方案
ErrImagePull:镜像拉取失败
典型症状
Pod状态显示ErrImagePull或ImagePullBackOff,事件日志出现"429 Too Many Requests"错误。
故障原因
Docker Hub匿名用户拉取限制(每6小时200次),导致PostgreSQL等基础镜像无法拉取。
解决方法
- 等待限制解除:通常6小时后自动恢复
- 配置Docker Hub认证:参考tips/dockerhub-rate-limit.md配置镜像拉取凭证
- 使用私有镜像仓库:通过registry/目录配置本地镜像仓库
Pending:资源不足或存储未绑定
场景1:资源不足
事件日志显示"1 Insufficient cpu, 1 Insufficient memory"时,说明节点资源不足。
解决方案:
- 增加节点CPU/内存至至少3核5GB
- 修改base/awx.yaml降低资源需求:
spec: web_resource_requirements: {} task_resource_requirements: {} ee_resource_requirements: {} postgres_resource_requirements: {}场景2:存储未绑定
事件日志显示"unbound immediate PersistentVolumeClaims"时,需检查PV状态:
# 查看PV状态 kubectl get pv # 清除PV绑定记录 kubectl patch pv <PV名称> -p '{"spec":{"claimRef": null}}'CrashLoopBackOff:PostgreSQL权限问题
典型日志
PostgreSQL容器日志出现"Permission denied"错误:
mkdir: cannot create directory '/var/lib/pgsql/data/userdata': Permission denied解决步骤
根据PostgreSQL版本修复宿主机目录权限:
# PostgreSQL 13 sudo chown 999:0 /data/postgres-13 /data/postgres-13/data sudo chmod 755 /data/postgres-13 /data/postgres-13/data # PostgreSQL 15 sudo chown 26:0 /data/postgres-15 /data/postgres-15/data sudo chmod 700 /data/postgres-15 /data/postgres-15/dataRunning状态但功能异常:数据库连接问题
典型症状
Pod状态显示Running,但日志反复出现"wait-for-migrations":
[wait-for-migrations] Waiting for database migrations... [wait-for-migrations] Attempt 1 of 30排查方向
- 检查PostgreSQL Pod状态:
kubectl -n awx get pod | grep postgres - 验证数据库连接配置:检查base/kustomization.yaml中
awx-postgres-configuration的host参数 - 关闭防火墙或网络策略:确保K3s节点间网络通畅
高级排错技巧
解密Operator日志
当AWX Operator日志出现"censored"信息时,修改base/awx.yaml显示完整日志:
spec: # 取消注释以显示详细日志 no_log: false解决日志丢失问题
长运行任务日志丢失时,调整K3s日志配置:
# 重新安装K3s并配置日志参数 curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 \ --kubelet-arg "container-log-max-files=4" \ --kubelet-arg "container-log-max-size=50Mi"修复Provisioning Callback问题
Traefik反向代理导致客户端IP无法识别时,创建traefik-config.yaml配置:
apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: traefik namespace: kube-system spec: valuesContent: |- hostNetwork: true排错工作流总结
- 状态检查:
kubectl -n awx get pod确定异常Pod - 事件分析:
kubectl -n awx describe pod <Pod名称>查看事件日志 - 日志深入:根据Pod类型选择对应日志命令
- 配置验证:检查相关YAML配置文件(如base/awx.yaml)
- 操作修复:应用解决方案后验证状态
通过这套系统化的排错方法,大多数awx-on-k3s部署问题都能在30分钟内定位并解决。对于复杂场景,可参考tips/troubleshooting.md获取更多高级解决方案。
【免费下载链接】awx-on-k3sAn example implementation of AWX on single node K3s using AWX Operator, with easy-to-use simplified configuration with ownership of data and passwords.项目地址: https://gitcode.com/gh_mirrors/aw/awx-on-k3s
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考