暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为KubeEdge在边缘计算的实践

ProdanLabs 2019-06-29
574

随着物联网规模的快速增长以及 5G 时代的日益临近,在靠近数据产生的网络边缘提供数据处理能力和服务是推动 ICT 产业发展的重要驱动力,下一代云原生架构"边缘计算"概念由此而生。

1什么是 KubeEdge?


KubeEdge是华为开源的一个服务,Kubernetes原生支持,用于将容器化应用程序编排功能扩展到Edge的主机,并为网络应用程序提供基础架构支持,云和边缘之间的部署和元数据同步。

KubeEdge的主要目标是将Kubernetes生态系统从云端扩展到边缘

KubeEdge结构(注:图来源于社区)

2部署KubeEdge

环境说明

在Kubernetes部署运行KubeEdge Cloud

#拉取源码
git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
#构建Docker镜像
cd $GOPATH/src/github.com/kubeedge/kubeedge
make cloudimage
#生成TLS证书,并更新06-secret.yaml文件
cd build/cloud
 ../tools/certgen.sh buildSecret | tee ./06-secret.yaml
#按名称顺序从清单创建K8S资源(确保docker能pull到镜像)
for resource in $(ls *.yaml); do kubectl create -f $resource; done
#如果k8s集群开启了安全验证,需授予edgecontroller访问集群权限
kubectl create clusterrolebinding cluster-admin:edgecontroller --clusterrole=cluster-admin --user system:serviceaccount:kubeedge:edgecontroller
#检查edgecontroller Pod的状态及日志
kubectl get pod -n kubeedge
NAME                                              READY   STATUS    RESTARTS   AGE
edgecontroller-64dbc67d65-p7mwv    1/1      Running          0          2m
kubectl logs -f edgecontroller-64dbc67d65-p7mwv  -n kubeedge

确认创建edgecontroller状态正常后,创建server

[root@kube-master cloud]# vi 08-service.yaml.example
apiVersion: v1
kind: Service
metadata:
  name: edgecontroller
  namespace: kubeedge
  labels:
    k8s-app: kubeedge
    kubeedge: edgecontroller
spec:
  type: NodePort
  ports:
  - port: 10000
    name: cloudhub
    nodePort: 10000
  selector:
    k8s-app: kubeedge
    kubeedge: edgecontroller
[root@kube-master cloud]# kubectl apply -f 08-service.yaml.example

在边缘节点部署运行KubeEdge Edge

#拉取源码,并编译
[root@kube-edge ~]# git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
[root@kube-edge ~]# cd $GOPATH/src/github.com/kubeedge/kubeedge
[root@kube-edge kubeedge]# make all WHAT=edge
[root@kube-edge kubeedge]# cd edge && make
#在k8s master创建KubeEdge node
[root@kube-master ~]# cat $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json
{
  "kind": "Node",
  "apiVersion": "v1",
  "metadata": {
    "name": "kube-edge",
    "labels": {
      "name": "edge-node",
      "node-role.kubernetes.io/edge": ""
    }
  }
}
[root@kube-master ~]# kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json
#在边缘节点上拉取KubeEdge Cloud节点的密钥
[root@kube-master ~]#  ls -lrt /etc/kubeedge/
total 8
drwxr-xr-x 2 root root 4096 Jun 29 09:54 certs
drwxr-xr-x 2 root root 4096 Jun 29 09:54 ca

修改edge.yaml文件

在边缘节点后台运行edge_core

[root@kube-edge edge]# mosquitto -d -p 1883
[root@kube-edge edge]# nohup ./edge_core > edge_core.log 2>&1 &
#检查edge_core启动状态
[root@kube-edge edge]# tail -f edge_core.log


3完成验证

在master查看节点状态

[root@kube-master cloud]# kubectl get nodes -o wide
NAME          STATUS  ROLES    AGE   VERSION                   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
kube-edge     Ready   edge     12m   v1.10.9-kubeedge-v1.0.0   172.26.152.89   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://3.10.0
kube-master   Ready   master   72d   v1.14.1                   172.16.16.13    <none>        CentOS Linux 7 (Core)   4.19.34                      docker://18.9.5

创建Pod

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/deployment.yaml
kubectl get pod -o wide 
NAME                               READY   STATUS    RESTARTS   AGE   IP       NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-d86dfb797-hqc47   1/1     Running   0          58m   <none>   kube-edge   <none>           <none>
[root@kube-master cloud]# curl kube-edge 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

注意:目前边缘节点的pod的网络模式必须为hostPort.

4结束



Kubernetes生态圈发展迅猛,围绕Kubernetes的开源项目层出不穷,目前由CNCF孵化或已毕业的项目就有36个。Kubernetes也按着固定的节奏,逐渐成为IT基础建设的核心,相信3-5年内将不会再有人关心Kubernetes,因为它将变得无处不在.

文章转载自ProdanLabs,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论