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花了半个小时)

安装过程可能出现以下问题:

  1. “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
  1. 解决上述问题后,重新输入了脚本安装指令,提示下面的信息
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)
    (我们前面步骤已经一键快速部署好了)
  1. 确保所有边缘节点能够访问云端connector
  • 如果有防火墙或安全组,必须允许ESP(50),UDP/500,UDP/4500
  1. 确认所有边缘节点上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
    
  2. 确认所有边缘节点没有运行任何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>
    
  3. 安装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
    
  4. 获取当前集群配置信息,供后面使用

    $ 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

  1. 修改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冲突。

  2. 创建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

  1. 在云端选取一个运行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,不要有不能调度的污点,否则部署会失败。

  2. 所有边缘节点添加一个标签

    $ kubectl label node --overwrite=true edge1 node-role.kubernetes.io/edge=
    
    $ kubectl label node --overwrite=true edge2 node-role.kubernetes.io/edge=
    
  3. 准备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。

  4. 安装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
    

配置边缘节点

  1. 每个边缘节点上修改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"
    
  2. 每个边缘节点上重启edgecore

    $ systemctl restart edgecore
    

部署后验证

  1. 管理节点上确认边缘节点就绪

    [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
    
  2. 管理节点上确认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
    

常见问题

  1. 有的网络环境存在非对称路由,需要在云端节点关闭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集成环境搭建教程相关推荐

  1. 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下载地 ...

  2. 五部搞定Android开发环境部署——费UC噶不过详细的Android开发环境搭建教程

     五步搞定Android开发环境部署--非常详细的Android开发环境搭建教程 引言 在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立 ...

  3. Arduino框架下联盛德W801开发环境搭建教程

    Arduino框架下联盛德W801开发环境搭建教程 联盛德W801拥有自己的SDK集成开发工具,能做到这一点非常令人敬佩和了不起.国内好多芯片厂商都需要依托第三方开发工具集来实现对自己产品的开发.多元 ...

  4. 虚拟机IOS开发环境搭建教程

    来源:http://www.cnblogs.com/xiaoyaoju/archive/2013/05/21/3091171.html 安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB ...

  5. IOS开发学习 IDE环境搭建教程

    IOS开发学习 IDE环境搭建教程是本文要介绍的内容,在坛子里逛了一圈,发现一篇好的文章,与友们分享一下,要有耐心的看整个过程,不多说,直接进入话题. 安装条件: 硬件:一台拥有支持虚拟技术的64位双 ...

  6. win2008怎么配置php,Win2008 PHP 配置环境搭建 教程

    Win2008 PHP 配置环境搭建 教程 一.准备工作 1.所需软件: MySQL数据库:本文用MySQL-essential-5.0.45-win32.msi PHP : 本文用php-5.2.4 ...

  7. 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)

    大家好,欢迎来到西安蓝蜻蜓网络讲坛,上期我们讲的是怎样购买服务器,很多小伙伴都知道了购买服务器的方式方法,那么购买服务器后需要怎么搭建服务器环境呢?那么今天,我们就来讲述下服务器环境怎么搭建? 以宝塔 ...

  8. Jenkins + Git + Maven + tomcat集成环境搭建

    折腾了好几天,终于把Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用. 1.安装环境 操作系统:Centos ...

  9. win命令安装 安装cmake_win10下VSCode+CMake+Clang+GCC环境搭建教程图解

    打算用C/C++把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, ...

最新文章

  1. 基于MSM 的tomcat session 共享
  2. MFC基于TCP协议的CSocket类套接字服务器端代码示范
  3. Android sdk manager更新下载缓慢的解决方法
  4. 新浪微博封装类,以及常见问题sdk修改
  5. python - 配置文件
  6. 如何产生QPSK信号
  7. Kubernetes:通过自动化节省IT预算的4种方法
  8. mysql utf8 4位_mysql中utf8和utf8mb4区别
  9. Qt工作笔记-对*QObject::sender()的认识
  10. go中如何使用easyjson_两分钟让你明白Go中如何继承
  11. 远程管理 Mac OSX 设备
  12. 【转】Content-type的几种常见类型
  13. 匹配滤波器的仿真——原理说明与仿真
  14. 【学习随记】Word域代码相关
  15. 平安保险php软件工程师工资,软件工程师
  16. 索尼1000xm3成功配对小米5 蓝牙支持ldac传输
  17. 【OCM第18期开班】第18期11g OCM培训将于8月23日,晚20点在腾讯课堂开班,第1场考试免费培训!!!...
  18. 把单元格一分为二_怎么把单元格上下一分为二
  19. 计算机视觉 目标分割
  20. 根据手机指南针经纬度在地图上找到其位置

热门文章

  1. OpenSSL密码库算法笔记——第2.2.2章 Barrett约化的优越性
  2. 时间都哪去了--电视连续剧《老牛家的战争》插曲【视频】
  3. Linux(1) 概要、安装 、文件系统基本认知
  4. 国外计算机cpu排行,电脑处理器最新排行天梯图_处理器CPU最新天梯图2020 - 系统家园...
  5. SQL Server 2008删除行出现错误“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行”
  6. 包装类和自动拆箱与自动装箱
  7. 深度操作系统20.6发布
  8. “蘑菇书“配套在线课程上线
  9. 自学编程,痛并快乐着
  10. ASICC码对照表整理