当前位置: 首页 > news >正文

Kubernetes v1.24 高可用集群安装教程(基于 containerd + Flannel)

Kubernetes v1.24 高可用集群安装教程(基于 containerd + Flannel)

前言

Kubernetes v1.24 正式移除了对 Docker Shim 的支持,推荐使用containerd作为容器运行时。本文档将详细介绍如何在 CentOS 7 环境下,从零开始搭建一套完整的 Kubernetes v1.24 集群,包括内核升级、运行时配置、集群初始化、网络插件部署以及常用监控和扩展组件安装。

组件版本

  • Kubernetes:v1.24.3(kubeadm/kubelet/kubectl)
  • 容器运行时:containerd v1.6.4
  • 网络插件:Flannel v0.18.0
  • 其他可选组件:Metrics Server v3.8.2,Dashboard v2.5.1,Kong Ingress v2.3.1

整体安装流程图

Master

Worker

开始

环境检查与内核升级

所有节点: 前置配置

关闭防火墙/SELinux/Swap

加载内核模块&设置sysctl

安装 containerd

安装 kubeadm/kubelet/kubectl

节点角色?

Master: kubeadm init

Worker: 等待加入

配置 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--enablerepo=elrepo-kernelinstallkernel-ml-y# 查看已安装内核awk-F\''$1=="menuentry " {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-i's/^SELINUX=enforcing$/SELINUX=disabled/'/etc/selinux/config# 3. 关闭 Swap(k8s 强制要求)swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab# 4. 设置主机名(请根据角色修改,示例 master)# hostnamectl set-hostname master# 5. 添加 hosts 解析(可根据实际 IP 修改)cat>>/etc/hosts<<EOF 192.168.65.180 k8s-master 192.168.65.38 k8s-node1 192.168.65.195 k8s-node2 EOF# 6. 加载必要内核模块cat<<EOF|tee/etc/modules-load.d/k8s.confoverlay br_netfilter EOFmodprobe overlay modprobe br_netfilter# 7. 配置 sysctl 参数(持久化)cat<<EOF|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.repo

3.2 安装 containerd

yuminstallcontainerd-y

3.3 配置 containerd

# 生成默认配置文件containerd config default>/etc/containerd/config.toml# 修改 sandbox 镜像为国内加速地址sed-i's#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、kubectl

4.1 添加 Kubernetes yum 源

cat<<EOF|tee/etc/yum.repos.d/kubernetes.repo[kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF

4.2 安装指定版本

yuminstall-ykubelet-1.24.3 kubeadm-1.24.3 kubectl-1.24.3

4.3 启动 kubelet(暂时会不断重启,等待 master init 后正常)

systemctlenablekubelet systemctl start kubelet

第五步:初始化 Master 节点

仅在Master 节点执行。

5.1 预拉取所需镜像(可选,加快后续速度)

kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

5.2 执行初始化

kubeadm init\--apiserver-advertise-address=192.168.65.180\# 改为你的 Master 内网 IP--kubernetes-version v1.24.3\--service-cidr=10.96.0.0/12\--pod-network-cidr=10.244.0.0/16\--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

参数说明

  • --pod-network-cidr=10.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/config

5.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-i's#quay.io/coreos/flannel#quay-mirror.qiniu.com/coreos/flannel#g'kube-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 上重新生成:

# 生成新 token(24小时有效)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 Server(HPA 核心组件)

# 添加 helm repo(或直接 apply)helm repoaddmetrics-server https://kubernetes-sigs.github.io/metrics-server/ helm upgrade--installmetrics-server metrics-server/metrics-server\--namespacekube-system\--setargs={--kubelet-insecure-tls}

验证:

kubectltopnodes

8.2 Kubernetes Dashboard

kubectl 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

获取登录 Token:

kubectl-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 Controller

kubectl create namespace kong kubectl apply-fhttps://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/v2.3.1/deploy/single/all-in-one-dbless.yaml-nkong

常见问题与解决方案

Q1:kubeadm init报错The kubelet is unhealthy due to cgroups

原因:kubelet 的 cgroup 驱动与 containerd 不一致。
解决:编辑/etc/sysconfig/kubelet添加:

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

然后重启 kubelet:

systemctl restart kubelet

Q2:Flannel Pod 一直 CrashLoopBackOff

常见原因:内核版本过低或网络配置冲突。
解决:确保已升级到 5.x 内核,并检查是否与已有 overlay 网络冲突。

Q3:Worker 节点 join 时报token expired

解决:在 Master 上重新生成 token:

kubeadm token create --print-join-command

Q4:containerd 运行时拉取镜像慢

解决:修改/etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri".registry.mirrors]添加国内镜像加速器(如阿里云、中科大)。


总结

本教程完整覆盖了 Kubernetes v1.24 在 CentOS 7 环境下的手动集群搭建过程,从内核升级到 containerd 配置,再到网络插件与常用附加组件。关键步骤总结如下:

  1. 内核升级(CentOS 7 必须)
  2. 系统基础配置(防火墙/SELinux/swap/内核参数)
  3. containerd 安装与配置
  4. kubeadm 安装与集群初始化
  5. 网络插件部署(Flannel 或 Calico)
  6. Node 加入与验证
  7. 可选扩展组件

通过以上步骤,你将获得一个生产可用的 K8s v1.24 集群。后续可根据需求部署 Ingress、存储插件、服务网格等。

快捷安装提示:你可以将步骤 2~4 的脚本整合为一个all-in-one-prep.sh,一次性在所有节点上运行,但内核升级仍需单独重启。

参考资料

  • Kubernetes 官方文档
  • containerd 官方仓库
  • Flannel GitHub

http://www.jsqmd.com/news/706370/

相关文章:

  • C语言进阶篇(文件操作)
  • 基于多模态大模型与智能体协作的像素艺术生成技术实践
  • 设备检测库device-detector:从UA解析到精细化运营的实战指南
  • 2026年人力资源数据分析的技术价值与应用前景
  • 第五章-05-练习案例:升级版自动查核酸
  • 2015-2025年地级市公共安全基建省内横向压力
  • 2026专业户外路灯TOP5推荐:LED路灯、乡村路灯、农村太阳能路灯、太阳能路灯安装、太阳能路灯工厂、太阳能路灯批发选择指南 - 优质品牌商家
  • WebCanvas:可视化AI工作流引擎的设计与实现
  • Windows更改远程桌面3389端口
  • 基于Node.js与Vue 3的轻量级服务器监控仪表盘实战
  • 安装OpenCV-Python 3.4.1.15和opencv-contrib-python 3.4.1.15,并将anaconda prompt创建的python3.6虚拟环境加到pycharm中
  • AI应用开发实战指南:从架构设计到生产部署的完整路径
  • 2026义乌正规诉讼律师机构名录:义乌离婚诉讼咨询、义乌诉讼律师公司、义乌刑事离婚律师、义乌律师公司、义乌离婚律师公司选择指南 - 优质品牌商家
  • 【SSD202 开发实战 18】JPEG 编解码与图片处理
  • 2026年3月优秀的机器人第七轴源头厂家推荐,车铣复合机自动化上下料核心设备/压铸机械手,机器人第七轴源头厂家哪家靠谱 - 品牌推荐师
  • LLM应用开发工具全景指南:从RAG到智能体的高效选型与实践
  • 稀疏矩阵在机器学习中的高效应用与优化技巧
  • 时间序列分析:自相关与偏自相关函数详解
  • AI Agent 面试题 014:Agent的动作空间(Action Space)设计有哪些最佳实践?
  • 2026年Q2燕窝选购技术指南:燕窝哪个牌子最好、燕窝哪个牌子最正宗、燕窝哪种品质好、燕窝如何挑选好的、燕窝排名选择指南 - 优质品牌商家
  • 【2026年版|建议收藏】小白程序员必看!大模型核心概念Agent Skills详解
  • wanwu框架:中文AI应用开发全栈解决方案,从RAG到智能体工作流
  • 2026可靠链板输送带优质供应商推荐榜:链条传动网带、链板提升机、链板输送机、食品输送网带、304不锈钢网带、冲孔链板选择指南 - 优质品牌商家
  • Java——Stream流
  • Devart数据连接工具全解析与26周年庆优惠指南
  • 定义类的方法和CRC建模
  • AI Agent 面试题 015:如何实现Agent的多模态感知能力?
  • SwiftLLM:专为研究设计的轻量级LLM推理引擎
  • python缺陷检测
  • 彻底搞懂:Spring Boot/Cloud 中 bootstrap.yml 与 application.yml 的区别与最佳实践