Skip to content

Latest commit

 

History

History
357 lines (248 loc) · 12.2 KB

README_zh.md

File metadata and controls

357 lines (248 loc) · 12.2 KB

KubeEdge

Build Status Go Report Card LICENSE Releases Documentation Status

logo

KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。 它基于Kubernetes构建,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。KubeEdge 包含云端和边缘端两部分。

优势

边缘计算

通过在边缘端运行业务逻辑,可以在本地保护和处理大量数据。KubeEdge 减少了边和云之间的带宽请求,加快响应速度,并保护客户数据隐私。

简化开发

开发人员可以编写常规的基于 http 或 mqtt 的应用程序,容器化并在边缘或云端任何地方运行。

Kubernetes 原生支持

使用 KubeEdge 用户可以在边缘节点上编排应用、管理设备并监控应用程序/设备状态,就如同在云端操作 Kubernetes 集群一样。

丰富的应用程序

用户可以轻松地将复杂的机器学习、图像识别、事件处理等高层应用程序部署到边缘端。

介绍

KubeEdge 由以下组件构成:

  • Edged: Edged 是运行在边缘节点的代理,用于管理容器化的应用程序。
  • EdgeHub: EdgeHub 是一个 Web Socket 客户端,负责与边缘计算的云服务(例如 KubeEdge 架构图中的 Edge Controller)交互,包括同步云端资源更新、报告边缘主机和设备状态变化到云端等功能。
  • CloudHub: CloudHub 是一个 Web Socket 服务端,负责监听云端的变化, 缓存并发送消息到 EdgeHub。
  • EdgeController: EdgeController 是一个扩展的 Kubernetes 控制器,管理边缘节点和 Pods 的元数据确保数据能够传递到指定的边缘节点。
  • EventBus: EventBus 是一个与 MQTT 服务器(mosquitto)交互的 MQTT 客户端,为其他组件提供订阅和发布功能。
  • DeviceTwin: DeviceTwin 负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
  • MetaManager: MetaManager 是消息处理器,位于 Edged 和 Edgehub 之间,它负责向轻量级数据库(SQLite)存储/检索元数据。

架构

架构图

路线图

Release 1.0

KubeEdge将为 IoT / Edge 工作负载提供基础架构和基本功能。其中包括:

  • 云端和边缘端的开源实现。
  • 使用 Kubernetes kubectl 从云端向边缘节点部署应用。
  • 使用 Kubernetes kubectl 从云端对边缘节点的应用进行配置管理和密钥管理。
  • 云和边缘节点之间的双向和多路网络通信。
  • Kubernetes Pod 和 Node 状态通过云端 kubectl 查询,从边缘端收集/报告数据。
  • 边缘节点在脱机时自动恢复,并重新连接云端。
  • 支持IoT设备通过Device twin 和 MQTT 协议与边缘节点通信。

Release 2.0 和未来计划

  • 使用 KubeEdge 和 Istio 构建服务网格。
  • 提高 Kubedge 基础设施的性能和可靠性。
  • 在边缘端提供函数即服务(Function as a Service,FaaS)。
  • 在边缘端节点支持更多类型的设备协议,如 AMQP、BlueTooth、ZigBee 等等。
  • 评估并启用具有数千个边缘节点和数百万设备的超大规模边缘集群。
  • 启用应用的智能调度,扩大边缘节点的规模。

使用

先决条件

要使用 KubeEdge 您需要同时在云端和边缘端安装 docker。如果没有,请按照以下步骤安装 docker。

安装 docker

Ubuntu系统:

# Install Docker from Ubuntu's repositories:
apt-get update
apt-get install -y docker.io

# or install Docker CE 18.06 from Docker's repositories for Ubuntu or Debian:
apt-get update && apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
apt-get update && apt-get install docker-ce=18.06.0~ce~3-0~ubuntu

CentOS系统:

# Install Docker from CentOS/RHEL repository:
yum install -y docker

# or install Docker CE 18.06 from Docker's CentOS repositories:
yum install yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum update && yum install docker-ce-18.06.1.ce

KubeEdge 云端部分(edgecontroller)连接到 Kubernetes master 节点以同步节点和 pod 状态的更新。如果没有安装 Kubernetes,请按照以下步骤使用 kubeadm 安装 Kubernetes。

安装 kubeadm/kubectl

Ubuntu系统:

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

CentOS系统:

at <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

# Set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

安装 Kubernetes

初始化 Kubernetes master, 需要如下步骤:

kubeadm init

要使用 Kubernetes 命令行工具 kubectl, 您需要完成如下配置。

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

在完成 Kubernetes master 的初始化后, 我们需要暴露 Kubernetes apiserver 的 http 端口8080用于与 edgecontroller/kubectl 交互。请按照以下步骤在 Kubernetes apiserver 中启用 http 端口。

vi /etc/kubernetes/manifests/kube-apiserver.yaml
# Add the following flags in spec: containers: -command section
- --insecure-port=8080
- --insecure-bind-address=0.0.0.0

KubeEdge 的边缘部分在 deviceTwin 和设备之间使用 MQTT 进行通信。KubeEdge 支持3个 MQTT 模式:

  1. internalMqttMode: 启用内部 mqtt 代理。
  2. bothMqttMode: 同时启用内部和外部代理。
  3. externalMqttMode: 仅启用外部代理。

可以使用 edge.yaml 中的 mode 字段去配置期望的模式。

使用 KubeEdge 的 mqtt 内部或外部模式,您都需要确保在边缘节点上安装 mosquitto。如果没有,请参考下面的步骤安装。

安装 mosquitto

Ubuntu系统:

apt install mosquitto

CentOS系统:

yum install mosquitto

参考 mosquitto official website 获得更多的信息。

KubeEdge 在云和边缘之间基于证书进行身份验证/授权。证书可以使用 openssl 生成。请按照以下步骤生成证书。

安装 openssl

如果 openssl 不存在,请使用下面的命令安装 openssl。

apt-get install openssl

生成证书

安装 KubeEdge 需要 RootCA 证书以及证书/密钥对。相同的证书/密钥对可以同时用于云端和边缘端。

# Generete Root Key
openssl genrsa -des3 -out rootCA.key 4096
# Generate Root Certificate
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
# Generate Key
openssl genrsa -out kubeedge.key 2048
# Generate csr, Fill required details after running the command
openssl req -new -key kubeedge.key -out kubeedge.csr
# Generate Certificate
openssl x509 -req -in kubeedge.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out kubeedge.crt -days 500 -sha256 

克隆 KubeEdge

克隆 KubeEdge

git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
cd $GOPATH/src/github.com/kubeedge/kubeedge

构建 Cloud

cd $GOPATH/src/github.com/kubeedge/kubeedge/cloud/edgecontroller
make # or `make edgecontroller`

构建 Edge

cd $GOPATH/src/github.com/kubeedge/kubeedge/edge
make # or `make edge_core`

KubeEdge 可以跨平台编译,运行在基于ARM的处理器上。 请点击 Cross Compilation 获得相关说明。

运行 KubeEdge

运行 Cloud

cd $GOPATH/src/github.com/kubeedge/kubeedge/cloud/edgecontroller
# run edge controller
# `conf/` should be in the same directory as the cloned KubeEdge repository
# verify the configurations before running cloud(edgecontroller)
./edgecontroller

运行 Edge

我们提供了一个示例 node.json 来在 Kubernetes 中添加一个节点。 请确保在 Kubernetes 中添加了边缘节点 edge-node。运行以下步骤以添加边缘节点 edge-node。

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json

运行 Edge

# run mosquitto
mosquitto -d -p 1883

# run edge_core
# `conf/` should be in the same directory as the cloned KubeEdge repository
# verify the configurations before running edge(edge_core)
./edge_core
# or
nohup ./edge_core > edge_core.log 2>&1 &

在 Cloud 和 Edge 被启动之后, 您能通过如下的命令去检查边缘节点的状态。

kubectl get nodes

请确保您创建的边缘节点状态是 ready

如果您使用华为云 IEF, 那么您创建的边缘节点应该正在运行(可在 IEF 控制台页面中查看)。

部署应用

请按照以下步骤部署应用程序示例。

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/deployment.yaml

提示: 目前对于边缘端,必须在 Pod 配置中使用 hostPort,不然 Pod 会一直处于 ContainerCreating 状态。 hostPort 必须等于 containerPort 而且不能为 0。

然后可以使用下面的命令检查应用程序是否正常运行。

kubectl get pods

运行 Edge 单元测试

make edge_test

单独运行包的单元测试。

export GOARCHAIUS_CONFIG_PATH=$GOPATH/src/github.com/kubeedge/kubeedge/edge
cd <path to package to be tested>
go test -v

运行 Edge 集成测试

make edge_integration_test

集成测试框架的详细信息和用例

请单击链接 link 找到 KubeEdge 集成测试框架的详细信息和用例。

社区

Slack channel:

用户可以通过单击邀请链接 link 加入此频道。

文档

通过该链接 https://docs.kubeedge.io 可用找到有关 KubeEdge 的各个模块的详细信息。 一些说明 KubeEdge 平台的使用案例的示例应用程序和演示可以在当前仓库 this 中找到。

支持

如果您有任何疑问,请以下方式与我们联系: