在CentOS系统上使用kubeadm部署Kubernetes集群的实践经验总结如下:
一、环境准备
-
系统配置:
- 关闭防火墙:
systemctl disable --now firewalld
- 禁用SELinux:修改/etc/selinux/config为disabled
- 设置主机名解析:确保/etc/hosts包含所有节点IP与主机名映射
- 加载内核模块:br_netfilter, overlay
- 配置sysctl参数:net.bridge.bridge-nf-call-iptables=1
- 关闭防火墙:
-
容器运行时:
- 安装containerd 1.6+并配置systemd作为cgroup驱动
- 验证运行时状态:
ctr images pull docker.io/library/nginx:alpine
二、安装核心组件
-
配置yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF
-
安装指定版本:
yum install -y kubeadm-1.25.7 kubelet-1.25.7 kubectl-1.25.7 --disableexcludes=kubernetes
三、集群初始化
-
控制平面节点:
kubeadm init --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.100
-
网络插件:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
四、典型挑战与解决方案
-
镜像拉取失败:
- 预拉取镜像:
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
- 手动同步镜像到私有仓库
- 预拉取镜像:
-
kubelet持续重启:
- 检查/var/lib/kubelet/config.yaml与kubeadm配置一致性
- 验证cgroup驱动配置:containerd需设置systemd cgroup
-
节点NotReady状态:
- 排查CNI插件日志:
journalctl -u calico-node -f
- 验证网络策略:
iptables -L -n -t nat
- 排查CNI插件日志:
-
证书过期问题:
- 定期更新证书:
kubeadm certs renew all
- 配置外部etcd集群提升稳定性
- 定期更新证书:
五、验证要点
-
核心组件状态:
kubectl get pods -n kube-system kubectl get nodes -o wide
-
网络连通性测试:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 curl <ClusterIP>
实践表明,版本锁定(1.25 LTS)、国内镜像加速、前置环境校验是部署成功的关键要素。建议使用自动化工具预先完成系统参数配置,并通过GitOps维护集群状态。