在裸机环境中使用kubeadm部署Kubernetes集群需遵循以下核心步骤及注意事项:
一、环境准备
- 系统要求:禁用Swap并设置
sysctl
参数(如net.ipv4.ip_forward=1
及net.bridge.bridge-nf-call-iptables=1
),CentOS需加载br_netfilter模块 - 容器运行时:推荐containerd,需配置
cgroupdriver=systemd
并与kubelet一致,避免Docker因CRI兼容性问题导致初始化失败 - 软件包预装:通过阿里云镜像源安装kubeadm/kubelet/kubectl,注意锁定版本防止自动升级冲突
二、集群初始化
- 配置生成:使用
kubeadm config print init-defaults
生成YAML模板,需调整项包括:imageRepository: registry.aliyuncs.com/google_containers
networking.podSubnet
需与CNI插件匹配(如Calico默认192.168.0.0/16)controllerManager.extraArgs.node-cidr-mask-size: 24
- 证书优化:通过
apiServer.certSANs
添加所有节点及负载均衡器IP,为后续高可用扩展预留 - 预拉镜像:执行
kubeadm config images pull --config init.yaml
避免网络超时中断流程
三、网络方案实施
- CNI选型:生产环境优先Calico(支持BGP网络策略),需修改
ippool
配置适配物理网络MTU值 - 多网卡处理:通过
IP_AUTODETECTION_METHOD
指定绑定接口,避免自动选择错误NIC导致跨节点不通 - MetalLB集成:为LoadBalancer类型服务分配物理IP段,需与网络部门协调保留IP地址池
四、存储架构设计
- 本地存储:使用OpenEBS创建LocalPV,需预置RAID卡策略并配置磁盘调度规则
- 分布式存储:Rook Ceph部署需规划OSD磁盘分区,避免/journal与Wal分区同盘引发性能瓶颈
- 存储类优化:设置ReclaimPolicy为Retain防止误删生产数据,启用VolumeBindingMode延迟绑定
五、高可用实现
- 负载均衡器:通过Keepalived+HAProxy实现VIP漂移,注意配置TCP健康检查而非HTTP模式
- ETCD集群:独立部署三节点etcd集群,定期快照备份并监控
etcd_server_has_leader
指标 - 控制平面:使用
kubeadm join --control-plane
扩展Master节点,需预配共享密钥同步证书
典型故障案例
- coredns CrashLoopBackOff:检查Calico是否分配IP,
kubelet -v=3
查看CNI插件调用日志 - NodeNotReady:确认kubelet进程存活,
journalctl -u kubelet
排查cgroup驱动配置冲突 - 证书过期:提前使用
kubeadm certs renew
更新,通过openssl x509 -in apiserver.crt -noout -text
验证有效期
实践建议:使用Ansible批量配置节点参数,通过Cluster API实现声明式集群生命周期管理,在物理机BIOS层启用SR-IOV提升网络性能。