Kubernetes v1.24 高可用集群安装教程基于 containerd Flannel前言Kubernetes v1.24 正式移除了对 Docker Shim 的支持推荐使用containerd作为容器运行时。本文档将详细介绍如何在 CentOS 7 环境下从零开始搭建一套完整的 Kubernetes v1.24 集群包括内核升级、运行时配置、集群初始化、网络插件部署以及常用监控和扩展组件安装。组件版本Kubernetesv1.24.3kubeadm/kubelet/kubectl容器运行时containerd v1.6.4网络插件Flannel v0.18.0其他可选组件Metrics Server v3.8.2Dashboard v2.5.1Kong Ingress v2.3.1整体安装流程图MasterWorker开始环境检查与内核升级所有节点: 前置配置关闭防火墙/SELinux/Swap加载内核模块设置sysctl安装 containerd安装 kubeadm/kubelet/kubectl节点角色?Master: kubeadm initWorker: 等待加入配置 kubectl 访问安装 Pod 网络插件Master 生成 join 命令Worker 执行 join验证集群健康安装可选组件完成第一步环境准备1.1 硬件与系统要求角色CPU内存硬盘操作系统Master2核2GB20GBCentOS 7.x (内核≥3.10)Worker2核2GB20GBCentOS 7.x (内核≥3.10)注意推荐使用CentOS 7.9或更高版本且所有节点时间必须同步。1.2 升级 Linux 内核CentOS 7 必须CentOS 7 默认内核 3.10 存在较多已知问题建议升级到5.x主线版本。# 导入 elrepo 公钥并安装源rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org yuminstallhttps://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm-y# 安装最新主线内核yum--enablerepoelrepo-kernelinstallkernel-ml-y# 查看已安装内核awk-F\$1menuentry {print i : $2}/etc/grub2.cfg# 设置默认内核通常第一个为最新内核grub2-set-default0grub2-mkconfig-o/boot/grub2/grub.cfg# 重启生效reboot重启后验证内核版本uname-r# 输出示例5.18.1-1.el7.elrepo.x86_64第二步所有节点统一前置配置创建一个自动化脚本k8s-prepare.sh所有节点依次执行#!/bin/bash# 1. 关闭防火墙systemctl stop firewalld systemctl disable firewalld# 2. 关闭 SELinuxsetenforce0sed-is/^SELINUXenforcing$/SELINUXdisabled//etc/selinux/config# 3. 关闭 Swapk8s 强制要求swapoff-ased-ris/.*swap.*/#//etc/fstab# 4. 设置主机名请根据角色修改示例 master# hostnamectl set-hostname master# 5. 添加 hosts 解析可根据实际 IP 修改cat/etc/hostsEOF 192.168.65.180 k8s-master 192.168.65.38 k8s-node1 192.168.65.195 k8s-node2 EOF# 6. 加载必要内核模块catEOF|tee/etc/modules-load.d/k8s.confoverlay br_netfilter EOFmodprobe overlay modprobe br_netfilter# 7. 配置 sysctl 参数持久化catEOF|tee/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOFsysctl--system# 8. 安装 ntpdate 并同步时间yuminstallntpdate-yntpdate time.windows.comecho前置配置完成请重启节点以确保所有配置生效执行将脚本复制到所有节点chmod x k8s-prepare.sh ./k8s-prepare.sh然后执行reboot。第三步安装 containerd 容器运行时3.1 添加 Docker CE 源containerd 包含其中yuminstall-yyum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.2 安装 containerdyuminstallcontainerd-y3.3 配置 containerd# 生成默认配置文件containerd config default/etc/containerd/config.toml# 修改 sandbox 镜像为国内加速地址sed-is#sandbox_image .*#sandbox_image registry.aliyuncs.com/google_containers/pause:3.6#/etc/containerd/config.toml# 启动并设置开机自启systemctl restart containerd systemctlenablecontainerd验证 containerd 状态crictl version# 或systemctl status containerd第四步安装 kubeadm、kubelet、kubectl4.1 添加 Kubernetes yum 源catEOF|tee/etc/yum.repos.d/kubernetes.repo[kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 EOF4.2 安装指定版本yuminstall-ykubelet-1.24.3 kubeadm-1.24.3 kubectl-1.24.34.3 启动 kubelet暂时会不断重启等待 master init 后正常systemctlenablekubelet systemctl start kubelet第五步初始化 Master 节点仅在Master 节点执行。5.1 预拉取所需镜像可选加快后续速度kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers5.2 执行初始化kubeadm init\--apiserver-advertise-address192.168.65.180\# 改为你的 Master 内网 IP--kubernetes-version v1.24.3\--service-cidr10.96.0.0/12\--pod-network-cidr10.244.0.0/16\--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers参数说明--pod-network-cidr10.244.0.0/16与后面 Flannel 插件默认网段保持一致初始化成功后会输出kubeadm join命令请务必复制保存用于 Worker 节点加入集群。5.3 配置 kubectl 访问凭证mkdir-p$HOME/.kubecp-i/etc/kubernetes/admin.conf$HOME/.kube/configchown$(id-u):$(id-g)$HOME/.kube/config5.4 验证控制平面状态kubectl get nodes# 此时 Master 状态应为 NotReady因为还没有安装网络插件第六步安装 Pod 网络插件Flannel网络插件必须部署否则节点将保持NotReady状态。以下任选其一方案一Flannel推荐# 下载官方 yamlcurl-Ohttps://raw.githubusercontent.com/flannel-io/flannel/v0.18.0/Documentation/kube-flannel.yml# 若拉取 quay.io 镜像慢可使用国内镜像站sed-is#quay.io/coreos/flannel#quay-mirror.qiniu.com/coreos/flannel#gkube-flannel.yml# 部署kubectl apply-fkube-flannel.yml方案二Calico性能更强kubectl apply-fhttps://raw.githubusercontent.com/projectcalico/calico/v3.23.1/manifests/calico.yaml等待约 2 分钟再次查看节点状态kubectl get nodes# 应显示 Ready查看所有 Pod 状态kubectl get pods-A第七步Worker 节点加入集群在每个 Worker 节点上执行Master 初始化输出末尾的kubeadm join命令例如kubeadmjoin192.168.65.180:6443--token98wkpb.mz5qekplhqfbgfo3\--discovery-token-ca-cert-hash sha256:aa426a445ac902c74cf124520571168eb406b19c08ddfdc1bf90fe66918d3fdd如果忘记 token可在 Master 上重新生成# 生成新 token24小时有效kubeadm token create --print-join-command在 Master 上验证节点加入kubectl get nodes输出示例NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 10m v1.24.3 k8s-node1 Ready none 2m v1.24.3 k8s-node2 Ready none 2m v1.24.3第八步安装可选组件增强监控与管理8.1 Metrics ServerHPA 核心组件# 添加 helm repo或直接 applyhelm repoaddmetrics-server https://kubernetes-sigs.github.io/metrics-server/ helm upgrade--installmetrics-server metrics-server/metrics-server\--namespacekube-system\--setargs{--kubelet-insecure-tls}验证kubectltopnodes8.2 Kubernetes Dashboardkubectl apply-fhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml创建访问账号cat EOF|kubectl apply-f-apiVersion:v1kind:ServiceAccountmetadata:name:admin-usernamespace:kubernetes-dashboard---apiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:name:admin-userroleRef:apiGroup:rbac.authorization.k8s.iokind:ClusterRolename:cluster-adminsubjects:-kind:ServiceAccountname:admin-usernamespace:kubernetes-dashboard EOF获取登录 Tokenkubectl-nkubernetes-dashboard create token admin-user访问方式kubectl proxy# 浏览器打开 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/8.3 Kong Ingress Controllerkubectl create namespace kong kubectl apply-fhttps://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/v2.3.1/deploy/single/all-in-one-dbless.yaml-nkong常见问题与解决方案Q1kubeadm init报错The kubelet is unhealthy due to cgroups原因kubelet 的 cgroup 驱动与 containerd 不一致。解决编辑/etc/sysconfig/kubelet添加KUBELET_EXTRA_ARGS--cgroup-driversystemd然后重启 kubeletsystemctl restart kubeletQ2Flannel Pod 一直 CrashLoopBackOff常见原因内核版本过低或网络配置冲突。解决确保已升级到 5.x 内核并检查是否与已有 overlay 网络冲突。Q3Worker 节点 join 时报token expired解决在 Master 上重新生成 tokenkubeadm token create --print-join-commandQ4containerd 运行时拉取镜像慢解决修改/etc/containerd/config.toml中[plugins.io.containerd.grpc.v1.cri.registry.mirrors]添加国内镜像加速器如阿里云、中科大。总结本教程完整覆盖了 Kubernetes v1.24 在 CentOS 7 环境下的手动集群搭建过程从内核升级到 containerd 配置再到网络插件与常用附加组件。关键步骤总结如下内核升级CentOS 7 必须系统基础配置防火墙/SELinux/swap/内核参数containerd 安装与配置kubeadm 安装与集群初始化网络插件部署Flannel 或 CalicoNode 加入与验证可选扩展组件通过以上步骤你将获得一个生产可用的 K8s v1.24 集群。后续可根据需求部署 Ingress、存储插件、服务网格等。快捷安装提示你可以将步骤 2~4 的脚本整合为一个all-in-one-prep.sh一次性在所有节点上运行但内核升级仍需单独重启。参考资料Kubernetes 官方文档containerd 官方仓库Flannel GitHub