KubeEdge+MetalLB云边协同负载均衡:裸机离线部署实践
简介面向Kubeedge新手与边缘计算运维人员这套部署资源聚焦于在Centos7.9中基于K8s v1.22.17(kubeadm)集成Kubeedge v1.13.1并引入MetalLB负载均衡器对外暴露服务解决高可用访问问题。压缩包共15个文件包含7个YAML配置、6个TAR镜像、1个Markdown部署文档和1个GZ安装包整体474.64MBYAML负责编排组件与LoadBalancer策略TAR/GZ用于离线加载镜像和工具MD文档则串联整个安装流程。目前已有242人浏览学习适合希望按部就班复现边缘集群的初学者。内容从系统准备、K8s集群搭建起步覆盖Kubeedge部署、MetalLB配置、测试实例与验证结果并附有排错要点使读者能快速搭建可运行的负载均衡版Kubeedge环境。1. KubeEdge 部署的拦路虎不只是装个 EdgeCore把 KubeEdge 跑起来这件事90% 的教程会告诉你 keadm init、keadm join 两行命令完事但你真去复现就会发现云边通道握手失败、CloudCore 起不来、边缘节点调度不了 Pod、LoadBalancer 拿到 EXTERNAL-IP 但流量进不来。这个资源包的设置是把 CentOS7.9、Kubernetes v1.22.17、KubeEdge v1.13.1 和 MetalLB 负载均衡器串成一条完整链路所有离线镜像和 YAML 都给你备好跟着一步步走就能得到一个云边协同 负载均衡可用的集群。适合刚接触 KubeEdge 的部署人员也适合准备在裸机环境里跑边缘计算实验的人。2. 集群地基为什么非得是 CentOS7.9 K8s v1.22.172.1 版本匹配的第一道坎KubeEdge 对 Kubernetes 的版本窗口KubeEdge v1.13.1 官方支持的 Kubernetes 版本范围是 v1.22.0 到 v1.24.0这个窗口卡得很死。版本太新CloudCore 与 API Server 的协议兼容性就会出现问题比如 informer 缓存不一致、watch 断流版本太旧很多 CRD 字段又不存在。kubeadm 部署 v1.22.17 是社区验证比较多的一条主线在 etcd 3.5、containerd 1.6 的组合下表现稳定这也是资源里选这个版本的原因。还有一个容易被忽略的点KubeEdge 的 keadm 二进制是分架构的这个压缩包提供的是 linux-amd64 版本所以控制节点和边缘节点都得是 x86_64 架构纯 arm64 机器上直接用会报“exec format error”。也不建议在一个集群里混用不同大版本的 KubeEdge否则 CloudCore 与 EdgeCore 的 websocket 协议握手会失败。2.2 控制节点初始化系统参数与镜像源一次配到位CentOS7.9 装完后先做三件事关 swap、放行防火墙端口、配内核转发参数。防火墙是 KubeEdge 云边通道最常见的隐性杀手端口 10000HTTP和 10002HTTPS没放行的话边缘节点会在 join 阶段反复超时。# 关闭 swap 并注释 /etc/fstab 中 swap 行 swapoff -a sed -i / swap / s/^/#/ /etc/fstab # 内核参数ip_forward 和 bridge-nf 必须打开 cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 net.ipv6.conf.all.forwarding 1 EOF sysctl --system # 放行 Kubernetes 与 KubeEdge 所需端口 firewall-cmd --permanent --add-port6443/tcp firewall-cmd --permanent --add-port2379-2380/tcp firewall-cmd --permanent --add-port10250/tcp firewall-cmd --permanent --add-port10000/tcp firewall-cmd --permanent --add-port10002/tcp firewall-cmd --reload这里 net.bridge.bridge-nf-call-iptables 确保经过网桥的流量也能被 iptables 规则处理Calico 的 overlay 网络全靠它10000/10002 是 KubeEdge 云边通道的守门员前者用于 HTTP后者用于 HTTPS后面部署 EdgeCore 时缺一不可。镜像源方面我一般习惯提前把 kubeadm 需要的组件镜像通过 docker pull 拉下来导出再用 ctr -n k8s.io import 导入 containerd避免初始化时卡在镜像拉取。2.3 kubeadm init 的参数选择与 Calico 的落地初始化命令用--control-plane-endpoint还是--apiserver-advertise-address在这个场景里有个讲究。资源里的架构使用了负载均衡器但控制节点本身就是 LoadBalancer 的流量入口所以这里直接用 apiserver 的 VIP 地址做 advertisePod 网段给 10.244.0.0/16 与 Calico 默认网段对齐kubeadm init \ --kubernetes-versionv1.22.17 \ --apiserver-advertise-address192.168.1.100 \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.96.0.0/12 \ --image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config--image-repository指向国内可访问的镜像仓库这个参数覆盖的是 kubeadm 默认的 registry.k8s.io 前缀。因为资源包里有离线镜像 tar所以更稳妥的做法是把镜像先 docker load 再 ctr -n k8s.io import然后去掉这个参数避免初始化时网络抖动。Calico 的部署直接 apply 资源包里的 calico.yaml安装完成确认kubectl get pods -n kube-system里 calico-kube-controllers 和 calico-node 都处于 Running再继续下一步。3. 安装 KubeEdge v1.13.1CloudCore 与 EdgeCore 的分工3.1 云边架构ControlPlane 上跑什么边缘节点上跑什么KubeEdge 安装不像 K8s 那样一条命令完成它拆成两块CloudCore 运行在云端控制节点负责与 Kubernetes API Server 通信、下发资源变更、维护设备 CRDEdgeCore 运行在边缘节点内部又分两个关键进程——EdgeController 做 Pod 生命周期管理Edgestream 专门处理 Pod 访问日志和 exec。这两个进程分别对应 keadm join 时的--cloudcore-ipport只需要填 CloudCore 的端口而 Pod 内的 kubectl logs/exec 是走独立 stream 隧道协议的。资源包里 coreedge.tar 封装了 cloudcore 和 edgecore 所需的镜像。实际操作顺序是先把 coreedge.tar 导入再执行 keadm init。我先在控制节点准备好 kubernetes config 后再执行初始化命令。预先使用docker load -i 镜像文件的方式离线导入# 在控制节点导入镜像 docker load -i coreedge.tar docker load -i kubeedge.tar docker load -i metrics-server.tar镜像导入完成后确认镜像名很多部署翻车在名字上——云端用的 CloudCore 镜像 tag 是 v1.13.1但 docker load 出来可能带着别的仓库前缀需要 docker tag 成部署 YAML 里写的名字。资源包自带的 kubeedge 目录里有对应的部署文件用docker images | grep kubeedge一一核对即可。3.2 keadm init证书、advertise 地址与 token令牌过期这个问题我踩过至少两次keadm 生成的 token 有时效性时间一长 EdgeCore 就注册不进来。稳妥的做法是把 token 记录下来或使用--token参数显式指定。# 在控制节点初始化 CloudCore ./keadm init \ --advertise-address192.168.1.100 \ --kube-config/root/.kube/config \ --kubeedge-versionv1.13.1 # 查看生成的 token如果忘记 ./keadm gettoken --kube-config/root/.kube/config--advertise-address必须填边缘节点能访问到的地址如果有多网卡这里只填真正通信的那张网卡 IP填错了边缘节点会连不上 websocket。--kube-config指定 kubeconfig 路径执行后 CloudCore 会以 Deployment 形式落在 kubeedge-system 命名空间同时创建证书存放目录/etc/kubeedge/。建议初始化完成后立刻验证 Pod 状态CloudCore 处于 CrashLoopBackOff 时排查日志注意查看kubectl logs -n kubeedge-system的报错信息。3.3 EdgeCore 加入keadm join 与边缘节点 pre-check边缘节点不需要安装 Kubernetes但要预装 docker 和 kubeadm 的部分依赖。EdgeCore 通过 websocket 主动连云端意味着边缘节点只要能访问到 CloudCore 的 10000/10002 端口就行不需要云端主动访问边缘节点这是 KubeEdge 在 NAT 环境下还能工作的原因。加入命令如下# 在边缘节点执行 ./keadm join \ --cloudcore-ipport192.168.1.100:10000 \ --token你的token \ --kubeedge-versionv1.13.1加入后检查两个层面edgecore 进程是否存活ps -ef | grep edgecore以及云端是否看到节点注册成功。云端执行kubectl get nodes看到边缘节点且状态为 Ready 时安装才算真正落地。若节点一直 NotReady多半是边缘节点时钟不同步导致证书校验失败跑一遍ntpdate校准之后再重置 edgecore。3.4 镜像清单核对哪些 tar 用在哪一步resource 包里六个 tar 不是一次性全部导入的按阶段分成三组表格里列清楚避免操作到一半发现镜像缺失镜像文件用途导入时机metrics-server.tar集群资源指标采集K8s 集群初始化后image.tar基础组件补充镜像CloudCore 部署前nginx.tar测试负载均衡示例的镜像测试 LoadBalancer 前coreedge.tarCloudCore / EdgeCore 主镜像keadm init 之前kubeedge.tarKubeEdge 辅助镜像keadm init 之前metallb_image.tarMetalLB controller/speaker 镜像部署 MetalLB 之前镜像导入用docker load还是ctr -n k8s.io images import取决于容器运行时。若容器运行时是 containerd则 K8s 组件镜像要用ctr导入若运行 docker则全部docker load。两种方式不要混用混用的后果是kubectl describe pod里面出现拉取镜像失败的错误。4. 部署 MetalLB 负载均衡器把 LoadBalancer 服务真正跑起来4.1 为什么裸机集群需要 MetalLBService TypeLoadBalancer 的空白地带在云平台上声明一个 LoadBalancer 类型 Service 会获得云厂商提供的 IP但裸机环境没有这个能力Service 会一直处于pending状态。MetalLB 是一个纯二层/协议栈解决方案它通过两种方式提供外部 IP第二种是 BGP把分配的 IP 通告给网络设备。本资源包采用的是 L2 模式spaker 通过 ARP 响应抢占 VIP流量直接进入节点。L2 模式的局限要提前知道所有流量先走选中的节点再转发给 Pod本身是一个干脆的集群转发所以单节点的带宽上限就是带宽的上限。适合边缘计算场景的默认选择节点少、拓扑简单。4.2 安装 MetalLB 与 IP 地址池规划先用资源包里的 metallb-native.yaml 创建 CRD 和 controller然后导入 metallb_image.tar 镜像docker load -i metallb_image.tar kubectl apply -f metallb-native.yaml # 等待 controller 和 speaker 就绪 kubectl get pods -n metallb-system -w等 metallb-controller 和 metallb-speaker 都 Running 后再创建 IP 池和 L2 通告。地址池的规划建议是从宿主机网络中选一段未被 DHCP 占用的地址比如 192.168.1.200-192.168.1.220不要把网关 IP 或您自己的物理 IP 填进去否则会有 ARP 冲突风险。4.3 核心配置IPAddressPool 与 L2Advertisement 的参数细节# first-ipaddresspool.yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.168.1.200-192.168.1.220 autoAssign: true# l2-forward.yamlL2Advertisement 配置 apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2-forward namespace: metallb-system spec: ipAddressPools: - first-pool interfaces: - eth0两个 YAML 配合工作addresses这一段决定了 LoadBalancer Service 拿到的 IP 范围autoAssign: true允许自动分配interfaces这个字段在必须被多次复用的情况下可以留空不填则所有网卡都参与 ARP 应答。还有一种情形是集群存在多网卡比如管理网与业务网分离此时指定interfaces只让业务网卡参与通告。4.4 Speaker 与 Calico 共存时的流量路径Calico 使用 BGP 和 iptables 规则管理 Pod 网络MetalLB 的 speaker 通过 ARP 拿到 VIP 之后数据包路径是外部请求 - 本机 eth0 - Kubernetes Service iptables 规则 - Calico veth - Pod。如果集群同时装了 kube-proxy 的 ipvs 模式也不会与 MetalLB 冲突因为 MetalLB 只管 IP 宣告内核数据转发由 kube-proxy 负责。验证安装是否成功的命令是kubectl get crd | grep metallb能看到 ipaddresspools.metallb.io 和 l2advertisements.metallb.io 这两个 CRD 就说明 CRD 层没问题。5. 常见问题排查四个反复出现的原因与分析5.1 问题kubeadm init 一直卡在拉取镜像现象kubeadm init执行两分钟后停在 “Waiting for the kubelet to boot” 或直接输出拉取镜像超时。原因kubeadm 默认拉取 registry.k8s.io 等官方仓库地址在部分网络环境下直连成功率很低。解决改用--image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers或者先kubeadm config images pull导出后再导入 containerd。这个资源包里的 image.tar 就是干这个用的导入后再执行 init 就不会卡在镜像环节。5.2 问题CloudCore 容器反复重启日志报 “failed to load certificates”现象kubectl logs -n kubeedge-system日志中出现 certificate 相关错误Pod 状态 CrashLoopBackOff。原因执行keadm init前没有让 /etc/kubeedge 目录处于可写状态或之前有多次 init 残留了旧证书。解决删除旧的 /etc/kubeedge 目录重新keadm init。在模块化部署时避免频繁重置资源包里的部署文档描述的就是一个干净的状态。5.3 问题EdgeCore 一直提示 “Fail to connect to broker”现象边缘节点 run keadm join 后edgecore 进程活着但不发心跳云端kubectl get nodes里边缘节点一直是 NotReady。原因云边通信的 10000/10002 端口被防火墙拦截或者--cloudcore-ipport里填写的 IP 边缘节点根本 ping 不通。解决在边缘节点测试telnet 192.168.1.100 10000不通就回到控制节点的防火墙检查通的话再检查 token 是否过期过期则在云端执行keadm gettoken重新赋值。5.4 问题MetalLB 分配了 IP但外部 ping 不通现象kubectl get svc显示 EXTERNAL-IP 有值但从同网段其他主机 ping 该地址不通。原因地址段内有真实设备占用了相同 IP或 L2Advertisement 与 IPAddressPool 的命名空间/名字不匹配。解决先用arping检查 IP 是否被占用再确认kubectl get l2advertisement -n metallb-system的ipAddressPools名字与first-pool完全一致最后确认 MetalLB 部署的命名空间是 metallb-system。6. 端到端验证从 nginx 到 LoadBalancer EXTERNAL-IP 的完整闭环资源包里带了 nginx.tar 和 nginx-loadbalancer.yaml这个组合就是负载均衡功能的最终验证创建一个 LoadBalancer 类型的 Deployment让它拿到地址池里的 IP然后从外部访问服务。我把验证流程固定成了五步每一轮部署 KubeEdge 之后都用这套操作确认链路没有断裂。# 第一步导入 nginx 镜像并启动负载测试应用 docker load -i nginx.tar kubectl apply -f nginx.yaml # 第二步为 Deployment 创建 LoadBalancer 类型 Service kubectl apply -f nginx-loadbalancer.yaml # 第三步观察 Service 是否拿到外部 IP kubectl get svc nginx-loadbalancer -w等待输出中 EXTERNAL-IP 列由pending变成地址池范围内的 IP比如 192.168.1.200说明 MetalLB 的 IPAddressPool 和 L2Advertisement 已正常工作。第四步在集群外的机器访问这个地址得到 nginx 默认页面即通过。第五步是把 Pod 调度到边缘节点验证云边协同的真实效果# 给边缘节点打标签再用 nodeSelector 把测试 Pod 拉过去 kubectl label node 边缘节点名 node-role.kubernetes.io/edgenginx-test kubectl apply -f ./配置文件 # 在 nginx.yaml 里增加 nodeSelector 后 apply算上这一步整个资源包的价值才算完整发挥出来LoadBalancer 分配 IP、外部流量进集群、流量进入边缘节点上的 Pod这条链路把 CloudCore、EdgeCore、MetalLB 三个组件串了起来。验证通过之后资源包里的 kubeedge部署.md 就很适合作为日常操作手册我把里面的命令和实际验证结果对照过一遍里面标注的keadm gettoken、kubectl get nodes检查点都有效即使以后换用其他版本这五步验证法也可以迁移过去。从那以后我每次装完 KubeEdge都会强制走一遍 LoadBalancer 到边缘节点的完整流量测试而不是只看节点状态就宣布部署成功——节点 Ready 只是表面工程像边缘节点上的 Pod 被 DNS 解析到错误 IP 这类小概率问题只有把请求真正打过去才能暴露出来希望帮到你。本文还有配套的精品资源点击获取

相关新闻

在 UltraEdit 中编写 LaTeX 文稿:TaoToken 辅助下的配置与校验技巧

在 UltraEdit 中编写 LaTeX 文稿:TaoToken 辅助下的配置与校验技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 0:11:57 阅读更多 →
BO-LSSVM回归调参实战:贝叶斯优化自动搜索超参数

BO-LSSVM回归调参实战:贝叶斯优化自动搜索超参数

简介:这份资源面向需要做数据回归预测的科研人员与工程技术人员,提供基于贝叶斯优化算法优化最小二乘支持向量机(BO-LSSVM)的完整Matlab实现。它解决的是LSSVM超参数人工调参困难、回归精度不稳定的问题,通过贝叶斯优化…

2026/10/20 0:09:58 阅读更多 →
京东导航栏下拉菜单的前端工程化实践

京东导航栏下拉菜单的前端工程化实践

1. 项目概述:一个被低估的前端交互细节“京东导航栏下拉菜单”这八个字,表面看只是电商网站一个再普通不过的UI组件,但在我过去十年带团队做中大型Web系统重构的经历里,它几乎每年都会成为前端性能优化、可访问性合规和跨端一致性…

2026/10/20 0:11:06 阅读更多 →

最新新闻

Python数据分析与可视化源码包实战:从数据清洗到图表输出的完整链路拆解

