发布时间:2026/8/26 17:55:16
一.一、rocky linux安装k8s1.29.2 一、准备机器准备3台虚拟机都是4核4GIP地址主机名角色192.168.11.101k8s-masterMaster192.168.11.102k8s-node1Node192.168.11.103k8s-node2Node二、环境初始化1、配置网卡配置master网卡[rootk8s-master01 run]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 uuid5bd99cff-3edc-3223-ac66-4c076f11dd34 typeethernet autoconnect-priority-999 interface-nameens160 timestamp1786099079 [ethernet] [ipv4] methodmanual address1192.168.66.11/24,192.168.66.200 #配置ip等信息备注的需要配置 dns114.114.114.114;8.8.8.8 #配置DNS信息 [ipv6] addr-gen-modeeui64 methodauto [proxy] [rootk8s-master01 run]# cat /etc/NetworkManager/system-connections/ens192.nmconnection [connection] idens192 uuidbde7b363-5909-3b24-87eb-cea62158af49 typeethernet autoconnect-priority-999 autoconnectfalse #配置 interface-nameens192 timestamp1786099079 [ethernet] [ipv4] methodauto [ipv6] addr-gen-modeeui64 methodauto [proxy]配置node1网卡[rootk8s-node01 kubernetes-1.29.2-150500.1.1]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 uuid7a754f01-804a-3381-8242-f3429643f1ec typeethernet autoconnect-priority-999 interface-nameens160 timestamp1786104241 [ethernet] [ipv4] methodmanual address1192.168.66.12/24,192.168.66.200 #配置 dns114.114.114.114;8.8.8.8 #配置 [ipv6] addr-gen-modeeui64 methodauto [proxy] [rootk8s-node01 kubernetes-1.29.2-150500.1.1]# cat /etc/NetworkManager/system-connections/ens192.nmconnection [connection] idens192 uuid394b3ad7-a691-394d-a628-0bc4a004c86c typeethernet autoconnect-priority-999 autoconnectfalse #配置 interface-nameens192 timestamp1786104241 [ethernet] [ipv4] methodauto [ipv6] addr-gen-modeeui64 methodauto [proxy]配置node2网卡[rootk8s-node02 kubernetes-1.29.2-150500.1.1]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 uuid7bbd2e55-d0d5-3103-8c6e-de781c58cbe2 typeethernet autoconnect-priority-999 interface-nameens160 timestamp1786103511 [ethernet] [ipv4] methodmanual address1192.168.66.13/24,192.168.66.200 #配置 dns114.114.114.114;8.8.8.8 #配置 [ipv6] addr-gen-modeeui64 methodauto [proxy] [rootk8s-node02 kubernetes-1.29.2-150500.1.1]# cat /etc/NetworkManager/system-connections/ens192.nmconnection [connection] idens192 uuidae4c7050-520d-30da-9231-7234d8bd736f typeethernet autoconnect-priority-999 autoconnectfalse #配置 interface-nameens192 timestamp1786103511 [ethernet] [ipv4] methodauto [ipv6] addr-gen-modeeui64 methodauto [proxy]2、其他配置1、# Rocky 系统软件源更换 sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \ -i.bak \ /etc/yum.repos.d/[Rr]ocky*.repo dnf makecache 2、# 防火墙修改 firewalld 为 iptables systemctl stop firewalld systemctl disable firewalld yum -y install iptables-services systemctl start iptables iptables -F systemctl enable iptables service iptables save 3、# 禁用 Selinux setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config grubby --update-kernel ALL --args selinux0 # 查看是否禁用grubby --info DEFAULT # 回滚内核层禁用操作grubby --update-kernel ALL --remove-args selinux 4、# 设置时区 timedatectl set-timezone Asia/Shanghai # 关闭 swap 分区 # 临时关闭立即生效 swapoff -a # 永久关闭修改 fstab注释掉 swap 相关行 sed -i s/.*swap.*/#/ /etc/fstab # 验证 swap 是否已关闭 free -h 5、# 修改主机名 hostnamectl set-hostname k8s-node013个机器分别设置为k8s-master01、k8s-node01、k8s-node02 6、# 安装 ipvs yum install -y ipvsadm 7、# 开启路由转发 echo net.ipv4.ip_forward1 /etc/sysctl.conf sysctl -p 8、# 加载 bridge yum install -y epel-release yum install -y bridge-utils modprobe br_netfilter echo br_netfilter /etc/modules-load.d/bridge.conf echo net.bridge.bridge-nf-call-iptables1 /etc/sysctl.conf echo net.bridge.bridge-nf-call-ip6tables1 /etc/sysctl.conf sysctl -p3、三个机器都修改hosts如下[rootk8s-node02 kubernetes-1.29.2-150500.1.1]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.66.11 k8s-master01 m1 192.168.66.12 k8s-node01 n1 192.168.66.13 k8s-node02 n2 192.168.66.14 harbor三、3个机器都装docker和如下配置1、# 添加 docker-ce yum 源 # 中科大(ustc) sudo dnf config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo cd /etc/yum.repos.d # 切换中科大源 sed -e s|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g docker-ce.repo 2、# 安装 docker-ce yum -y install docker-ce 3、# 配置 daemon. cat /etc/docker/daemon.json EOF { data-root: /data/docker, exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m, max-file: 100 }, insecure-registries: [harbor.xinxainghf.com], registry-mirrors: [ https://kfp63jaj.mirror.aliyuncs.com, https://hub-mirror.c.163.com, https://mirror.baidubce.com, https://registry.docker-cn.com, https://mirror.ccs.tencentyun.com, https://docker.mirrors.ustc.edu.cn, https://docker.1ms.run, https://hub.rat.dev, https://docker.1panel.live ] } EOF 4、mkdir -p /etc/systemd/system/docker.service.d 5、# 重启docker服务 systemctl daemon-reload systemctl restart docker systemctl enable docker reboot 6、# 安装 cri-docker wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz tar -xf cri-dockerd-0.3.9.amd64.tgz cp cri-dockerd/cri-dockerd /usr/bin/ chmod x /usr/bin/cri-dockerd 7、# 配置 cri-docker 服务 cat EOF /usr/lib/systemd/system/cri-docker.service [Unit] DescriptionCRI Interface for Docker Application Container Engine Documentationhttps://docs.mirantis.com Afternetwork-online.target firewalld.service docker.service Wantsnetwork-online.target Requirescri-docker.socket [Service] Typenotify ExecStart/usr/bin/cri-dockerd --network-plugincni --pod-infra-container-imageregistry.aliyuncs.com/google_containers/pause:3.8 ExecReload/bin/kill -s HUP $MAINPID TimeoutSec0 RestartSec2 Restartalways StartLimitBurst3 StartLimitInterval60s LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Delegateyes KillModeprocess [Install] WantedBymulti-user.target EOF 8、# 添加 cri-docker 套接字 cat EOF /usr/lib/systemd/system/cri-docker.socket [Unit] DescriptionCRI Docker Socket for the API PartOfcri-docker.service [Socket] ListenStream%t/cri-dockerd.sock SocketMode0660 SocketUserroot SocketGroupdocker [Install] WantedBysockets.target EOF 9、# 启动 cri-docker 对应服务 systemctl daemon-reload systemctl enable cri-docker systemctl start cri-docker systemctl is-active cri-docker四、安装kubenates说明我的安装也是根据bilibili的薪享宏福学习的详细教程可以关注他。安装包下载地址如下百度网盘 请输入提取码#把安装包kubernetes-1.29.2-150500.1.1.tar.gz放在master机器的/home目录下 cd /home/ #解压 tar -zxvf kubernetes-1.29.2-150500.1.1.tar.gz #进入该目录 cd kubernetes-1.29.2-150500.1.1 #安装所有rpm安装包 yum -y install * #把安装包同步到k8s-node01、k8s-node02机器上注意同步完也记得在其他2机器上执行安装和自启动命令 scp -r /home/kubernetes-1.29.2-150500.1.1 rootn1:/home/ scp -r /home/kubernetes-1.29.2-150500.1.1 rootn2:/home/ #开机自启动 systemctl enable kubelet.service五、初始化master和node初始化kubeadm init --apiserver-advertise-address192.168.66.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.2 --service-cidr10.10.0.0/12 --pod-network-cidr10.244.0.0/16 --ignore-preflight-errorsall --cri-socket unix:///var/run/cri-dockerd.sock注意如果初始化失败需要删除缓存的初始化文件# 使用 kubeadm reset 清理所有 K8s 数据 kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock -f # 删除所有残留目录 rm -rf /etc/kubernetes rm -rf /var/lib/kubelet rm -rf /var/lib/etcd rm -rf /var/lib/cni/ rm -rf /etc/cni/ rm -rf /var/lib/etcd/member添加master01的节点#注意下面3行命令是初始化时生成的 [rootk8s-master01 ~]# mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config [rootk8s-master01 ~]# #查看已添加进来 [rootk8s-master01 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master01 NotReady control-plane 60m v1.29.2添加k8s-node01、k8s-node02节点分别在k8s-node01、k8s-node02节点执行如下命令这个命令也是初始化时生成的后面的--cri-socket unix:///var/run/cri-dockerd.sock是我自己添加的作用 kubeadm join 192.168.66.11:6443 --token e5nq79.aiixe3wg9mjrv2tw \ --discovery-token-ca-cert-hash sha256:86ad9c50a7037a8824d83cef6d074258a8e77b0dafcf1bdefccc1a2813ec22cf --cri-socket unix:///var/run/cri-dockerd.sockk8s-node执行如上命令时遇到master防火墙设置的坑#这个规则是我node无法telnet master 9 203 18745 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 这是默认防火墙firewalld的遗留规则即使 firewalld 服务已停止但 iptables 规则依然存在。 处理: # 清空 INPUT 链 iptables -F INPUT # 重新设置默认策略为 ACCEPT iptables -P INPUT ACCEPT2个node执行完命令后master查看node就可以看到2个node了[rootk8s-master01 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master01 NotReady control-plane 3h53m v1.29.2 k8s-node01 NotReady none 32s v1.29.2 k8s-node02 NotReady none 4s v1.29.2 [rootk8s-master01 ~]#六、部署网络插件calico.zip可以通过上面网盘获得然后3台机器都执行如下操作#去网盘了找到calico.zip,这里有calico的镜像 #解压 #unzip calico.zip #cd calico #tar -zxvf calico-images.tar.gz #cd calico-images #导入镜像 #docker load -i calico-cni-v3.26.3.tar #docker load -i calico-kube-controllers-v3.26.3.tar #docker load -i calico-node-v3.26.3.tar #docker load -i calico-typha-v3.26.3.tar再master节点把calico的部署文件应用在该主机上。#注意这个calico-typha.yaml要关闭ipip,以及配置pod的网段时和初始化master设置的网段一样网盘里的这个yaml文件已经设置过了 kubectl apply -f calico-typha.yaml到此k8s就算部署成功了但是我的有controllers、coredns不正常#查看pod是否都正常 [rootk8s-master01 calico]# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-558d465845-jr76v 0/1 Running 6 (3m38s ago) 10m kube-system calico-node-4ktgm 1/1 Running 0 10m kube-system calico-node-l5jbs 1/1 Running 0 10m kube-system calico-node-x7bb2 1/1 Running 0 10m kube-system calico-typha-5b56944f9b-9tx54 1/1 Running 0 10m kube-system coredns-857d9ff4c9-k7p6s 0/1 Running 0 7h14m kube-system coredns-857d9ff4c9-v5cv8 0/1 Running 0 7h14m kube-system etcd-k8s-master01 1/1 Running 0 7h14m kube-system kube-apiserver-k8s-master01 1/1 Running 0 7h14m kube-system kube-controller-manager-k8s-master01 1/1 Running 0 7h14m kube-system kube-proxy-f7sl4 1/1 Running 0 3h20m kube-system kube-proxy-mc85r 1/1 Running 0 7h14m kube-system kube-proxy-sd9sd 1/1 Running 0 3h20m kube-system kube-scheduler-k8s-master01 1/1 Running 0 7h14m原因因为我的node01、node02没清理好防火墙规则导致calico、dns、controllers没成功#重置node01、node02防火墙规则 # 清空 INPUT 链 iptables -F INPUT # 重新设置默认策略为 ACCEPT iptables -P INPUT ACCEPT # 删除 CoreDNS Pod会自动重建 kubectl delete pods -n kube-system -l k8s-appkube-dns # 删除所有 Calico-node Pod会自动重建之前calico虽然正常但是我node1、node2网络规则重置了所以重新弄一下calico kubectl delete pods -n kube-system -l k8s-appcalico-node # 删除 calico-kube-controllers会自动重建 kubectl delete pods -n kube-system -l k8s-appcalico-kube-controllers # 等待 10 秒 sleep 10重启电脑后k8s集群有的colico等没启动。执行如下脚本整理3台机器的防火墙规则。#!/bin/bash echo echo 永久固化防火墙规则 - Kubernetes 集群 echo echo 1. 禁用 firewalld systemctl stop firewalld 2/dev/null systemctl disable firewalld 2/dev/null systemctl mask firewalld 2/dev/null echo 2. 禁用 nftables systemctl stop nftables 2/dev/null systemctl disable nftables 2/dev/null systemctl mask nftables 2/dev/null echo 3. 禁用 iptables 服务 systemctl stop iptables 2/dev/null systemctl disable iptables 2/dev/null systemctl mask iptables 2/dev/null echo 4. 清空所有 iptables 规则 iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT echo 5. 保存 iptables 规则 iptables-save /etc/iptables/rules.v4 2/dev/null iptables-save /etc/sysconfig/iptables 2/dev/null service iptables save 2/dev/null echo 6. 重启 kubelet systemctl restart kubelet echo 7. 验证防火墙状态 echo firewalld: $(systemctl is-active firewalld 2/dev/null || echo inactive) echo iptables INPUT 链策略: $(iptables -L INPUT -n | head -1 | awk {print $4}) echo echo 防火墙规则已永久固化 echo 七、启动顺序3台服务器重启k8s启动顺序如下 Kubernetes 组件完整启动顺序6个阶段第一阶段操作系统初始化systemd服务器开机后Linux 内核启动systemdPID 1作为所有进程的“老祖宗”率先运行。它负责根据系统配置拉起后续的各种系统服务。第二阶段容器运行时启动Docker cri-dockerd此时还没有 Kubernetes但必须先把“装东西的仓库”建好。systemd 启动 Dockerdockerd守护进程开始运行但此时 kubelet 还不能直接调用它因为 kubelet 默认使用 containerd 的接口标准 CRI。systemd 启动 cri-dockerdcri-dockerd作为一个适配器垫片启动它监听在unix:///var/run/cri-dockerd.sock让 kubelet 能通过这个接口来指挥 Docker 创建容器。第三阶段Kubelet 进程启动关键节点systemd 启动 kubelet 进程你之前ps看到的 PID 2209。这是第一个也是唯一一个以宿主机进程形式运行的 K8s 组件。此时kubelet 并不知道自己要管什么它只是连接上了刚才的cri-dockerd.sock并开始持续监控/etc/kubernetes/manifests/这个目录。第四阶段控制平面静态 Pod 启动核心组件当你执行kubeadm init后会在/etc/kubernetes/manifests/目录生成etcd.yaml、kube-apiserver.yaml等文件。kubelet 发现清单文件kubelet 监控到目录变化立即通过 cri-dockerd 调用 Docker 创建容器。容器启动顺序存在内部依赖但 kubelet 会同时拉起etcd 容器优先启动因为 API Server 依赖它存数据。kube-apiserver 容器启动集群的大脑所有操作都要经过它。当 API Server 确认 etcd 已连接后kube-controller-manager 和 kube-scheduler 容器才真正开始工作它们需要监听 API Server 来干活。此时你执行docker ps就能看到这些容器了控制平面就算“活”了。第五阶段Node 节点向集群注册API Server 启动后kubelet 进程会拿着自己的证书/etc/kubernetes/kubelet.conf向 API Server 发起请求把自己这个节点注册到集群中。此时kubectl get nodes才能看到这台机器。第六阶段网络插件与工作负载 Pod 启动控制平面运行后你通常会执行kubectl apply -f calico.yaml安装网络插件CNI。Calico、CoreDNS 等作为普通的 Pod非静态被调度起来。这时集群才完全就绪可以部署业务应用了。

