news 2026/4/27 2:33:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 2:33:25

通过EVO工具导出gps轨迹

由于项目需要&#xff0c;跟C老师学了下如何把rosbag里的gps信号转化成轨迹 一、录制数据 通过ros录制SLAM数据&#xff0c;可以参考我如下的文章 ros上使用usb摄像头和激光雷达录制rosbag&#xff0c;并在rviz上播放https://blog.csdn.net/weixin_43046168/article/details…

作者头像 李华
网站建设 2026/4/27 2:32:19

C++面试题自用-持续更新

4月25日1.C中值传递和引用传递的区别值传递&#xff1a;将实参的值复制一份给形参&#xff0c;函数内部操作的是副本&#xff0c;改变形参不影响原来的实参。引用传递&#xff1a;形参成为实参的别名&#xff0c;不发生数据复制&#xff0c;在大多数实现里编译器通常把引用编译…

作者头像 李华
网站建设 2026/4/27 2:25:54

NLP文本表示方法对比:词袋、TF-IDF与LLM嵌入

1. 文本表示方法概述&#xff1a;从词袋到语言模型嵌入在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;将文本转换为机器可理解的数值形式是构建有效模型的第一步。scikit-learn作为Python中最流行的机器学习库之一&#xff0c;支持多种文本表示方法。本文将深入…

作者头像 李华
网站建设 2026/4/27 2:21:37

Copilot Next 自动化流程突然中断?微软内部调试日志曝光的6个未文档化限制条件(附绕过补丁脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Copilot Next 自动化工作流配置避坑指南 Copilot Next 的自动化工作流依赖于精准的触发条件、上下文注入策略与权限边界控制。配置失误常导致任务静默失败或权限越界&#xff0c;以下为高频风险点及应对…

作者头像 李华
网站建设 2026/4/27 2:16:25

nli-MiniLM2-L6-H768在软件测试中的应用:自动化生成测试用例与断言

nli-MiniLM2-L6-H768在软件测试中的应用&#xff1a;自动化生成测试用例与断言 1. 引言&#xff1a;软件测试的痛点与机遇 测试工程师小王最近很头疼。他负责的电商系统即将上线新功能&#xff0c;但测试用例编写进度严重滞后。按照传统方法&#xff0c;他需要先阅读200多页的…

作者头像 李华
网站建设 2026/4/27 2:08:48

AI 术语通俗词典:信息熵

信息熵是信息论、统计学、机器学习和人工智能中非常常见的一个术语。它用来描述&#xff1a;一个系统、一个变量或一个样本集合中&#xff0c;不确定性有多大。 换句话说&#xff0c;信息熵是在回答&#xff1a;面对一个结果还没有揭晓的事件&#xff0c;我们到底有多难提前猜中…

作者头像 李华