Python数据分析与可视化源码包实战:从数据清洗到图表输出的完整链路拆解

简介:这份资源面向希望系统掌握Python数据分析与可视化的学习者,覆盖从编程基础到实战项目的完整技能链路,适合高校学生、转行者及需要处理结构化数据的从业者。压缩包共162个文件,约31.27MB,以67个ipynb实验代码、11个…

2026/10/20 7:58:20 阅读更多 →
QClaw实测:基于大模型的微信数字分身从入门到避坑

QClaw实测:基于大模型的微信数字分身从入门到避坑

1. 项目概述与产品定位拆解1.1 先说清楚:QClaw到底是个什么东西大概几个月前我就留意到了QClaw这个项目,那会儿还是内测灰度阶段,圈子里已经有人开始传“微信里的AI分身”这个概念。这几天全面公测一开,群里热闹得不行。我用了一周…

2026/10/20 7:58:20 阅读更多 →
AI Agent沦为“流氓智能体”:权限失控、提示注入与责任归属全解析

AI Agent沦为“流氓智能体”:权限失控、提示注入与责任归属全解析

前阵子一个做零售的朋友跟我吐槽:他们给客服智能体开了退单权限,结果一个晚上它因为一位客户反复输入“给我退钱”,把同一个小订单退了17次,财务第二天早上脸都绿了。这事本身不大,但它特别能说明问题——当智能体从一…

