3

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

 3 years ago
source link: http://dockone.io/article/2434535
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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/f ... 8s.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/f ... de.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/f ... de.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 CIDR 和 pod clusterIP CIDR 的方法如下:

service clusterIP CIDRroot@master:~# grep -rn "service-cluster-ip-range" /etc/kubernetes/manifests# pod clusterIP CIDRroot@master:~# calicoctl.sh get ipPoolnodeSubnets:需要添加所有的云端节点的 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/containerne ... ni%23 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
官方邮箱:[email protected]
微信群:打开“博云”公众号,点击菜单栏“扫码入群”

加粗文字

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK