• FabEdge快速安装指南,极速上手体验边缘集群


    前言:

    8月2日,博云正式发布了 FabEdge 开源项目,这是一款基于 K8S 和 Kubedge 构建的针对边缘计算场景的开源网络方案。发布之后,FabEdge 受到很多开发者的关注,并对 FabEdge 提出了很多宝贵的建议。同时,我们注意到用户在安装部署 FabEdge 的过程中,遇到因为无法搭建 Kubernetes + Kubedge 集群,而无法体验 FabEdge 的挑战。

    因此,针对这一问题,FabEdge 团队推出了一键部署K8S 和 Kubedge 的功能,本期文章将介绍使用该功能快速部署集群,从而极速上手体验 FabEdge 项目。

     快速部署K8S集群

    安装条件

    • 遵循 kubeadm 的最低要求 ,Master && Node 最低2C2G,磁盘空间不小于10G;

      ⚠️注意:尽可能提供干净的机器,避免其他因素引起安装错误。

    支持的操作系统

    • Ubuntu 18.04.5 Server 4.15.0-136-generic (推荐使用)

    • Ubuntu 20.04.2  Server 5.4.0-66-generic

    • CentOS Linux release 7.9.2009 (Core)

    • CentOS Linux release 7.8.2003 (Core)

    部署k8s集群

    1. 安装 k8s Master 节点

    以 Ubuntu 18.04.5 系统为例子,运行以下指令:

    root@master:~# curl http://116.62.127.76/FabEdge/fabedge/main/deploy/cluster/install-k8s.sh | bash -

    ⚠️注意:如果加载时间过长,表明网速较慢,请耐心等待

    如果出现以下信息,表示安装成功:

    PLAY RECAP *********************************************************************master                     : ok=15   changed=13   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    2. 添加 k8s 边缘节点

    root@master:~# 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、密码是 pwd111、IP为10.22.45.26,指令如下:

    root@master:~# 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=pwd111 ansible_host=10.22.45.26

    如果出现以下信息,表示安装成功:

    PLAY RECAP *********************************************************************edge1                      : ok=13   changed=10   unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

    3. 确认节点添加成功

    root@master:~# kubectl get nodeNAME     STATUS   ROLES                   AGE     VERSIONedge1    Ready    agent,edge              22m      v1.19.3-kubeedge-v1.5.0master   Ready    master,node             32m      v1.19.7

     

    ⚠️注意:如果边缘节点没有配置密码,需要配置ssh证书。

    master节点配置ssh证书:

    root@master:~# docker exec -it installer bashroot@master:~# ssh-copy-id {edge-node-IP}

    FabEdge部署

    关闭 rp_filter

     

    所有云端节点执行下面命令:

    root@master:~# for i in /proc/sys/net/ipv4/conf/*/rp_filter; do  echo 0 >$i; done​#保存配置root@master:~# vi /etc/sysctl.conf..net.ipv4.conf.default.rp_filter=0net.ipv4.conf.all.rp_filter=0..​#确认配置生效root@master:~# sysctl -a | grep rp_filter | grep -v arp..net.ipv4.conf.cali18867a5062d.rp_filter = 0net.ipv4.conf.cali6202a829553.rp_filter = 0..

    查看 nodelocaldns 服务状态

    • 确认所有边缘节点上nodelocaldns的pod启动正常

    root@master:~# kubectl get po -n kube-system -o wide| grep nodelocaldnsnodelocaldns-4m2jx                              1/1     Running     0          25m    10.22.45.30    master           nodelocaldns-p5h9k                              1/1     Running     0          35m    10.22.45.26    edge1   

    获取 Fabedge

    root@master:~# git clone https://github.com/FabEdge/fabedge.git

    为 strongswan 生成证书

    • 为每个边缘节点生成证书, 以edge1为例:

    root@master:~# kubectl get node  NAME    STATUS   ROLES                   AGE    VERSION  edge1   Ready    agent,edge              47m    v1.19.3-kubeedge-v1.1.0  master  Ready    master,node             57m    v1.19.7​# 云端执行,生成证书root@master:~# docker run --rm -v /ipsec.d:/ipsec.d fabedge/strongswan:latest /genCert.sh edge1  ​# 登录边缘节点,在边缘节点edge1上创建目录root@edge1:~# mkdir -p /etc/fabedge/ipsec root@edge1:~# cd /etc/fabedge/ipsec root@edge1:/etc/fabedge/ipsec# mkdir -p cacerts certs private ​# 将生成的证书copy到边缘节点, # 注意证书名字: edge1_cert -> edgecert.pem, edge1.ipsec.secrets -> ipsec.secrets# “edgecert.pem”,“ipsec.secrets” 是固定名字,不能改变root@master:~# scp /ipsec.d/cacerts/ca.pem          <user>@edge1:/etc/fabedge/ipsec/cacerts/ca.pemroot@master:~# scp /ipsec.d/certs/edge1_cert.pem    <user>@edge1:/etc/fabedge/ipsec/certs/edgecert.pemroot@master:~# scp /ipsec.d/private/edge1_key.pem   <user>@edge1:/etc/fabedge/ipsec/private/edge1_key.pemroot@master:~# scp /ipsec.d/edge1.ipsec.secrets     <user>@edge1:/etc/fabedge/ipsec/ipsec.secrets
    • 为connector服务生成证书,并拷贝到运行connector服务的节点上, 以master为例:

    root@master:~# kubectl get node  NAME    STATUS   ROLES                   AGE    VERSION  edge1   Ready    agent,edge              62m    v1.19.3-kubeedge-v1.1.0       master  Ready    master,node             72m    v1.19.7    ​# 在master上执行, 生成证书root@master:~# docker run --rm -v /ipsec.d:/ipsec.d fabedge/strongswan:latest /genCert.sh connector  ​# 在master上执行,创建目录root@master:~# mkdir -p /etc/fabedge/ipsec root@master:~# cd /etc/fabedge/ipsec root@master:/etc/fabedge/ipsec# mkdir -p cacerts certs private ​# 在master上执行,copy证书root@master:~# cp /ipsec.d/cacerts/ca.pem                /etc/fabedge/ipsec/cacerts/ca.pemroot@master:~# cp /ipsec.d/certs/connector_cert.pem     /etc/fabedge/ipsec/certs/connector_cert.pemroot@master:~# cp /ipsec.d/private/connector_key.pem   /etc/fabedge/ipsec/private/connector_key.pemroot@master:~# cp /ipsec.d/connector.ipsec.secrets    /etc/fabedge/ipsec/ipsec.secrets

    创建命名空间

    • 创建 fabedge 的资源使用的 namespace,默认为 fabedge,

    root@master:~# kubectl create ns fabedge

    部署 Connector

    • 在云端选取一个节点运行 connector,为节点做标记,以 master 为例:

    root@master:~# kubectl get node  NAME    STATUS   ROLES                   AGE    VERSION  edge1   Ready    agent,edge              107m   v1.19.3-kubeedge-v1.1.0       master  Ready    master,node             117m   v1.19.7     ​root@master:~# kubectl label no master node-role.kubernetes.io/connector=​root@master:~# kubectl get node  NAME    STATUS   ROLES                   AGE    VERSION  edge1   Ready    agent,edge              108m   v1.19.3-kubeedge-v1.1.0       master  Ready    connector,master,node   118m   v1.19.7     
    • 修改 connector 的配置

    按实际环境修改 edgePodCIDR, ip, sbunets 属性

    root@master:~# vi ~/fabedge/deploy/connector/cm.yaml
    data:  connector.yaml: |    tunnelConfig: /etc/fabedge/tunnels.yaml    certFile: /etc/ipsec.d/certs/connector_cert.pem        viciSocket: /var/run/charon.vici    # period to sync tunnel/route/rules regularly    syncPeriod: 5m    edgePodCIDR: 10.10.0.0/16    # namespace for fabedge resources    fabedgeNS: fabedge    debounceDuration: 5s  tunnels.yaml: |    # connector identity in certificate     id: C=CN, O=StrongSwan, CN=connector    # connector name    name: cloud-connector    ip: 10.22.45.30       # ip address of node, which runs connector       subnets:    - 10.233.0.0/17       # CIDR used by pod & service in the cloud cluster    nodeSubnets:    - 10.22.45.30/32      # IP address of all cloud cluster    - 10.22.45.31/32    - 10.22.45.32/32

    ⚠️注意:

    CIDR:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。

    edgePodCIDR:选择一个大的网段,每个边缘节点会从中分配一个小段,每个边缘pod会从这个小段分配一个IP地址,不能和云端pod或service的网段冲突。

    ip:运行connector服务的节点的IP地址,确保边缘节点能ping通这个ip。

    root@edge1:~ # ping 10.22.45.30

    subnets: 需要包含service clusterIP CIDR 和 pod clusterIP CIDR

    比如,service clusterIP CIDR 是 10.233.0.0/18,podClusterIPCIDR = 10.233.64.0/18 那么subnets是10.233.0.0/17

    获取service clusterIP CIDRpod clusterIP CIDR的方法如下:

    # service clusterIP CIDRroot@master:~# grep -rn "service-cluster-ip-range" /etc/kubernetes/manifests# pod clusterIP CIDRroot@master:~# calicoctl.sh get ipPool

    nodeSubnets:需要添加所有的云端节点的ip地址

    • 为connector创建configmap

    root@master:~# kubectl apply -f ~/fabedge/deploy/connector/cm.yaml
    • 部署connector

    root@master:~# kubectl apply -f ~/fabedge/deploy/connector/deploy.yaml
    • 修改calico配置

    cidr为前面分配的edgePodCIDR,disabled为true

    root@master:~# vi ~/fabedge/deploy/connector/ippool.yaml
    apiVersion: projectcalico.org/v3kind: IPPoolmetadata:  name: fabedgespec:  blockSize: 26  cidr: 10.10.0.0/16  natOutgoing: false  disabled: true
    • 创建calico pool

    # 不同环境,calico的命令可能会不同root@master:~# calicoctl.sh create --filename=/root/fabedge/deploy/connector/ippool.yamlroot@master:~# calicoctl.sh get IPPool --output yaml   # 确认pool创建成功​​# 如果提示没有calicoctl.sh文件,请执行以下指令root@master:~# export DATASTORE_TYPE=kubernetesroot@master:~# export KUBECONFIG=/etc/kubernetes/admin.confroot@master:~# calicoctl get ipPoolNAME           CIDR             SELECTOR   default-pool   10.231.64.0/18   all()      fabedge        10.10.0.0/16     all()

    配置边缘节点

    • 修改edgecore配置文件

    root@edge1:~# vi /etc/kubeedge/config/edgecore.yaml

       a) 禁用edgeMesh

    edgeMesh:  enable: false

        b) 启用CNI

    edged:    enable: true    # 默认配置,如无必要,不要修改    cniBinDir: /opt/cni/bin    cniCacheDirs: /var/lib/cni/cache    cniConfDir: /etc/cni/net.d    # 这一行默认配置文件是没有的,得自己添加      networkPluginName: cni    networkPluginMTU: 1500

       c) 配置域名和DNS

    edged:    clusterDNS: "169.254.25.10"    clusterDomain: "root-cluster"

    可以在云端执行如下操作获取相关信息

    root@master:~# kubectl get cm nodelocaldns -n kube-system -o jsonpath="{.data.Corefile}"root-cluster:53 {...bind 169.254.25.10...}​root@master:~# grep -rn "cluster-name" /etc/kubernetes/manifests/kube-controller-manager.yaml​20:    - --cluster-name=root-cluster​# 本例中,domain为root-cluster,  dns为169.254.25.10
    •  安装CNI插件

    root@edge1:~# mkdir -p cni /opt/cni/bin /etc/cni/net.d /var/lib/cni/cacheroot@edge1:~# cd cniroot@edge1:~/cni# wget https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-amd64-v0.9.1.tgzroot@edge1:~/cni# tar xvf cni-plugins-linux-amd64-v0.9.1.tgzroot@edge1:~/cni# cp bridge host-local loopback /opt/cni/bin
    • 重启edgecore

    root@edge1:~# systemctl restart edgecore
    • 确认边缘节点就绪

    root@master:~# kubectl get node  NAME    STATUS   ROLES                   AGE    VERSION  edge1   Ready    agent,edge              125m   v1.19.3-kubeedge-v1.1.0  master  Ready    connector,master,node   135m   v1.19.7

    部署Operator

    • 创建Community CRD

    root@master:~# kubectl apply -f ~/fabedge/deploy/crds
    • 修改配置文件

    按实际环境修改edge-network-cidr

    root@master:~# vi ~/fabedge/deploy/operator/fabedge-operator.yaml
    apiVersion: apps/v1kind: Deploymentmetadata:  name: fabedge-operator  namespace: fabedge  labels:    app: fabedge-operatorspec:  replicas: 1  selector:    matchLabels:      app: fabedge-operator  template:    metadata:      labels:        app: fabedge-operator    spec:      containers:        - name: operator          image: fabedge/operator:latest          imagePullPolicy: IfNotPresent          args:            - -namespace=fabedge            - -edge-network-cidr=10.10.0.0/16     # edge pod使用的网络            - -agent-image=fabedge/agent                 - -strongswan-image=fabedge/strongswan              - -connector-config=connector-config            - -endpoint-id-format=C=CN, O=StrongSwan, CN={node}            - -v=5      hostNetwork: true      serviceAccountName: fabedge-operator

    ⚠️注意:

    edge-network-cidr为【部署Connector】中“修改connector的配置”分配的edgePodCIDR

    • 创建Operator

    root@master:~# kubectl apply -f ~/fabedge/deploy/operator

    确认服务正常启动

    root@master:~# kubectl get po -n fabedgeNAME                               READY   STATUS    RESTARTS   AGEconnector-5947d5f66-hnfbv          2/2     Running   0          35mfabedge-agent-edge1                2/2     Running   0          22sfabedge-operator-dbc94c45c-r7n8g   1/1     Running   0          55s

    关于FabEdge

    FabEdge 是一款基于 kubernetes 和 kubeedge 构建的开源网络方案,解决边缘计算场景下,容器网络配置管理复杂、网络割裂互不通信、缺少服务发现、缺少拓扑感知能力、无法提供就近访问等难题。

    并且,Fabedge 支持弱网环境,如4/5G,WiFi,LoRa 等;支持边缘节点动态 IP 地址,适用于物联网,车联网等场景。

    Github:

    https://github.com/FabEdge/fabedge

    官方网站

    http://www.fabedge.io

    官方邮箱

    fabedge@beyondcent.com

     微信群:打开“博云”公众号,点击菜单栏“扫码入群”

  • 相关阅读:
    SQL字符串处理函数大全
    如何在word2007中并排查看对比显示两个文档
    android系统体系结构
    实现html转Xml
    一款很不错的html转xml工具-Html Agility Pack
    HtmlAgilityPack 之 HtmlNode类
    微信公众平台开发入门教程
    Apache Kafka:下一代分布式消息系统
    JAVA线程池的分析和使用
    ZooKeeper系列之八:ZooKeeper的简单操作
  • 原文地址:https://www.cnblogs.com/bocloud/p/15188095.html
Copyright © 2020-2023  润新知