2026/10/20 7:58:20 阅读更多 →
自动化失败了怎么办?从麦睿菱项目看AI自动化恢复与复盘

自动化失败了怎么办?从麦睿菱项目看AI自动化恢复与复盘

自动化翻车这件事,做AI落地的团队迟早都会遇到一次。麦睿菱是我们内部一个AI自动化改造项目的代号,前后推进了三个多月,结果在试运行阶段就栽了跟头。今天想把它完整复盘一下,重点不是讲成功经验,而是聊聊自动化失败之…

2026/10/20 7:58:20 阅读更多 →
Agent模型选型不再难:运行时路由规则设计与实现

Agent模型选型不再难:运行时路由规则设计与实现

1. 为什么模型选型这件事,最后都变成了路由问题做过 Agent 项目的人大概都有过这么一个阶段:一开始兴致勃勃地对比各家模型,跑分、看榜单、测延迟、算成本,折腾了两周,最后在代码里写下了一个硬编码的模型名字。然后项…

2026/10/20 7:58:20 阅读更多 →
OpenCV基础扫盲:图片数组、BGR颜色与视频帧核心概念详解

OpenCV基础扫盲:图片数组、BGR颜色与视频帧核心概念详解

这一篇原本是写给组里新同学的一份内部分享稿,后来想想干脆整理成公开文章。原因是带了好几次新人,发现大家第一次接触OpenCV时,最痛苦的根本不是算法,也不是深度学习模型,而是连“图片长什么样”“颜色为什么是反的”…

2026/10/20 7:57:19 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →