centos上k8s部署常见问题
导读:CentOS 上 Kubernetes 部署常见问题与排查清单 一 环境准备与系统要求 操作系统建议使用CentOS 7.x/8.x,内核与基础网络正常;容器运行时建议使用Docker CE(或 containerd),并确保kubele...
CentOS 上 Kubernetes 部署常见问题与排查清单
一 环境准备与系统要求
- 操作系统建议使用CentOS 7.x/8.x,内核与基础网络正常;容器运行时建议使用Docker CE(或 containerd),并确保kubelet/kubeadm/kubectl版本匹配。
- 基础项检查与设置:
- 关闭或放行防火墙(生产环境建议按端口放行而非直接关闭):
- 直接关闭示例:
systemctl stop firewalld & & systemctl disable firewalld - 端口放行示例:
firewall-cmd --permanent --zone=trusted --add-port=6443/tcp等,随后firewall-cmd --reload
- 直接关闭示例:
- 关闭 SELinux 或设为宽容模式:
setenforce 0并修改/etc/selinux/config为SELINUX=permissive/disabled - 禁用 Swap:
swapoff -a并注释/etc/fstab中的 swap 行 - 主机名与 hosts:如
hostnamectl set-hostname master,并在/etc/hosts维护节点解析 - 时间同步:安装并启用 chrony/ntp,保证节点间时间一致
- 资源建议:单节点至少2 CPU 核、2 GB 内存
以上为常见前置条件与系统要求,未满足会导致后续组件异常或节点 NotReady。
- 关闭或放行防火墙(生产环境建议按端口放行而非直接关闭):
二 组件安装与初始化关键点
- 安装容器运行时与 kube 组件:
- Docker 示例:
yum install -y docker-ce docker-ce-cli containerd.io & & systemctl enable --now docker - kube 组件:
yum install -y kubelet kubeadm kubectl & & systemctl enable --now kubelet
- Docker 示例:
- 配置 Docker 使用 systemd cgroup 驱动(与 kubelet 一致):
/etc/docker/daemon.json中加入:{ "exec-opts": ["native.cgroupdriver=systemd"]},随后systemctl restart docker
- 内核参数(必需):
/etc/sysctl.d/k8s.conf写入:net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1
- 执行
sysctl -p生效
- 初始化控制平面(示例):
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16- 国内环境指定镜像仓库可显著缓解拉取失败
- 配置 kubectl:
mkdir -p $HOME/.kube & & cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(二选一,按所选 CIDR 保持一致):
- Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:
- 节点加入:
- 在 Master 生成命令:
kubeadm token create --print-join-command - 在 Worker 执行输出的
kubeadm join ...
以上步骤覆盖安装、驱动/内核、初始化与网络插件的关键环节,遗漏常导致 Pod 无法调度或节点 NotReady。
- 在 Master 生成命令:
三 高频故障与快速修复
- 镜像拉取失败(国内常见)
- 现象:
ImagePullBackOff/ErrImagePull - 处理:使用国内镜像仓库(如
registry.aliyuncs.com/google_containers)或手动docker pull/tag所需镜像;初始化时通过--image-repository指定仓库
- 现象:
- 节点 NotReady
- 现象:
kubectl get nodes显示 NotReady - 处理:确认网络插件已安装且 Pod 运行正常(
kubectl get pods -n kube-system);检查内核参数与转发是否生效;确认节点间网络互通
- 现象:
- 节点无法加入集群
- 现象:
kubeadm join失败或超时 - 处理:核对 Master IP、端口与 Token 是否最新;检查防火墙/安全组放通 6443/10250 等端口;确保时间同步;必要时
kubeadm reset后重试
- 现象:
- Pod 挂载卷失败(MountVolume.SetUp failed)
- 现象:挂载 ConfigMap/Secret/PVC 失败
- 处理:检查节点内核版本与系统组件;升级内核或修复底层存储/权限问题后重启 kubelet
- kubelet 启动异常
- 现象:
systemctl status kubelet报错或不断重启 - 处理:
journalctl -u kubelet -f查看具体错误;常见为 cgroup 驱动不一致、镜像缺失、Swap 未关闭、内核参数未生效等,逐项修正后systemctl restart kubelet
- 现象:
- Pod 无法调度
- 现象:Pending 状态
- 处理:检查节点资源(CPU/内存)、污点与容忍、亲和/反亲和规则;扩容节点或调整调度约束
以上问题覆盖镜像、网络、加入、存储与调度的高频场景,按序排查通常可快速恢复。
四 常用命令与验证步骤
- 集群状态:
kubectl get nodes与kubectl get pods -A - 组件日志:
journalctl -u kubelet -f、journalctl -u docker -f - 重置与重装:
kubeadm reset(清理后重新kubeadm init与kubeadm join) - 连通性验证:
- 部署测试应用:
kubectl run nginx --image=nginx --port=80 --restart=Never - 暴露服务:
kubectl expose deployment nginx --type=NodePort --port=80 - 访问测试:通过
NodeIP:NodePort验证
以上命令覆盖状态核验、日志定位、重置与业务验证的常用操作,有助于快速闭环问题。
- 部署测试应用:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos上k8s部署常见问题
本文地址: https://pptw.com/jishu/754313.html
