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

ubuntu搭建k8s 1.35版本

前言

本文基于Ubuntu 24.04 + Kubernetes 1.35.3实战整理,从零搭建一套可用的 Kubernetes 集群环境。

k8s 在 1.24 之后正式移除了对 Docker 的支持,默认采用containerd作为容器运行时。本教程将基于 containerd 进行部署,并对国内环境下常见的镜像拉取问题做了优化(镜像加速、pause 镜像替换等)。

整篇内容覆盖以下关键点:

  • containerd 正确配置(包括 SystemdCgroup)
  • kubeadm 初始化配置优化
  • 国内镜像源替换
  • 网络插件 Flannel 安装
  • Node 节点加入集群

适合人群:

  • 想快速搭一套可用 k8s 环境的人
  • 被各种初始化失败折磨过的人
  • 不想在 pause 镜像上浪费人生 2 小时的人

开始安装

1. 关闭swap

# k8s 要求关闭 swap,否则 kubelet 会直接拒绝启动 swapoff -a sed -i 's|^/swap.img|#/swap.img|' /etc/fstab rm -f /swap.img

查看一下,确保已经注释了

grep swap /etc/fstab

2. 加载内核模块

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter

3. 设置sysctl

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system

4. 安装容器运行时

apt install -y containerd

5. 生成配置

mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml

6. 修改关键配置

# 使用 systemd 作为 cgroup 驱动(必须和 kubelet 保持一致) sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # 替换 pause 镜像(国内必须改,否则 kubeadm init 大概率卡死) sed -i 's|sandbox_image = "registry.k8s.io/pause:3.8"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10.1"|' /etc/containerd/config.toml

7. 启动服务

systemctl restart containerd systemctl enable containerd

8. 添加阿里云源(懂的都懂)

mkdir -p /etc/apt/keyrings curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/Release.key \ | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \ https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/deb/ /" \ | sudo tee /etc/apt/sources.list.d/kubernetes.list apt update

9. 安装组件

apt install -y kubelet=1.35.3-* kubeadm=1.35.3-* kubectl=1.35.3-*

10. 锁版本(防止系统突然“帮你升级”)

apt-mark hold kubelet kubeadm kubectl

11. 设置主机名

hostnamectl set-hostname k8s-master

12. 配置hosts

cat >> /etc/hosts << EOF 192.168.200.155 k8s-master 192.168.200.156 k8s-node1 EOF

这里的ip根据你自身情况配置,不要照抄,如果你只有一个master节点,那就把node1去掉就行了

13. 生成配置文件

kubeadm config print init-defaults > kubeadm.yaml

14. 修改配置

sed -i 's/advertiseAddress: .*/advertiseAddress: 192.168.200.155/' kubeadm.yaml sed -i 's#imageRepository: .*#imageRepository: registry.aliyuncs.com/google_containers#' kubeadm.yaml sed -i 's/^\s*name: .*$/ name: k8s-master/' kubeadm.yaml sed -i 's/kubernetesVersion: .*/kubernetesVersion: v1.35.3/' kubeadm.yaml sed -i '/serviceSubnet/a\ podSubnet: 10.244.0.0/16' kubeadm.yaml

注意:这里的192.168.200.155是你master节点的ip,根据你自身情况配置,不要照抄

15. 提前拉取镜像

kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.35.3

我们可以通过cri工具,看一下镜像拉取成功了没有

crictl images

16. 初始化

kubeadm init --config kubeadm.yaml

初始化完成后,会有一串join命令,把这个记下来,一会儿node节点加入集群的时候会用到

很多人卡在这一步,一直初始化失败,需要检查一下/etc/containerd/config.toml里的pause镜像地址,是否已经改成了阿里云,而不是registry.k8s.io

17. 配置kubectl

mkdir -p ~/.kube cp /etc/kubernetes/admin.conf ~/.kube/config chown $(id -u):$(id -g) ~/.kube/config

这时候执行kubectl get no看下节点状态,会看到k8s-master这个节点处于NotReady状态,原因是因为没有安装网络插件,所以还用不了

18. 安装网络插件flannel

# 下载 curl -O https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml # 替换镜像源 sed -i 's|ghcr.io|ghcr.nju.edu.cn|g' kube-flannel.yml # 部署 kubectl apply -f kube-flannel.yml

这时候我们需要等待部署完成,我们可以kubectl get po -A,来查看安装状态,当这3个的ready状态都是1/1的时候,就说网络插件安装完成了

这时候我们再查看节点状态,就会变成Ready了

到这里,k8s的master节点就安装完成了,接下来就是node节点的初始化和加入了

以下内容是node节点的操作,不是master节点的操作

19. node节点准备

在 Node 节点上重复以上1-10的步骤

20. 设置主机名

hostnamectl set-hostname k8s-node1

注意,这里的hostname是k8s-node1,而不是刚刚的k8s-master

21. 设置hosts

cat >> /etc/hosts << EOF 192.168.200.155 k8s-master 192.168.200.156 k8s-node1 EOF

22. 加入集群

这里的命令是刚刚master节点初始化时,控制台打印的命令

kubeadm join 192.168.200.155:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:bb656d8e6b6e0b2ea38c48c40d396351d45a8a3b991d3ecb28f016fe83068322

如果不小心关掉了窗口,可以通过kubeadm token create --print-join-command来查看命令

23. 节点配置kubectl

这时候node节点还用不了kubectl,需要先创建文件夹

mkdir -p ~/.kube

然后在master上执行,把配置文件复制到node节点去

scp /etc/kubernetes/admin.conf root@node-ip:/root/.kube/config

这时候回到node节点,就可以正常使用kubectl了

一个基于 Ubuntu 24.04 + containerd 的 Kubernetes 集群就已经搭建完成了

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

相关文章:

  • c语言基础语法六——结构体(完结)
  • 2026年可靠文件销毁公司技术指南:海关销毁公司/电子产品销毁公司/过期食品销毁公司/饮料销毁公司/上海专业销毁公司/选择指南 - 优质品牌商家
  • 嵌入式MQTT设备注册客户端:轻量级DeviceRegistry深度解析
  • 2026年Q2丙烯酸脂肪族聚氨酯面漆标杆名录:环氧富锌底漆、耐高温漆200℃-500℃、聚氯乙烯防腐漆、醇酸调和漆选择指南 - 优质品牌商家
  • SEN66多参数空气质量传感器嵌入式集成指南
  • AI开发-python-langchain框架(--excle文档加载 )乇
  • AxThread:嵌入式轻量级异步任务调度库
  • 深入理解Harness Engineering:当AI Agent让代码不再稀缺,工程师的价值在哪里?
  • npm 从入门到精通(三):再进阶,掌握版本管理、脚本系统与包发布
  • # 016、AutoSAR CP操作系统(OS)配置与任务调度:那个让我加班到凌晨三点的调度死锁
  • 避坑指南:Orin NX上安装VSCode时如何选择合适的deb包版本
  • 2026年热门的封阳台装门窗精选推荐公司 - 行业平台推荐
  • C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET 反杀?捶
  • 告别原生JDBC的繁琐:用DBUtils的QueryRunner和BeanHandler重构你的Servlet登录逻辑
  • [特殊字符]FlowAgent执行链路深度解析:RootNode与多节点协作全还原
  • 华硕灵耀14 双屏 UX8406CA 原厂Win11 24H2系统分享下载
  • 后端必备基础:Maven 从入门到实战超详细总结
  • PingCraft:从需求文档到可追踪工作项的 Agent 实践之路段
  • 2026质量好的电动车定位器TOP推荐:GPS定位器/个人定位器/企业车辆定位器/儿童定位器/北斗卫星定位器/单北斗定位器/选择指南 - 优质品牌商家
  • 大模型智能体 (agent)简易流程介绍梢
  • Switch_lib:面向继电器控制的轻量级数字引脚时序管理库
  • HTU21D温湿度传感器驱动开发与I²C通信详解
  • 74HC154驱动库:嵌入式4-to-16译码器安全控制指南
  • 嵌入式开发必备:手把手教你用dtc工具编译dts到dtb(附常见错误排查)
  • ## 015、AutoSAR CP实战:配置存储栈(NvM,Fee,Ea)
  • 怎么查询MongoDB中数组长度大于N的文档_基于索引的额外长度字段方案
  • CTF网络流量分析如何从技术壁垒到轻松上手:CTF-NetA的智能化解决方案
  • PyMICAPS:气象工作者的终极Python可视化神器,让你的数据分析效率提升300%
  • 人脸识别OOD模型保姆级教程:OOD分时间序列异常检测算法
  • 避坑指南:为MATLAB 2023b配置CCS12.2+C2000ware 4.03黄金开发环境