KubeEdge+Fabedge集成环境搭建教程
KubeEdge+Fabedge集成环境搭建教程
KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。 它基于Kubernetes构建,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。KubeEdge 包含云端和边缘端两部分。
FabEdge是一个专门针对边缘计算场景设计的,基于kubernetes的容器网络方案,它符合CNI规范,可以无缝集成任何K8S环境,解决边缘计算场景下云边协同,边边协同,服务发现等难题。
参考文档:https://gitee.com/mirrors/FabEdge/tree/main/docs
结合官方所给文档,我将自己部署过程出现过的问题和步骤都总结了一下。
部署Kubernetes和Kubeedge
这里官方给出了一键部署的脚本供我们使用。
安装条件
遵循 kubeadm的最低要求 ,Master && Node 最低2C2G,磁盘空间不小于10G;
⚠️注意:尽可能使用干净的系统,避免其他因素引起安装错误。
支持的操作系统
Ubuntu 18.04 (官方推荐使用,我使用的是centos7最小化安装版)
Ubuntu 20.04
CentOS 7.9
CentOS 7.8
部署k8s集群
安装k8s Master 节点
在主节点也就是master节点上运行以下指令:
sudo curl http://116.62.127.76/FabEdge/fabedge/main/deploy/cluster/install-k8s.sh | bash -
⚠️注意:如果加载时间过长,有可能网速较慢,请耐心等待(确实很长时间,第一个包下1.2G花了半个小时)
安装过程可能出现以下问题:
- “msg”: "Timeout (12s) waiting for privilege escalation prompt: "}
这个问题上网查了一下,我的解决方法是每个节点都手动配置一下hosts
vi /etc/hosts
#添加以下信息,前面为ip地址,后面为节点名
192.168.230.143 master
192.168.230.144 edge1
192.168.230.145 edge2
- 解决上述问题后,重新输入了脚本安装指令,提示下面的信息
2021-11-29 04:04:21,419 INFO {'playbook': '/opt/ansible/pre-deploy.yml', 'rc': 0} has been deployed, skipped.
2021-11-29 04:04:21,419 INFO {'playbook': '/opt/kubespray/cluster.yml', 'rc': 0} has been deployed, skipped.
2021-11-29 04:04:21,420 INFO {'playbook': '/opt/ansible/post-deploy.yml', 'rc': 0} has been deployed, skipped.
2021-11-29 04:04:21,420 INFO {'playbook': '/opt/ansible/cloudcore.yml', 'rc': 0} has been deployed, skipped.
2021-11-29 04:04:21,420 INFO {'playbook': '/opt/ansible/iptables-persistent.yml', 'rc': 0} has been deployed, skipped.
这个问题我自己感觉应该是已经安装好了,但是输入kubectl get node他提示没有找到指令:kubectl
不知道是什么问题造成的没有安装上kubelet,于是我使用了万能的重启大法
reboot
重启之后再进行了一遍安装,还是提示这个错误,但是等了一会kubectl就能用了。
# kubectl get nodesNAME STATUS ROLES AGE VERSION
master Ready master,node 3h19m v1.19.7
如果有出现以下信息,表示安装成功:
PLAY RECAP *********************************************************************
master : ok=15 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
添加k8s边缘节点(还是在master节点操作)
sudo curl http://116.62.127.76/FabEdge/fabedge/main/deploy/cluster/add-edge-node.sh | bash -s -- --host-vars ansible_hostname={hostname} ansible_user={username} ansible_password={password} ansible_host={edge-node-IP}
参数说明:
ansible_hostname 指定边缘节点的主机名
ansible_user 配置边缘节点的用户名
ansible_password 配置边缘节点的密码
ansible_host 配置边缘节点的IP地址
例如:设置边缘节点的主机名为edge1、用户名是root、密码是root、IP为192.168.230.144,指令如下:
sudo curl http://116.62.127.76/FabEdge/fabedge/main/deploy/cluster/add-edge-node.sh | bash -s -- --host-vars ansible_hostname=edge1 ansible_user=root ansible_password=root ansible_host=192.168.230.144
如果出现以下信息,表示安装成功:
PLAY RECAP *********************************************************************
edge1 : ok=13 changed=10 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
确认节点添加成功
sudo kubectl get nodeNAME STATUS ROLES AGE VERSION
edge1 Ready agent,edge 3h16m v1.19.3-kubeedge-v1.5.0
master Ready master,node 3h19m v1.19.7
继续添加其他子节点
sudo curl http://116.62.127.76/FabEdge/fabedge/main/deploy/cluster/add-edge-node.sh | bash -s -- --host-vars ansible_hostname=edge2 ansible_user=root ansible_password=root ansible_host=192.168.230.145
PLAY RECAP *********************************************************************
edge2 : ok=13 changed=10 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
# kubectl get nodesNAME STATUS ROLES AGE VERSION
edge1 Ready agent,edge 3h20m v1.19.3-kubeedge-v1.5.0
edge2 Ready agent,edge 45s v1.19.3-kubeedge-v1.5.0
master Ready master,node 3h23m v1.19.7
部署FabEdge
前置条件
- Kubernetes (v1.19.7)
- Calico (v3.16.5)
- KubeEdge (v1.8.0)
(我们前面步骤已经一键快速部署好了)
- 确保所有边缘节点能够访问云端connector
- 如果有防火墙或安全组,必须允许ESP(50),UDP/500,UDP/4500
确认所有边缘节点上nodelocaldns正常运行
$ kubectl get po -n kube-system -o wide -l "k8s-app=nodelocaldns" nodelocaldns-4m2jx 1/1 Running 0 25m 10.22.45.30 master nodelocaldns-p5h9k 1/1 Running 0 35m 10.22.45.26 edge1
确认所有边缘节点上没有运行任何calico的组件
$ kubectl get po -n kube-system -o wide | grep -i calico calico-kube-controllers-8b5ff5d58-ww4nq 1/1 Running 0 7d18h 10.22.45.30 master1 <none> <none> calico-node-cxbd9 1/1 Running 0 7d18h 10.22.45.30 master1 <none> <none>
安装helm
$ wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz $ tar -xf helm-v3.6.3-linux-amd64.tar.gz $ cp linux-amd64/helm /usr/bin/helm
获取当前集群配置信息,供后面使用
$ curl -s http://116.62.127.76/get_cluster_info.sh | bash - This may take some time. Please wait.clusterDNS : 169.254.25.10 clusterDomain : root-cluster cluster-cidr : 10.233.64.0/18 service-cluster-ip-range : 10.233.0.0/18
配置calico
修改calico pool配置
$ vi ippool.yaml apiVersion: projectcalico.org/v3 kind: IPPool metadata:name: fabedge spec:blockSize: 26cidr: 10.10.0.0/16natOutgoing: falsedisabled: trueipipMode: Always
cidr是一个用户自己选定的大网段,每个边缘节点会从中分配一个小网段,不能和get_cluster_info脚本输出的cluster-cidr或service-cluster-ip-range冲突。
创建calico pool
$ calicoctl.sh create --filename=ippool.yaml $ calicoctl.sh get pool # 如果有fabedge的pool说明创建成功 NAME CIDR SELECTOR default-pool 10.231.64.0/18 all() fabedge 10.10.0.0/16 all()# 如果提示没有calicoctl.sh命令,请尝试以下指令 $ export DATASTORE_TYPE=kubernetes $ export KUBECONFIG=/etc/kubernetes/admin.conf $ calicoctl create --filename=ippool.yaml $ calicoctl get pool # 如果有fabedge的pool说明创建成功 NAME CIDR SELECTOR default-pool 10.231.64.0/18 all() fabedge 10.10.0.0/16 all()
部署FabEdge
在云端选取一个运行connector的节点,并为节点做标记。以master为例,
$ kubectl label no master node-role.kubernetes.io/connector=$ kubectl get node NAME STATUS ROLES AGE VERSION edge1 Ready agent,edge 3h27m v1.19.3-kubeedge-v1.5.0 edge2 Ready agent,edge 8m31s v1.19.3-kubeedge-v1.5.0 master Ready connector,master,node 3h31m v1.19.7
选取的节点要允许运行普通的POD,不要有不能调度的污点,否则部署会失败。
为所有边缘节点添加一个标签
$ kubectl label node --overwrite=true edge1 node-role.kubernetes.io/edge=
$ kubectl label node --overwrite=true edge2 node-role.kubernetes.io/edge=
准备helm values.yaml文件
$ vi values.yaml operator:edgePodCIDR: 10.10.0.0/16 connectorPublicAddresses: 10.22.46.48 connectorSubnets: 10.233.0.0/18edgeLabels: node-role.kubernetes.io/edgeenableProxy: truecniType: calico
说明:
edgePodCIDR:使用上面创建的calico pool的cidr。
connectorPublicAddresses: 前面选取的,运行connector服务的节点的地址,确保能够被边缘节点访问。
connectorSubnets: 云端集群中的pod和service cidr,get_cluster_info脚本输出的service-cluster-ip-range。
edgeLables:前面为边缘节点添加的标签,默认是node-role.kubernetes.io/edge
cniType: 云端集群中使用的cni插件类型,当前支持calico。
安装FabEdge
$ helm install fabedge --create-namespace -n fabedge -f values.yaml http://116.62.127.76/fabedge-0.3.0.tgz
如果出现错误:“Error: cannot re-use a name that is still in use”,是因为fabedge helm chart已经安装,使用以下命令卸载后重试。
$ helm uninstall -n fabedge fabedge release "fabedge" uninstalled
配置边缘节点
在每个边缘节点上修改edgecore配置文件
$ vi /etc/kubeedge/config/edgecore.yaml# 必须禁用edgeMesh edgeMesh:enable: falseedged:enable: truecniBinDir: /opt/cni/bincniCacheDirs: /var/lib/cni/cachecniConfDir: /etc/cni/net.dnetworkPluginName: cninetworkPluginMTU: 1500# get_cluster_info脚本输出的clusterDNSclusterDNS: "169.254.25.10"# get_cluster_info脚本输出的clusterDomainclusterDomain: "root-cluster"
在每个边缘节点上重启edgecore
$ systemctl restart edgecore
部署后验证
在管理节点上确认边缘节点就绪
[root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION edge1 Ready agent,edge 3h37m v1.19.3-kubeedge-v1.5.0 edge2 Ready agent,edge 18m v1.19.3-kubeedge-v1.5.0 master Ready connector,master,node 3h41m v1.19.7
在管理节点上确认FabEdge服务正常启动
[root@master ~]# kubectl get po -n fabedge NAME READY STATUS RESTARTS AGE cert-rf795 0/1 Completed 0 5m28s connector-5db569b98b-7wv5b 2/2 Running 0 5m10s fabedge-agent-edge1 2/2 Running 0 4m53s fabedge-agent-edge2 2/2 Running 0 4m53s fabedge-operator-869dc7dbff-fvcxd 1/1 Running 0 5m10s
常见问题
有的网络环境存在非对称路由,需要在云端节点关闭rp_filter
$ for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >$i; done#保存配置 $ vi /etc/sysctl.conf net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0
后续问题待补充…
KubeEdge+Fabedge集成环境搭建教程相关推荐
- php iis mysql windows2003,Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程 | 系统运维...
准备篇 一.环境说明: 操作系统:Windows Server 2003 SP2 32位 PHP版本:php 5.3.14 MySQL版本:MySQL5.5.25 二.相关软件下载: 1.PHP下载地 ...
- 五部搞定Android开发环境部署——费UC噶不过详细的Android开发环境搭建教程
五步搞定Android开发环境部署--非常详细的Android开发环境搭建教程 引言 在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立 ...
- Arduino框架下联盛德W801开发环境搭建教程
Arduino框架下联盛德W801开发环境搭建教程 联盛德W801拥有自己的SDK集成开发工具,能做到这一点非常令人敬佩和了不起.国内好多芯片厂商都需要依托第三方开发工具集来实现对自己产品的开发.多元 ...
- 虚拟机IOS开发环境搭建教程
来源:http://www.cnblogs.com/xiaoyaoju/archive/2013/05/21/3091171.html 安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB ...
- IOS开发学习 IDE环境搭建教程
IOS开发学习 IDE环境搭建教程是本文要介绍的内容,在坛子里逛了一圈,发现一篇好的文章,与友们分享一下,要有耐心的看整个过程,不多说,直接进入话题. 安装条件: 硬件:一台拥有支持虚拟技术的64位双 ...
- win2008怎么配置php,Win2008 PHP 配置环境搭建 教程
Win2008 PHP 配置环境搭建 教程 一.准备工作 1.所需软件: MySQL数据库:本文用MySQL-essential-5.0.45-win32.msi PHP : 本文用php-5.2.4 ...
- 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)
大家好,欢迎来到西安蓝蜻蜓网络讲坛,上期我们讲的是怎样购买服务器,很多小伙伴都知道了购买服务器的方式方法,那么购买服务器后需要怎么搭建服务器环境呢?那么今天,我们就来讲述下服务器环境怎么搭建? 以宝塔 ...
- Jenkins + Git + Maven + tomcat集成环境搭建
折腾了好几天,终于把Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用. 1.安装环境 操作系统:Centos ...
- win命令安装 安装cmake_win10下VSCode+CMake+Clang+GCC环境搭建教程图解
打算用C/C++把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, ...
最新文章
- 给Sqlite数据库设置密码
- java newline_Java BufferedWriter.newLine()方法示例
- Web应用渗透测试框架Arachni
- java ftp上传文件 linux_Java实现把文件上传至ftp服务器
- Python基础知识点总结
- 改变 input[type=range] css样式
- 反射_Class对象功能_获取Method
- 带您探究云存储的奥秘,三分钟帮您快速了解OSS
- win7 ie临时文件夹怎么修改存放位置
- 趣味科普丨一文读懂云服务器的那些事儿
- cscope的使用(2)
- 【java与智能设备】01_1Android简介与环境搭建
- Kindle刷安卓双系统的方法
- 税控盘版开票助手开发
- delphi过时了吗?王者归来!从Pascal到Embarcadero Delphi 10.4.1的发展历史回顾
- mac虚拟机parallels装Ubuntu无法联网
- python web微信应用(一) 微信协议分析
- 2008R2虚拟机重启后进入系统恢复界面
- Java编写猜单词游戏
- flashwindow vb_VB6.0 加载ShockwaveFlash(flash)控件