基于 CentOS 7 搭建 K8s v1.28 + ArgoCD 全栈平台的 16 个踩坑实录
一、 前言“项目是从 2026 年 4 月底开始的。当时手里只有 4 台 CentOS 7 最小化虚拟机目标是在上面跑通 K8s 集群、Prometheus 监控以及 ArgoCD 持续部署。整个搭建过程并不顺利从底层网络不通到 Containerd 无法识别再到 cAdvisor 长期 401 认证难题。我曾因为这些问题崩溃但好在最终都一一解决了。如今集群运行稳定监控全绿GitOps 链路跑通。本文将完整复盘整个过程中的 16 个核心故障与解决方案希望能给正在入门云原生的小伙伴一些参考。”二、 基础环境与虚拟化层 (网络与节点)这一步是基石也是最短的木板。1. VMware NAT 模式最小化系统网络不通现象ping 8.8.8.8返回Network is unreachable。根因CentOS 7 最小化镜像默认无 NetworkManager未自动获取 IP。解决手动编写ifcfg-ens33指定静态 IP、网关及 DNS。2. 宿主机无法访问虚拟机 Web 服务 (Prometheus/Grafana)现象Windows 浏览器访问 9090/3000 端口超时。根因虚拟机防火墙拦截 VMware NAT 未配置端口映射。解决永久关闭firewalld在 VMware 虚拟网络编辑器中为 VMnet8 添加端口转发规则。3. 跨节点服务访问受阻现象Master 节点curl不通 Monitor 节点。根因Monitor 节点firewalld残留拦截。解决二次确认并彻底关闭所有节点防火墙。4. 新增 Node 节点长期 NotReady现象k8s-node2加入后状态异常。根因前期实验 Cilium 卸载残留污点node.cilium.io/agent-not-ready。解决kubectl taint nodes k8s-node2 node.cilium.io/agent-not-ready:NoSchedule-清除污点。三、 容器运行时与集群部署层这一层考验的是对底层 CRI 和网络插件原理的理解。5. Containerd CRI 插件未启用现象kubeadm init及kubeadm join报错container runtime is not running。根因CentOS 7 自带的 containerd 默认未启用 CRI 接口。解决生成默认配置修改SystemdCgroup true配置crictl指向 Containerd 套接字。6. Flannel CNI 插件 Pod 长期卡在 Init:1/2现象节点 NotReady 超 20 分钟。根因CNI 目录残留内核模块br_netfilter未加载镜像拉取超时。解决清理/etc/cni/net.d/加载内核模块并写入参数强制重建 Pod。7. Docker Hub 及 GitHub 不可达现象镜像拉取超时下载二进制包报 404/403。解决配置阿里云/中科大镜像加速使用ghfast.top加速站下载无法拉取的组件改用二进制本地部署。8. Cilium 替代 Flannel 失败现象Cilium Pod 全部CrashLoopBackOff。根因CentOS 7 内核 3.10 过老不兼容 Cilium 的 eBPF 程序。解决彻底卸载 Cilium 并清理残留污点回退至 Flannel。四、 监控系统搭建层最大的挑战集中在如何让外部的 Prometheus 安全地抓取 K8s 内部指标。9. Prometheus 下载失败解决使用ghfast.top作为 GitHub 资源加速站完成下载。10. 服务器时间漂移致 Grafana 全 No data现象Prometheus UI 提示时间差Grafana 无数据显示。解决安装chrony配置 NTP 阿里云源强制同步并写入硬件时钟。11. Grafana 数据源 URL 配置错误现象数据源保存成功但查不到数据。根因默认 URL 为localhost:9090指向了 Grafana 自身。解决修改数据源 URL 为http://192.168.126.101:9090。12. Kubelet cAdvisor 访问长期 401 Unauthorized核心难点现象Prometheus 抓取 Kubelet 10250 端口持续 401 认证失败。解决链路临时方案kubectl create token注入但 Token 过期即失效。永久方案使用 OpenSSL 基于 K8s 集群 CA 签发10 年期客户端证书。权限配置配置 RBAC 绑定system:kubelet-api-admin解决证书通过后依然 Forbidden 的问题。避坑提醒证书文件必须使用scp原样传输手动cat复制会导致 PEM 格式损坏。五、 GitOps 与高可用层 (ArgoCD)从人工敲命令迈向真正的“配置即代码”。13. ArgoCD 部署镜像拉取失败现象argocd-dex-server卡在 ImagePullBackOff。解决dex 组件非核心功能先搁置核心组件全部正常运行。14. ArgoCD 副本无法分散到新节点现象扩容后 Pod 集中调度。根因Cilium 残留污点未清干净。解决清除污点后副本成功分布至k8s-node2。15. ArgoCD 多文档 YAML 创建应用失败现象ArgoCD UI 无法导入包含多资源的 YAML。解决将 Deployment 和 Service 拆分为两个独立 Application 分别创建。16. ArgoCD 密码重置失败现象argocd account update-password报错accounts.csv路径不存在。解决使用argocd account bcrypt生成密码哈希直接注入argocd-secret的admin.password字段重启 Deployment 生效。六、 最终架构状态总结组件节点分布状态K8s 节点master node1 node23/3 ReadyFlannel每节点一个 Pod3/3 RunningArgoCD Servernode1 node22/2 Running (高可用)ArgoCD Repo Servernode1 node22/2 RunningPrometheusmonitorRunningGrafanamonitorRunningnode_exportermaster node12/2 UP七、 结语与心得“从三台 CentOS 7 最小化镜像开始从零搭建整个 AIOps 平台。K8s 集群初始化时 Containerd 的 CRI 没开、Flannel 卡 Init、Cilium 不兼容内核这些底层兼容性问题都是自己查源码和日志修掉的。监控这边最核心的难点是 Prometheus 在集群外访问 Kubelet 的 cAdvisor 一直 401。我对比了 Token 和证书两种方案最终用 OpenSSL 基于集群 CA 签了十年期的客户端证书再配上 RBAC 最小权限把认证永久修掉了。后面扩展到 GitOps部署了 ArgoCD 并实现双节点高可用。中间处理过污点残留、镜像不可达、YAML 多文档拆分、密码重置失败等问题。现在整个平台三节点全 Ready监控全绿GitOps 链路跑通。希望我的踩坑记录能给正在入坑云原生的各位带来帮助。”