部署云原生边缘计算平台kubeedge
文章目录
- 1、kubeedge架构
- 2、基础服务提供 负载均衡器 metallb
- 2.1、开启ipvc模式中的strictARP
- 2.2、部署metalb
- 2.2.1、创建IP地址池
- 2.2.2、开启二层转发,实现在k8s集群节点外访问
- 2.2.3、测试
- 3、部署cloudcore
- 3.1、部署cloudcore
- 3.2、修改cloudcore的网络类型
- 4、部署edgecore
前提:已经搭建好一套k8s集群。
1、kubeedge架构

2、基础服务提供 负载均衡器 metallb
由于需要为cloudcore与edeecore提供通信地址,建议使用LB为cloudcOre提供公网IP或K8S集群节点相同网段lP地址,实际生产中使用的是公网IP地址。
2.1、开启ipvc模式中的strictARP
kubectl edit configmap -n kube-system kube-proxy

如果不开启ipvs中的strictARP,那么数据在集群之外无法访问到。
#重新运行,使得上述改变生效
kubectl rollout restart daemonset kube-proxy -n kube-system
2.2、部署metalb
注意版本v0.13.5
为cloudcore提供初始化的网络ip,方便跟edgecore进行通信连接。
#运行此命令,将metalb部署到k8s集群中
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
查看状态
kubectl get pods n metallb-system

2.2.1、创建IP地址池
为了给服务分配一个IP,首先创建IPAddressPool 网段地址池,通过IPAddressPools分配的IP构成IP池,MetalLB使用该IP池将IP分配给服务。
vim first-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:name: first-poolnamespace: metallb-system
spec:addresses:- 172.23.144.240-172.23.144.250
kubectl apply -f first-pool.yaml
kubectl get ipaddresspool -n metallb-system

2.2.2、开启二层转发,实现在k8s集群节点外访问
- 2层配置
2层模式是最简单的配置:在许多情况下,您不需要任何特定于协议的配置,只需要IP地址。
2层模式不需要将IP绑定到工作节点的网络接口。它的工作原理是直接响应本地网络上的ARP请求,将机器的MAC地址提供给客户端。
为了播发来自IPAddressPool的IP,必须将L2Advertisement实例关联到IPAAddressPool。
vim l2forward.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:name: examplenamespace: metallb-system
kubectl apply -f l2forward.yaml

将所有的地址通告出去。
2.2.3、测试
部署一个nginx deployment应用。
service的类型是loadbalancer,nginx-svc获得一个与k8s集群节点相同网段的ip地址,它是从创建的地址池中分配的;这个ip地址是自动分配的,一般是从网段的第一个开始分配的,也就是240.
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:selector:matchLabels:app: nginxreplicas: 1 # 指定Pod副本数template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latest # 使用nginx镜像
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:type: LoadBalancerports:- port: 80targetPort: 80selector:app: nginx
kubectl apply -f nginx.yaml
kubectl get pod
kubectl get svc

集群内任意节点外网ip+32290端口访问:

测试完毕后记着删除:
kubectl delete -f nginx.yaml
3、部署cloudcore
3.1、部署cloudcore
具体部署方法详见kubesphere官网,进行开启边缘节点功能。
确保集群中已经部署好cloudcore:
kubectl get pod -n kubeedge

3.2、修改cloudcore的网络类型
修改cloudcore的网络类型为loadbalance,此时它的外部ip会自动填充。
- 修改前:
kubectl get svc -n kubeedge

- 修改后:
#修改cloudcore的服务网络
kubectl edit svc cloudcore -n kubeedge
#查看cloudcore的服务网络
kubectl get svc -n kubeedge -owide


修改边缘节点的容忍度
kubectl get daemonset -n kube-system | grep -v NAME | awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-system --type='json' -p='[{"op":"replace", "path":"/spec/template/spec/affinity", "value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'
kubectl get daemonset -n metallb-system | grep -v NAME | awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n metallb-system --type='json' -p='[{"op":"replace", "path":"/spec/template/spec/affinity", "value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'
下载安装metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl get pods -n kube-system
设置不要证书:
kubectl patch deploy metrics-server -n kube-system --type='json' p='[{"op":"add","path": "/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'
4、部署edgecore
获取token,从master节点:
#master节点获取token
keadm gettoken#边缘节点添加token变量
TOKEN=09a9f5b068f206ce30934076eb3d045fa826a0fa17d4050e4bf4ad7b4bcda103.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTE2MjM5NTh9.vdzI6snHBGPO-sHdnJqZWUerXbq5-p2-GZX1jRRgUZ4#边缘节点添加server
SERVER=
相关文章:
部署云原生边缘计算平台kubeedge
文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发,实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…...
Java设计模式:单例模式详解
设计模式:单例详解 文章目录 设计模式:单例详解一、单例模式的原理二、单例模式的实现推荐1、饿汉模式2、静态内部类 三、单例模式的案例四、单例模式的使用场景推荐总结 一、单例模式的原理 单例模式听起来很高大上,但其实它的核心思想很简…...
Qt5.14.2 定时器黑魔法,一键唤醒延时任务
在图形界面程序的世界里,有这么一个需求无处不在:在特定的时间间隔后,执行一段特殊的代码。比如说30秒后自动保存文档、500毫秒后更新UI界面等等。作为资深Qt程序员,我相信各位一定也曾为实现这种"延时任务"而绞尽脑汁。今天&#…...
C++项目——集群聊天服务器项目(九)客户端异常退出业务
服务器端应检测到客户端是否异常退出,因此本节来实现客户端异常退出,项目流程见后文 一、客户端异常退出业务流程 (1)在业务模块定义处理客户端异常退出的函数 (2)集群聊天服务器项目(八)提到…...
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信 文章目录 STM32CubeIDE基础学习-HC05蓝牙模块和手机通信前言第1章 硬件连接第2章 工程配置第3章 代码编写3.1 手机指令控制LED 第4章 实验现象总结 前言 前面的文章学习了串口通过轮询和中断的简单使用方法,现在就来用…...
npm mongoose包下载冲突解决之道
我在新电脑下载完项目代码后,运行 npm install --registryhttps://registry.npm.taobao.org 1运行就报错: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: lowcode-form-backend1.0.0 npm …...
26. UE5 RPG同步面板属性(二)
在上一篇,我们解析了UI属性面板的实现步骤: 首先我们需要通过c去实现创建GameplayTag,这样可以在c和UE里同时获取到Tag创建一个DataAsset类,用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 并且…...
五、postman基础使用案例
postman基础使用 相关案例【传递查询参数】【提交表单数据】【提交JSON数据】 注:postman⼀款⽀持调试和测试的⼯具,开发、测试⼯程师都可以使⽤。方法一般统一为:方法→请求头→请求体→断言 相关案例 【传递查询参数】 访问TPshop搜索商品的…...
Git合并利器:Vimdiff使用指南
使用 vimdiff 作为 Git 的合并工具确实可能会让新手感到困惑,但它是一个功能强大的工具,一旦掌握了它,就可以非常高效地进行代码合并和比较。以下是一个简短的教程,旨在帮助理解 vimdiff 的基本用法以及如何利用它来进行 Git 合并…...
阿里云2核4G服务器租用价格_30元3个月_165元一年_199元
阿里云2核4G服务器租用优惠价格,轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图: 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…...
<QT基础(2)>QScrollArea使用笔记
项目需要设置单个检查的序列图像预览窗口,采用QScrollArea中加入QWidget窗口,每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容 引入QWidget 引入label插入图像(resize) 引入布局 组织 scrollArea内部自带Qwidget&#…...
springboot企业级抽奖项目业务四 (缓存预热)
缓存预热 为什么要做预热: 当活动真正开始时,需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…...
opejdk11 java 启动流程 java main方法怎么被jvm执行
java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…...
link 样式表是否会阻塞页面内容的展示?取决于浏览器,edge 和 chrome 会,但 firefox 不会。
经过实测: 在 head 中 link 一个 1M 大小的样式表。设置网络下载时间大概为 10 秒。 edge 和 chrome 只有在下载完样式表后,页面上才会出现内容。而 firefox 可以直接先显示内容,然后等待样式表下载完成后再应用样式。 DOMContentLoaded 事…...
uniapp对接极光推送(国内版以及海外版)
勾选push,但不要勾选unipush 国内版 网址:极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台,并选择对应应用开始配置 配置安卓包名 以及ios推送证书,是否将生产证书用于开发环境选择是 ios推送证书…...
智慧城市数字孪生,综合治理一屏统览
现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…...
在Java中对SQL进行常规操作的通用方法
SQL通用方法 一、常规方法增删改查二、具体优化步骤1.准备工作2.getcon()方法,获取数据库连接对象3.closeAll()方法,关闭所有资源4.通用的增删改方法5.通用的查询方法6.动态查询语句 总结 一、常规方法增删改查 在常规方法中,我们在Java中对…...
JavaSE day16笔记 - string
第十六天课堂笔记 学习任务 Comparable接口★★★★ 接口 : 功能的封装 > 一组操作规范 一个抽象方法 -> 某一个功能的封装多个抽象方法 -> 一组操作规范 接口与抽象类的区别 1本质不同 接口是功能的封装 , 具有什么功能 > 对象能干什么抽象类是事物本质的抽象 &…...
java将文件转成流文件返回给前端
环境:jdk1.8,springboot2.5.3,项目端口号:9100 1.待转换的文件 一、路径 二、文件内容 2.controller中代码 package com.example.pdf.controller;import com.example.pdf.service.GetFileStreamService; import org.springframework.web.b…...
使用Node.js常用命令提高开发效率
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具,可以帮助开发者更高效地开发应用程序。在日常开发中,除了Node.js本身的核心功能外,npm&#x…...
从ShareGPT项目拆解现代全栈开发:Next.js、Serverless与Chrome扩展实战
1. 项目概述与核心价值如果你和我一样,经常在ChatGPT里进行一些天马行空的对话,从构思一部科幻小说的世界观,到一步步推导一个复杂的编程问题,再到让它扮演苏格拉底和你辩论哲学,这些对话记录本身就是宝贵的数字资产。…...
Vitis HLS里给LED闪烁函数‘打标签’:深入解读ap_hs与ap_none协议的选择与实战影响
Vitis HLS中LED闪烁函数接口协议深度解析:ap_hs与ap_none的硬件实现差异与工程选择 在FPGA开发中,Vitis HLS作为高级综合工具,能够将C代码转换为可综合的硬件描述语言。然而,许多开发者在使用过程中常常忽略一个关键细节——函数…...
告别AT指令恐惧症:用ESP-01S和51单片机,5分钟搞定手机远程开关灯
从零到一的智能家居初体验:ESP-01S与51单片机极简联动方案 第一次接触物联网硬件开发时,那些密密麻麻的AT指令确实容易让人望而生畏。但当我真正用ESP-01S模块配合最基础的51单片机,在五分钟内实现了手机远程开关LED灯的那一刻,所…...
3大核心功能,让你的惠普OMEN游戏本性能彻底解放
3大核心功能,让你的惠普OMEN游戏本性能彻底解放 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软件过于臃肿而烦恼吗…...
从零搭建短剧生成AI
当AI遇上短剧创作,会产生怎样的火花?从抖音的1分钟小剧场到YouTube的3分钟微电影,短剧已成为最受欢迎的内容形式之一。而AI,正在让这种创作变得触手可及。AI时代的内容创作革命在数字内容爆炸式增长的时代,短剧以其紧凑…...
别再复制粘贴了!手把手教你用MATLAB/Simulink把低通滤波器写成C代码(附避坑指南)
从MATLAB到嵌入式C:低通滤波器工程化实现全指南 在嵌入式系统开发中,数字滤波器的实现往往成为算法落地的关键瓶颈。许多工程师能够熟练使用MATLAB设计出完美的滤波器模型,却在将其转化为实际可用的C代码时频频碰壁——仿真曲线平滑优美&…...
Go-sniffer高级用法指南:自定义过滤规则和协议扩展开发终极教程
Go-sniffer高级用法指南:自定义过滤规则和协议扩展开发终极教程 【免费下载链接】go-sniffer 项目地址: https://gitcode.com/gh_mirrors/go/go-sniffer Go-sniffer是一款功能强大的网络嗅探工具,专为开发者和运维人员设计,能够实时抓…...
别再只用rand()了!Qt 5.10+ 的 QRandomGenerator 让你的随机数更安全、更高效
别再只用rand()了!Qt 5.10 的 QRandomGenerator 让你的随机数更安全、更高效 在开发过程中,随机数生成是一个看似简单却暗藏玄机的功能。许多开发者习惯性地使用C标准库中的rand()函数,殊不知这种做法在现代软件开发中已经显得力不从心。rand…...
Windows 10/11 下 Node.js 安装踩坑实录:为鸿蒙HarmonyOS开发扫清环境障碍
Windows 10/11 下 Node.js 安装踩坑实录:为鸿蒙HarmonyOS开发扫清环境障碍 当你在Windows系统上准备搭建鸿蒙HarmonyOS开发环境时,Node.js的安装往往是第一个拦路虎。不同于官方文档中"下一步到底"的理想化流程,真实场景中你会遇到…...
【C++ 多态】虚函数 · 虚表 · 重写,一篇彻底弄明白!
C 多态详解 C多态是面向对象的核心灵魂,本文将由浅入深,带你循序渐进地掌握多态的方方面面,全程干货,坐稳发车~ ദ്ദി˶ー̀֊ー́ )✧ 文章目录C 多态详解1. 什么是多态?2. 运行时多态的实现前…...
