随着物联网规模的快速增长以及 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




