共计 8930 个字符,预计需要花费 23 分钟才能阅读完成。
8 月 2 日,博云正式公布了 FabEdge 开源我的项目,这是一款基于 K8S 和 Kubedge 构建的针对边缘计算场景的开源网络计划。公布之后,FabEdge 受到很多开发者的关注,并对 FabEdge 提出了很多贵重的倡议。同时,咱们留神到用户在装置部署 FabEdge 的过程中,遇到因为无奈搭建 Kubernetes + Kubedge 集群,而无奈体验 FabEdge 的挑战。
因而,针对这一问题,FabEdge 团队推出了一键部署 K8S 和 Kubedge 的性能,本期文章将介绍应用该性能疾速部署集群,从而极速上手体验 FabEdge 我的项目。
https://www.qq.com/video/w327…
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 零碎为例子,运行以下指令:
root@master:~# curl http://116.62.127.76/FabEdge/… | 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/… | 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/… | 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/fa…
为 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 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.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/containern… 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/fa…
官方网站:http://www.fabedge.io
官网邮箱:fabedge@beyondcent.com
微信群:关上“博云”公众号,点击菜单栏“扫码入群”