解决90%的部署问题!openEuler/k8s-install常见错误排查与解决方案
解决90%的部署问题!openEuler/k8s-install常见错误排查与解决方案
【免费下载链接】k8s-installCloud native infrastructuer (base on Kubernetes) multiple baseline maintain/installation/configuratgion/security-update, online/offline package publish tool.项目地址: https://gitcode.com/openeuler/k8s-install
前往项目官网免费下载:https://ar.openeuler.org/ar/
🚀 你是否在使用openEuler/k8s-install部署Kubernetes集群时遇到各种报错?别担心!本文将为你揭秘90%的部署问题解决方案,让你轻松驾驭这个强大的云原生基础设施部署工具!openEuler/k8s-install是一个基于Kubernetes的云原生基础设施多基线维护/安装/配置/安全更新工具,支持在线/离线包发布,但复杂的部署环境常常让新手望而却步。
📋 为什么选择openEuler/k8s-install?
openEuler/k8s-install是一款专为openEuler和CTyunOS系统设计的Kubernetes一键部署工具,它支持:
- 多版本Kubernetes:1.20.2、1.25.3、1.29.1
- 多种容器运行时:containerd、docker、crio
- 多种操作系统:openEuler 20.03/22.03/23.09/24.03/25.03,CTyunOS 2/3/4系列
- 在线/离线部署:支持网络环境和离线环境部署
🔍 安装前检查清单:避免常见错误
1️⃣ 系统环境验证
在开始部署前,请确保满足以下条件:
# 检查系统版本 cat /etc/os-release # 检查内核版本 uname -r # 检查内存和CPU free -h nproc # 检查磁盘空间 df -h💡 关键点:openEuler/k8s-install对系统版本有严格要求,确保你的系统在支持列表中!
2️⃣ 网络配置检查
网络问题是部署失败的常见原因:
# 检查网络连通性 ping -c 3 8.8.8.8 # 检查DNS解析 nslookup gitcode.com # 检查防火墙状态 systemctl status firewalld # 检查SELinux状态 getenforce常见错误:防火墙未关闭或SELinux未禁用会导致节点间通信失败!
🚨 五大常见错误及解决方案
1️⃣ 错误:镜像拉取失败
症状:
Error response from daemon: Get "https://registry-crs-xinan1.ctyun.cn/v2/": net/http: request canceled解决方案:
方法一:配置镜像仓库代理编辑配置文件:config/daemon.json 添加镜像仓库:
{ "insecure-registries": [ "docker.ctyun.cn:60001", "docker-hb02.ctyun.cn:60001" ], "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn" ] }方法二:手动拉取镜像如果在线拉取失败,可以使用离线包中的镜像:
# 使用离线包中的镜像 ./k8s-install-offline -d oe2403 -b 129 -t containerd -n master2️⃣ 错误:Yum源配置错误
症状:
Cannot find a valid baseurl for repo: everything-2403解决方案:
步骤一:检查repo文件确保正确的repo文件在正确位置:config/openEuler2403.repo
步骤二:切换镜像源如果华为源访问慢,可以切换到网易镜像:
cd config sed -i 's/repo\.huawei\.com/mirrors.163.com/g' openEuler2403.repo yum clean all && yum makecache步骤三:使用离线安装如果网络问题无法解决,直接使用离线安装:
# 下载离线包后执行 ./k8s-install-offline -d ctl3 -b 129 -t containerd -n master3️⃣ 错误:容器运行时冲突
症状:
Failed to start containerd: address already in use解决方案:
方法一:清理旧容器运行时
# 停止并卸载旧版本 systemctl stop docker containerd crio yum remove -y docker docker-client docker-common containerd.io # 清理残留文件 rm -rf /var/lib/docker rm -rf /var/lib/containerd rm -rf /etc/docker rm -rf /etc/containerd方法二:正确选择容器运行时根据Kubernetes版本选择合适的运行时:
| Kubernetes版本 | 支持的容器运行时 |
|---|---|
| 1.29.1 | containerd、crio |
| 1.25.3 | 仅containerd |
| 1.20.2 | containerd、docker |
示例命令:
# 正确:129基线使用containerd k8s-install -d oe2403 -b 129 -t containerd -n master # 错误:129基线使用docker(不支持!) k8s-install -d oe2403 -b 129 -t docker -n master4️⃣ 错误:节点加入集群失败
症状:
error execution phase preflight: couldn't validate the identity of the API Server解决方案:
步骤一:检查token有效期
# 在master节点生成新token kubeadm token create --print-join-command步骤二:检查网络连通性
# 在worker节点ping master节点 ping <master-ip> # 检查6443端口 telnet <master-ip> 6443步骤三:重新执行加入命令
# 重置worker节点 kubeadm reset -f # 使用新token加入集群 kubeadm join <master-ip>:6443 --token <new-token> \ --discovery-token-ca-cert-hash sha256:<hash>5️⃣ 错误:Pod网络插件问题
症状:
Container runtime network not ready: NetworkReady=false解决方案:
方法一:检查Flannel配置编辑配置文件:config/flannel.yaml 确保镜像地址正确:
image: registry.cn-hangzhou.aliyuncs.com/k8s-install-flannel/flannel:v0.25.1方法二:切换网络插件如果Flannel有问题,可以尝试Calico:
# 使用Calico网络插件 k8s-install -d oe2403 -b 129 -t containerd -n master -p calico方法三:检查网络配置
# 启用IP转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 加载内核模块 modprobe br_netfilter modprobe overlay🛠️ 高级故障排查技巧
1️⃣ 日志分析:快速定位问题
# 查看kubelet日志 journalctl -xeu kubelet # 查看containerd日志 journalctl -xeu containerd # 查看系统日志 dmesg | grep -i error # 查看Pod状态 kubectl get pods -A -o wide2️⃣ 配置文件检查:避免配置错误
关键配置文件位置:
- 在线安装:
/etc/k8s-install/ - 离线安装:解压包的
config/目录
重要配置文件:
- variable.sh - 版本和镜像配置
- kubeadm-template.yaml - kubeadm配置模板
- daemon.json - Docker配置
3️⃣ 环境变量验证:确保参数正确
# 检查环境变量 echo $KUBERNETES_VERSION echo $IMAGE_REPO echo $FLANNEL_VERSION # 重新加载变量 source variable.sh📊 错误代码速查表
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| ErrImagePull | 镜像拉取失败 | 检查网络、配置镜像仓库 |
| CrashLoopBackOff | Pod反复崩溃 | 查看Pod日志、检查资源限制 |
| NodeNotReady | 节点未就绪 | 检查kubelet服务、网络插件 |
| NetworkPluginNotReady | 网络插件问题 | 重新部署Flannel/Calico |
| ContainerCreating | 容器创建中 | 检查镜像拉取、存储卷 |
| Pending | 调度失败 | 检查节点资源、污点设置 |
🔧 实用调试命令集
1️⃣ 集群状态检查
# 检查节点状态 kubectl get nodes -o wide # 检查所有Pod状态 kubectl get pods -A -o wide # 检查服务状态 kubectl get svc -A # 检查事件 kubectl get events -A --sort-by='.lastTimestamp'2️⃣ 网络诊断
# 检查CoreDNS kubectl get pods -n kube-system | grep coredns # 测试DNS解析 kubectl run -it --rm --image=busybox:1.28 test --restart=Never -- nslookup kubernetes.default # 检查网络策略 kubectl get networkpolicies -A3️⃣ 资源监控
# 查看节点资源使用 kubectl top nodes # 查看Pod资源使用 kubectl top pods -A # 查看详细资源请求 kubectl describe nodes | grep -A 10 -B 10 "Allocated resources"🚀 最佳实践建议
1️⃣ 部署前准备
- ✅ 确保系统版本匹配
- ✅ 关闭防火墙和SELinux
- ✅ 配置时间同步
- ✅ 设置主机名和hosts
- ✅ 配置IP转发和桥接流量
2️⃣ 部署过程
- ✅ 使用正确的参数组合
- ✅ 先安装依赖,再部署集群
- ✅ 按顺序部署节点(先master后worker)
- ✅ 验证每个步骤的成功
3️⃣ 部署后验证
- ✅ 检查所有节点状态为Ready
- ✅ 检查所有系统Pod运行正常
- ✅ 测试网络连通性
- ✅ 部署测试应用验证功能
💡 小贴士:避免常见陷阱
- 版本匹配:确保Kubernetes版本、容器运行时、操作系统版本三者兼容
- 参数顺序:命令行参数顺序很重要,确保-d、-b、-t、-n参数正确组合
- 网络环境:离线环境使用离线包,在线环境配置好镜像源
- 权限问题:所有操作都需要root权限,使用sudo或切换到root用户
- 清理工作:部署失败后彻底清理再重试,避免残留配置影响
📝 总结
openEuler/k8s-install虽然功能强大,但在实际部署中难免遇到各种问题。通过本文提供的错误排查指南和解决方案,相信你已经掌握了解决90%部署问题的能力!记住:耐心+细心+正确的排查方法=成功部署!
🎯核心要点回顾:
- 仔细检查系统环境和网络配置
- 使用正确的参数组合和版本匹配
- 学会查看和分析日志信息
- 掌握常用的调试和诊断命令
- 遵循最佳实践和部署流程
现在,你可以自信地使用openEuler/k8s-install部署你的Kubernetes集群了!如果遇到本文未涵盖的问题,欢迎查看项目文档或在社区中寻求帮助。
💪 记住:每一个错误都是学习的机会,每一次排查都是经验的积累!
【免费下载链接】k8s-installCloud native infrastructuer (base on Kubernetes) multiple baseline maintain/installation/configuratgion/security-update, online/offline package publish tool.项目地址: https://gitcode.com/openeuler/k8s-install
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
