k8s-(六)从零到一:基于kubeadm在CentOS 7上部署Kubernetes 1.24全流程详解与避坑指南
1. 环境准备与系统配置在CentOS 7上部署Kubernetes 1.24集群首先需要做好基础环境准备。我建议使用至少3台虚拟机1台master2台worker每台配置2核CPU、4GB内存以上。这个配置能确保集群稳定运行实测低于这个规格在部署时经常会出现资源不足的报错。关键系统配置操作关闭防火墙和SELinux是最容易踩坑的地方。虽然理论上可以通过开放端口来保持防火墙运行但在实际测试中我发现CentOS 7的firewalld规则会干扰Pod网络通信。执行以下命令彻底关闭systemctl stop firewalld systemctl disable firewalld sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config setenforce 0swap分区必须关闭这是Kubernetes 1.24的硬性要求。我遇到过kubelet服务因为swap未关闭而持续崩溃的情况。修改/etc/fstab文件注释swap行后建议直接执行swapoff -a立即生效避免等待重启sed -i /swap/s/^/#/ /etc/fstab swapoff -a free -m # 验证swap显示为02. 内核参数与容器运行时配置Kubernetes对Linux内核有特殊要求特别是网络相关的参数。新建/etc/sysctl.d/k8s.conf文件写入以下内容cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 vm.swappiness 0 EOF sysctl --system容器运行时选择Kubernetes 1.24移除了对Docker的默认支持但通过安装cri-dockerd仍可使用Docker。我测试过containerd和cri-o两种方案最终推荐containerd作为运行时它在资源占用和稳定性上表现更好yum install -y containerd.io containerd config default /etc/containerd/config.toml sed -i s/SystemdCgroup false/SystemdCgroup true/g /etc/containerd/config.toml systemctl enable --now containerd3. Kubernetes组件安装配置阿里云yum源能极大提升安装速度。创建/etc/yum.repos.d/kubernetes.repo文件cat EOF /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck1 repo_gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF安装指定版本的kubeadm、kubelet和kubectl这里以1.24.3为例yum install -y kubelet-1.24.3 kubeadm-1.24.3 kubectl-1.24.3 --disableexcludeskubernetes systemctl enable kubelet4. 集群初始化与网络插件部署master节点初始化命令需要特别注意image-repository参数。由于国内无法直接访问k8s.gcr.io使用阿里云镜像仓库kubeadm init \ --kubernetes-versionv1.24.3 \ --image-repositoryregistry.aliyuncs.com/google_containers \ --apiserver-advertise-address192.168.1.100 \ --service-cidr10.96.0.0/12 \ --pod-network-cidr192.168.0.0/16 \ --cri-socketunix:///var/run/containerd/containerd.sock初始化成功后按照提示配置kubectlmkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config网络插件选择Calico在Kubernetes 1.24上表现稳定安装时需要注意与--pod-network-cidr参数的匹配kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml5. Worker节点加入集群在master节点上获取join命令kubeadm token create --print-join-command在worker节点执行输出的join命令形如kubeadm join 192.168.1.100:6443 --token abcdef.1234567890 \ --discovery-token-ca-cert-hash sha256:xxxxxxxx6. 验证与问题排查部署完成后使用以下命令验证集群状态kubectl get nodes -o wide kubectl get pods -A常见问题及解决方案kubelet服务不断重启检查/var/log/messages日志常见原因是cgroup驱动不匹配。确保containerd/config.toml和kubelet的cgroup驱动一致推荐systemdPod网络不通执行iptables -P FORWARD ACCEPT并检查calico Pod是否正常运行证书过期问题使用kubeadm certs renew all更新证书7. 可选组件部署Dashboard部署方案kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml创建管理员账号cat EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard EOF获取访问令牌kubectl -n kubernetes-dashboard create token admin-user8. 生产环境优化建议证书管理提前规划证书自动续期方案推荐使用cert-manager日志收集部署EFK或LokiPromtail日志系统监控告警Prometheus Operator配合Grafana实现全方位监控存储方案根据业务需求选择Rook、Longhorn或直接使用云厂商存储服务备份恢复使用Velero定期备份集群状态和持久卷在长期维护过程中建议定期执行kubeadm upgrade保持版本更新同时关注Kubernetes官方发布的CVE安全公告。对于关键业务集群至少要保留一个备用的master节点以保障高可用性。