相关新闻

2026/8/26 17:50:15

腾讯科恩实验室 一面 三

一、主流 LLM 开发框架对比围绕“开发—部署—应用”三个层次,几款主流框架的定位如下:框架定位核心优势适用场景Ollama本地轻量化部署一键加载、内置 Web UI、极简上手个人本地实验、快速原型验证vLLM高性能推理PagedAttention、超高并发吞吐生产级 API…

2026/8/26 17:50:15

第05章 内核代码(12):调度中枢的灵魂剖析——逐行拆解 sched.c 的进程管理、睡眠唤醒与时间脉搏

免责声明 本文内容仅限技术学习与交流使用。文中涉及的代码、数据结构及算法基于 1991 年的 Linux 0.11 内核源代码。现代 Linux 内核(2.6.x 及以上)的调度器(CFS)、睡眠机制(等待队列)和同步原语(互斥锁)已发生翻天覆地的变化。若将文中所述的早期代码逻辑直接迁移至当…

2026/8/26 17:50:15

腾讯科恩实验室 一面 四

目录一、DeepSeek-R1 的思维链(CoT)原理1.1 思维链到底是什么1.2 DeepSeek-R1 是怎么"学会思考"的1.3 思维链的本质:三个关键特征1.4 信息论视角:CoT 为什么有效1.5 架构支撑:MoE 混合专家1.6 解码策略的严谨…

