3
FabEdge快速安装指南,极速上手体验边缘集群
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.
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 集群
- 安装 k8s Master 节点
以 Ubuntu 18.04.5 系统为例子,运行以下指令:
⚠️注意:如果加载时间过长,表明网速较慢,请耐心等待
如果出现以下信息,表示安装成功:
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.yaml20: - --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]
微信群:打开“博云”公众号,点击菜单栏“扫码入群”
加粗文字
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK