云原生边缘计算KubeEdge安装配置(二)
1. K8S集群部署,可以参考如下博客
请安装k8s集群,centos安装k8s集群
请安装k8s集群,ubuntu安装k8s集群
请安装kubeedge cloudcore centos安装K8S
2.安装kubEedge
2.1 编辑kube-proxy使用ipvs代理
kubectl edit configmaps kube-proxy -n kube-system #修改kube-proxy
#大约在40多行37 ipvs:38 excludeCIDRs: null39 minSyncPeriod: 0s40 scheduler: ""41 strictARP: true #这里由原来的false修改为true42 syncPeriod: 0s43 tcpFinTimeout: 0s44 tcpTimeout: 0s45 udpTimeout: 0s46 kind: KubeProxyConfiguration47 metricsBindAddress: ""48 mode: "ipvs" #这里原来是空的修改为ipvs49 nodePortAddresses: null50 oomScoreAdj: null51 portRange: ""52 showHiddenMetricsForVersion: ""53 winkernel:54 enableDSR: false55 forwardHealthCheckVip: false56 networkName: ""57 rootHnsEndpointName: ""58 sourceVip: ""
kubectl rollout restart daemonset kube-proxy -n kube-system
kubectl get pods -n kube-system
2.2 基础服务提供,负载均衡器metallb
#无网络情况下,先上传kubeedge.tar 和 metallb-native.yaml文件
docker load -i kubeedge.tar #导入镜像#有网络可以直接拉去镜像
docker pull quay.io/metallb/controller:v0.13.5
docker pull quay.io/metallb/speaker:v0.13.5
wget https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
kubectl apply -f metallb-native.yaml
kubectl get pods -n metallb-system
[root@k8s-master01 ~]# kubectl get pods -n metallb-system
NAME READY STATUS RESTARTS AGE
controller-8d9cf599f-m4x27 1/1 Running 0 23s
speaker-zm7w4 1/1 Running 0 23s
speaker-zww5l 1/1 Running 0 23s
[root@k8s-master01 ~]#
#具体参考官网地址:https://metallb.universe.tf/configuration/#layer-2-configuration
#创建IP地址资源池,原则是跟主机在同一个网段,没有使用的地址,根据自己项目的规模我合理预留了21个IP
cat > first-ippool.yaml << EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:name: first-poolnamespace: metallb-system
spec:addresses:- 192.168.186.200-192.168.186.220
EOF
kubectl apply -f first-ippool.yaml
kubectl get ipaddresspools -n metallb-system
[root@k8s-master01 ~]# kubectl get ipaddresspools -n metallb-system
NAME AGE
first-pool 2m1s
[root@k8s-master01 ~]#
#开启二层转发,实现k8s集群节点外访问
cat > l2forward.yaml << EOF
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:name: examplenamespace: metallb-system
EOFkubectl apply -f l2forward.yaml
#二层转发案例测试
cat > nginx.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginxname: nginximagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:type: LoadBalancerports:- port: 80targetPort: 80selector:app: nginx
EOFkubectl apply -f nginx.yaml
[root@k8s-master01 ~]# kubectl get pods,svc #svc的ip从地址池中分配的
NAME READY STATUS RESTARTS AGE
pod/nginx-5f5c64f949-bhpvf 1/1 Running 0 50sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h43m
service/nginx-svc LoadBalancer 10.99.41.146 192.168.186.200 80:30293/TCP 50s
[root@k8s-master01 ~]#
测试通过
kubectl delete -f nginx.yaml #删除无用的pod和svc
3. 对于kubeEdge概述
KubeEdge由云和边缘组成。它建立在Kubernetes之上,为联网应用部署和云与边缘之间的元数据同步提供核心基础设施支持。所以如果我们想要设置KubeEdge,我们需要设置Kubernetes集群(可以使用现有的集群),云端和边缘端在cloud side, 我们需要安装
Docker
Kubernetes cluster
cloudcore
在 edge side, 我们需要安装
Docker
MQTT (配置可以选用,不是一定需要)
edgecore
3.部署kubeedge cloudcore
3.1 获取keadm工具
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.1/keadm-v1.12.1-linux-amd64.tar.gztar -zxvf keadm-v1.12.1-linux-amd64.tar.gz
cp keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/
keadm version
3.2 部署cloudcore
#在master上部署
#设置云端 使用keadm初始化,安装cloudcore
docker pull kubeedge/cloudcore:v1.14.2
docker pull kubeedge/iptables-manager:v1.14.2keadm init --advertise-address=192.168.110.100 --kubeedge-version=1.12.1 #这是master的ip,互联网用这种形式keadm init --advertise-address=192.168.186.200 --set iptablesManager.mode="external" --profile version=v1.12.1 #这里的IP是负载均衡器metallb分配的IP#以上参数分别为master节点地址和要安装的KubeEdge版本。#keadm reset #安装错误可以重置
keadm gettoken #获取token
[root@k8s-master01 ~]# keadm init --advertise-address=192.168.186.200 --set iptablesManager.mode="external" --profile version=v1.14.2
Kubernetes version verification passed, KubeEdge installation will start...
CLOUDCORE started
=========CHART DETAILS=======
NAME: cloudcore
LAST DEPLOYED: Mon Oct 9 15:25:36 2023
NAMESPACE: kubeedge
STATUS: deployed
REVISION: 1
[root@k8s-master ~]# keadm gettoken
3b917d79963d290608f00b2c567808bbf37f99379efdb4a2848ddd2d2713cb52.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTY5NDc2NTl9.1DQ6GwR687bpyR_8q-Xf2HwFfLeUdZ2oqYrYkEyNEEo[root@k8s-master ~]#
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 58d
kube-node-lease Active 58d
kube-public Active 58d
kube-system Active 58d
kubeedge Active 8m44s #在这个空间中中
kubernetes-dashboard Active 58d
metallb-system Active 57d
[root@k8s-master ~]# kubectl get pods,svc -n kubeedge
NAME READY STATUS RESTARTS AGE
pod/cloud-iptables-manager-8kh6q 1/1 Running 0 109m
pod/cloudcore-5876c76687-tkkzx 1/1 Running 0 109mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cloudcore ClusterIP 10.101.140.171 <none> 10000/TCP,10001/TCP,10002/TCP,10003/TCP,10004/TCP 109m
[root@k8s-master ~]#
kubectl edit svc cloudcore -n kubeedge #修改大概在51行 49 selector:50 k8s-app: kubeedge51 kubeedge: cloudcore52 sessionAffinity: None53 type: LoadBalancer #修改后的54 status:55 loadBalancer: {}
[root@k8s-master ~]# kubectl get pods,svc -n kubeedge
NAME READY STATUS RESTARTS AGE
pod/cloud-iptables-manager-8kh6q 1/1 Running 0 110m
pod/cloudcore-5876c76687-tkkzx 1/1 Running 0 110mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cloudcore LoadBalancer 10.101.140.171 192.168.186.200 10000:31953/TCP,10001:32329/TCP,10002:31154/TCP,10003:30807/TCP,10004:31038/TCP 110m
[root@k8s-master ~]#
[root@k8s-master kubernetes]# kubectl get pods -n kube-system -o wide #metrics-server不正常
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-67bb5696f5-sfhs6 1/1 Running 0 4h3m 10.244.235.195 k8s-master <none> <none>
calico-node-2w8jn 1/1 Running 0 4h3m 192.168.186.128 k8s-master <none> <none>
calico-node-vt8g4 1/1 Running 0 4h3m 192.168.186.129 k8s-node1 <none> <none>
coredns-7f6cbbb7b8-q8z29 1/1 Running 0 4h5m 10.244.235.193 k8s-master <none> <none>
coredns-7f6cbbb7b8-qc8d2 1/1 Running 0 4h5m 10.244.235.194 k8s-master <none> <none>
etcd-k8s-master 1/1 Running 0 4h5m 192.168.186.128 k8s-master <none> <none>
kube-apiserver-k8s-master 1/1 Running 0 4h5m 192.168.186.128 k8s-master <none> <none>
kube-controller-manager-k8s-master 1/1 Running 0 4h5m 192.168.186.128 k8s-master <none> <none>
kube-proxy-2vt4s 1/1 Running 0 3h52m 192.168.186.129 k8s-node1 <none> <none>
kube-proxy-99x2t 1/1 Running 0 3h52m 192.168.186.128 k8s-master <none> <none>
kube-scheduler-k8s-master 1/1 Running 0 4h5m 192.168.186.128 k8s-master <none> <none>
metrics-server-5f85c44dcd-kpnpk 1/1 Running 0 4m4s 10.244.36.85 k8s-node1 <none> <none> #如果状态和READY不正确,就执行如下的语句
[root@k8s-master kubernetes]#
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(边缘节点)
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 4h12m v1.22.6
k8s-node1 Ready <none> 4h9m v1.22.6
[root@k8s-master ~]#
4.1 获取keadm工具
#注意边缘节点配置都很低,只需要运行业务容器
#边缘节点只需要安装docker就可以了
hostnamectl set-hostname edge-node1 && bashwget https://github.com/kubeedge/kubeedge/releases/download/v1.10.1/keadm-v1.12.1-linux-amd64.tar.gztar -zxvf keadm-v1.12.1-linux-amd64.tar.gz
cp keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/
keadm version
TOKEN=3b917d79963d290608f00b2c567808bbf37f99379efdb4a2848ddd2d2713cb52.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTY5NDc2NTl9.1DQ6GwR687bpyR_8q-Xf2HwFfLeUdZ2oqYrYkEyNEEo #这串数字是在cloudcore执行keadm gettoken获取的SERVER=192.168.186.200:10000
keadm join --token=$TOKEN --cloudcore-ipport=$SERVER --kubeedge-version=1.12.1#如果添加失败了,请在edgecore中执行
#docker rm -f mqtt && rm -fr /etc/kubeedge/
#keadm join --token=$TOKEN --cloudcore-ipport=$SERVER --kubeedge-version=1.12.1
[root@edgenode1 ~]# TOKEN=3b917d79963d290608f00b2c567808bbf37f99379efdb4a2848ddd2d2713cb52.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTY5NDc2NTl9.1DQ6GwR687bpyR_8q-Xf2HwFfLeUdZ2oqYrYkEyNEEo
[root@edgenode1 ~]# SERVER=192.168.186.200:10000
[root@edgenode1 ~]# keadm join --token=$TOKEN --cloudcore-ipport=$SERVER --kubeedge-version=1.12.1
I1009 13:40:18.319594 2217 command.go:845] 1. Check KubeEdge edgecore process status
I1009 13:40:18.480783 2217 command.go:845] 2. Check if the management directory is clean
I1009 13:40:18.480907 2217 join.go:100] 3. Create the necessary directories
I1009 13:40:18.484206 2217 join.go:176] 4. Pull Images
Pulling kubeedge/installation-package:v1.12.1 ...
Successfully pulled kubeedge/installation-package:v1.12.1
Pulling eclipse-mosquitto:1.6.15 ...
Successfully pulled eclipse-mosquitto:1.6.15
Pulling kubeedge/pause:3.1 ...
Successfully pulled kubeedge/pause:3.1
I1009 13:42:56.611776 2217 join.go:176] 5. Copy resources from the image to the management directory
I1009 13:42:59.996519 2217 join.go:176] 6. Start the default mqtt service
I1009 13:43:02.033426 2217 join.go:100] 7. Generate systemd service file
I1009 13:43:02.034038 2217 join.go:100] 8. Generate EdgeCore default configuration
I1009 13:43:02.034469 2217 join.go:230] The configuration does not exist or the parsing fails, and the default configuration is generated
W1009 13:43:02.051996 2217 validation.go:71] NodeIP is empty , use default ip which can connect to cloud.
I1009 13:43:02.055240 2217 join.go:100] 9. Run EdgeCore daemon
I1009 13:43:02.733562 2217 join.go:317]
I1009 13:43:02.733581 2217 join.go:318] KubeEdge edgecore is running, For logs visit: journalctl -u edgecore.service -xe
[root@edgenode1 ~]#
相关文章:

云原生边缘计算KubeEdge安装配置(二)
1. K8S集群部署,可以参考如下博客 请安装k8s集群,centos安装k8s集群 请安装k8s集群,ubuntu安装k8s集群 请安装kubeedge cloudcore centos安装K8S 2.安装kubEedge 2.1 编辑kube-proxy使用ipvs代理 kubectl edit configmaps kube-proxy -…...

SQL多表设计--一对多(外键)
-- 完成部门和员工的-- 选择当前db03 这个数据库use db03;-- 查看当前选中的数据库select database();-- 创建员工表create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32)…...

Stm32_标准库_9_TIM
频率(HZ)是频率的基本单位1HZ是1s的倒数 STM32F103C8T6一般情况给定时器的内部时钟都是72MHz(系统主频率) TIM基本构成 计数器、预分频器、自动化重装 // 都是16位其中计数器、自动化重装,都是16位换算成10进制范围为[0, 655536] 时间 1 /…...
283. 移动零
283. 移动零 原题 /** 左指针左边均为非零数; 右指针左边直到左指针处均为零。*/ class Solution {public void moveZeroes(int[] nums) {int left 0;int right 0;while(right<nums.length){if(nums[right]!0){swap(nums,left,right);left;}right;}}public v…...

用 HTTP 提交数据,基本就这 5 种方式
网页开发中,向服务端提交数据是一个基本功能,工作中会大量用 xhr/fetch 的 api 或者 axios 这种封装了一层的库来做。 可能大家都写过很多 http/https 相关的代码,但是又没有梳理下它们有哪几种呢? 其实通过 http/https 向服务端…...

基于matlab统计Excel文件一列数据中每个数字出现的频次和频率
一、需求描述 如上表所示,在excel文件中,有一列数,统计出该列数中,每个数出现的次数和频率。最后,将统计结果输出到新的excel文件中。 二、程序讲解 第一步:选择excel文件; [Filename, Pathn…...

近期分享学习心得3
1、全屏组件封装 先看之前大屏端的监控部分全屏代码 整块全屏代码 常规流是下面这种 //进入全屏 function full(ele) {//if (ele.requestFullscreen) {// ele.requestFullscreen();//} else if (ele.mozRequestFullScreen) {// ele.mozRequestFullScreen();//} el…...

前端uniapp如何修改下拉框uni-data-select下面的uni-icons插件自带的图片【修改uniapp自带源码图片/图标】
目录 未改前图片未改前源码未改前通过top和bottom 和修改后图片转在线base64大功告成最后 未改前图片 未改前源码 然后注释掉插件带的代码,下面要的 未改前通过top和bottom 和修改后 找到uni-icons源码插件里面样式 图片转在线base64 地址 https://the-x.cn/b…...

【计算机基础】Git系列3:常用操作
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

有哪些值得推荐的Java 练手项目?
大家好,我是 jonssonyan 我是一名 Java 后端程序员,偶尔也会写一写前端,主要的技术栈是 JavaSpringBootMySQLRedisVue.js,基于我学过的技术认真的对每个分享的项目进行鉴别,今天就和大家分享我曾经用来学习的开源项目…...
【Godot】时间线(技能)节点
4.1 游戏中一般都会有各种各样的技能,或者其他需要按一定的时间顺序去执行的功能。 这里我写出了一个时间线节点,就像是在播放动画一样,按一定的阶段去执行某些功能 # # Timeline # # - author: zhangxuetu # - datetime: 2023-09-24 23…...

每日练习-9
目录 1、井字棋 2、密码强度等级 3、二维数组中的查找 4.调整数组奇数偶数 5.旋转数组中的最小元素 6、替换空格 1、井字棋 解析:井字棋有四种情况表示当前玩家获胜,行全为1, 列全为1,主对角全为1, 副对角全为1。遍历…...
微信小程序 -- 页面间通信
前言 今天我们来说下微信小程序的页面间通信: 通过url传参实现页面间单向通信通过getCurrentPages()页面栈实现页面间单向通信通过EventChannel实现页面间双向通信 1、url传参 我们知道页面之间的跳转可以通过路由组件来实现,其中组件的属性url就是要…...

关于Jupyter markdown的使用
一级标题 #空格 标题1 二级标题 ## 空格 标题2 三级标题 ###空格 标题3 无序; 有序: 数学符号:...

【C语言】字符函数和内存操作函数
大家好,我是苏貝,本篇博客带大家了解字符函数和内存操作函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一.字符函数1.1 字符分类函数1.2 字符转换函数 二.内存操作函数2.1 memcpy2.2…...

SpringBoot大文件上传实现分片、断点续传
大文件上传流程 客户端计算文件的哈希值,客户端将哈希值发送给服务端,服务端检查数据库或文件系统中是否已存在相同哈希值的文件,如果存在相同哈希值的文件,则返回秒传成功结果,如果不存在相同哈希值的文件࿰…...
React 注意事项
在使用 React 进行开发时,有一些注意事项可以帮助你更好地使用这个JavaScript库。以下是一些需要注意的事项: 组件结构和组织 尽量保持组件简单和可复用:将组件拆分为较小和独立的部分,以提高代码的可维护性和可测试性。遵循单一…...

常见排序算法Java版(待续)
冒泡排序O(n^2) public class Main {public static void main(String[] args) {Random random new Random();int[] nums new int[]{random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100), random.nextInt(100)};for (i…...

Jmeter 多实例压测
Apache JMeter 是一个开源的 Java 应用程序,用于性能测试和负载测试。它最初是为测试 Web 应用程序而创建的,但现在已广泛用于测试各种不同类型的应用程序,包括数据库、消息队列、FTP 服务器等。JMeter 提供了丰富的功能,使您能够…...
线程安全问题 --- 内存可见性问题
小王学习录 本月鸡汤:什么是内存可见性问题引起内存可见性问题的原因如何解决内存可见性问题volatile使用规范编外: 工作内存(工作存储区)由前面文章介绍可以知道, 引起线程安全问题有 五个原因, 分别是: 线程抢占式执行, 随即调度(根本原因); 多个线程对同一变量执行 修改操…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...