温馨提示×

CentOS上K8S安装常见问题有哪些

小樊
42
2025-11-16 04:03:59
栏目: 智能运维

CentOS 上 K8s 安装常见问题与排查要点

一 环境准备与系统兼容

  • 典型问题
    • 使用过旧或不兼容的 CentOS 7.2/7.6 搭配较新 Kubernetes 版本,出现网络性能差、内核特性缺失(如 IPVS conn_reuse_mode、eBPF)等问题。
    • 未关闭 Swap、未正确设置 SELinux、未放行必要端口或主机名解析异常,导致 kubelet 健康检查失败或节点 NotReady。
    • 时间不同步引发证书校验与组件异常。
  • 排查与解决
    • 系统基线:建议 CentOS 7.6+;若使用 K8s 1.28+,优先升级内核(如 ELRepo 5.4 LTS),或直接迁移至 CentOS Stream 8/9、Rocky Linux 8/AlmaLinux 8 等以获得 4.18+/5.15+ 内核与更好支持。
    • 基础开关:执行 swapoff -a 并注释 /etc/fstab 中 swap 行;setenforce 0 并将 /etc/selinux/config 设为 SELINUX=permissive/disabled;配置 NTP/chrony 同步时间。
    • 主机与解析:设置唯一 hostname,并在 /etc/hosts 或 DNS 中保证节点互解析。
    • 防火墙策略:二选一——要么放行所需端口(见下文端口清单),要么在受控环境下临时停用 firewalld

二 容器运行时与 kubelet 配置

  • 典型问题
    • cgroup 驱动不一致(Docker 默认 cgroupfs vs kubelet 期望 systemd),导致 kubelet 启动失败或不健康。
    • 未配置 bridge-nf-call-iptables/ip6tablesip_forward,Pod 网络不通。
    • 镜像仓库不可达(海外源),kubeadm init 阶段拉取镜像失败。
    • kubelet 未开机自启或参数不当(如未设置 --cgroup-driver=systemd)。
  • 排查与解决
    • Docker 配置 /etc/docker/daemon.json:设置 "exec-opts": ["native.cgroupdriver=systemd"],必要时配置 "registry-mirrors";重启 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
    • 镜像加速与替代源:使用国内镜像(如 registry.aliyuncs.com/google_containers),或手动拉取并 docker tag 重命名所需镜像。
    • kubelet:安装后执行 systemctl enable --now kubelet,查看 journalctl -u kubelet -f 定位启动失败原因。

三 初始化与网络插件

  • 典型问题
    • kubeadm init 失败:证书、网络 CIDR 冲突、镜像拉取失败、端口占用等。
    • 节点 NotReady:未安装 CNI 网络插件(如 Calico/Flannel),或 Pod CIDR 与插件配置不一致。
    • 节点无法加入:token 过期、CA 哈希不匹配、apiserver 地址不可达、防火墙阻断。
  • 排查与解决
    • 初始化命令示例:kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16(Flannel 常用 10.244.0.0/16;Calico 常用 192.168.0.0/16,以所选清单为准)。
    • 安装 CNI:如 Calico 执行 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml;如 Flannel 执行 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • 加入节点:使用 kubeadm token create --print-join-command 生成最新 Join 命令;如仍失败,先 kubeadm reset 清理后重试。
    • 端口放行(若未关闭防火墙):如 6443/tcp(APIServer)10250/tcp(kubelet)10251/tcp(kube-scheduler)10252/tcp(kube-controller-manager),以及 8472/udp(Flannel VXLAN) 等。

四 端口与防火墙

  • 常见需要放行的端口
    • 控制面与节点通信:6443/TCP(APIServer)10250/TCP(kubelet)10251/TCP(kube-scheduler)10252/TCP(kube-controller-manager)
    • 可选调度器/管理端口:10255/TCP(kubelet read-only,视配置)2379–2380/TCP(etcd,若外部部署)
    • CNI 插件端口:如 Flannel VXLAN 8472/UDP
  • 配置建议
    • firewalld 场景:按区域放行接口/端口并 firewall-cmd --reload;或测试环境临时停用 firewalld 简化排障。

五 快速排查清单

  • 查看节点与系统状态:kubectl get nodeskubectl get pods -Asystemctl status kubeletjournalctl -u kubelet -f
  • 核对关键配置:交换分区已关闭(free -h/etc/fstab)、SELinux 为 permissive/disabled、时间已同步(timedatectl status)。
  • 网络与内核:sysctl -p 生效;ip aip routebridge link 检查网卡与网桥;必要时抓包或 conntrack -S 观察连接跟踪。
  • 镜像与初始化:docker images 确认所需镜像存在;kubeadm reset 后使用最新 kubeadm initkubeadm join 命令。

0