2026/8/26 18:45:40

Deep Learning for Computer Vision——Recurrent Neural Networks

第一部分:为什么需要 RNN?(序列建模问题)传统 CNN 和全连接网络(FC)的输入和输出大小是固定的(比如 224x224 的图片输入,输出 1000 个类别)。 但现实中有很多任务输入或输…

2026/8/26 18:45:40

对刀仪维护大全气路镜头密封件校准周期一文讲透

对刀仪维护大全:气路/镜头/密封件/校准周期一篇文章讲透数据来源说明:本文维护建议基于雷尼绍(Renishaw)、马波斯(Marposs)、波龙(BLUM-Novotest)官方技术手册整理。一、三种对刀仪的…

2026/8/26 18:45:40

深入理解 AI Agent · AGENT #03:从单 Agent 到多 Agent

📘 《深入理解 AI Agent》系列 第八篇 | AGENT-03 前篇回顾:Agent 基础篇 #01 从LLM到Agent → Agent 基础篇 #02 四大核心机制 → Agent 基础篇 #03 从单Agent到多Agent 开篇:单 Agent 能走多远? 做 AI Agent 的开发者常有一个…

2026/8/26 18:40:40

一个按钮颜色赚千万?那些改变产品命运的AB测试

在流量红利趋近枯竭的当下,互联网行业早已告别“粗犷扩张、野蛮生长”的时代。曾经靠新增流量就能拉动的营收增长,如今只能依托精细化运营、微小体验优化寻找增量。很多人难以想象:一款产品的命运转折,一次千万级、亿级的营收跃升…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…