美文网首页
kubeedge安装

kubeedge安装

作者: 一个大大大坑 | 来源:发表于2020-12-25 10:14 被阅读0次

    kube-edge

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

    安装

    kube-edge 强调的“云边协同”概念,分为“云”部分和“边”部分。云部分基于完整的社区发行版kubernetes,需要自行安装。kube-edge 基于社区版本kubernetes进行扩展,发展边缘计算,将mqtt等适用于边缘计算的协议加载进入云中,通过适配层接入k8s。

    安装整套kube-edge 需要先安装完成“云”环境,云环境参照社区k8s版本进行安装。完成后安装“kube-edge”扩展。

    安装环境

    使用openstack虚拟机:

    主机名称 IP 备注
    kube-edge-1 10.0.1.153 root/password
    kube-edge-2 10.0.1.157 root/password
    kube-edge-3 10.0.1.72 root/password

    前置设置

    • 关闭防火墙
    • 关闭selinux或者apparmor

    安装docker

    kube-edge-1 kube-edge-2 kube-edge-3 节点:

    对于ubuntu centos等发行版可以使用 docker 提供的安装脚本进行安装。--mirror 参数指定docker源为阿里云源以提升安装速度。

    每一台作为“云”端的主机均需要安装docker。

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh --mirror Aliyun
    

    安装kubernetes

    安装 kubelet kubeadm kubectl

    参考Installing kubeadm
    或者过内镜像Kubernetes 镜像

    apt-get update && apt-get install -y apt-transport-https
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    

    安装kubernetes集群

    kube-edge-1 节点:

    可以选择先获取镜像(国内无法直接获取gcr镜像,需要通过国内源或者代理)

    images=$(kubeadm config images list)
    
    for image in ${images} ; do
        name=${image#"k8s.gcr.io/"}
        docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${name}
        docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${name} ${image}
        docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${name}
    done
    docker images
    

    或者kubeadm init时指定repository为国内地址

    kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers/ --pod-network-cidr 10.240.0.0/16 --v 5
    

    执行安装:

    kubeadm init --pod-network-cidr 10.240.0.0/16 --v 5
    

    配置kubelet

    kube-edge-1 节点:

    安装完成后:

    kubelet 环境文件 "/var/lib/kubelet/kubeadm-flags.env"
    kubelet 配置文件 "/var/lib/kubelet/config.yaml"

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

    安装网络插件

    kube-edge-1 节点:

    以flannel为例:

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    扩展节点

    留意kubeadm init后的输出,可寻找到token用于新增节点至已有集群。

    kubeadm join 10.0.1.153:6443 --token ltuf9t.gyimo6d8n53xk4os \
        --discovery-token-ca-cert-hash sha256:b09492fbb6f793274c6a395d26045e62a77fa1a156ebe1ff74803942015d6a16
    

    安装kube-edge

    下载kube-edge

    仅需要下载 keadm 工具即可,其会自动下载相关需要的文件。

    如果下载失败,可以预先下载对应的文件至目录 /etc/kubeedge/

    # keadm version
    version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.0", GitCommit:"8b0913e04ef4ef826af6715d336e23a66e3774df", GitTreeState:"clean", BuildDate:"2020-11-13T08:04:56Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
    # wget -P /etc/kubeedge/ https://github.com/kubeedge/kubeedge/releases/download/v1.5.0/kubeedge-v1.5.0-linux-amd64.tar.gz
    

    配置“云”端

    kube-edge-1 节点:

    # keadm init
    ...
    # keadm gettoken
    89358eec8392985968899207038ea7118f0b627ffc2e56bf5ec8310c52b051ac.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDg2MDg4MTh9.bvOSdKD7DMxLPYsX66lwBGVTDSQ0UWKWKFFzlIT7HWU
    

    配置“边”端

    kube-edge-2 节点:

    keadm join --cloudcore-ipport=10.0.1.153:10000 --token=89358eec8392985968899207038ea7118f0b627ffc2e56bf5ec8310c52b051ac.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDg2MDg4MTh9.bvOSdKD7DMxLPYsX66lwBGVTDSQ0UWKWKFFzlIT7HWU
    

    边端设备会安装mqtt服务器,以及启动针对边缘设备接入的http服务器等。

    介绍

    KubeEdge 由以下组件构成:

    云上部分

    • CloudHub: CloudHub 是一个 Web Socket 服务端,负责监听云端的变化, 缓存并发送消息到 EdgeHub。
    • EdgeController: EdgeController 是一个扩展的 Kubernetes 控制器,管理边缘节点和 Pods 的元数据确保数据能够传递到指定的边缘节点。
    • DeviceController: DeviceController 是一个扩展的 Kubernetes 控制器,管理边缘设备,确保设备信息、设备状态的云边同步。

    边缘部分

    • EdgeHub: EdgeHub 是一个 Web Socket 客户端,负责与边缘计算的云服务(例如 KubeEdge 架构图中的 Edge Controller)交互,包括同步云端资源更新、报告边缘主机和设备状态变化到云端等功能。
    • Edged: Edged 是运行在边缘节点的代理,用于管理容器化的应用程序。
    • EventBus: EventBus 是一个与 MQTT 服务器(mosquitto)交互的 MQTT 客户端,为其他组件提供订阅和发布功能。
    • ServiceBus: ServiceBus是一个运行在边缘的HTTP客户端,接受来自云上服务的请求,与运行在边缘端的HTTP服务器交互,提供了云上服务通过HTTP协议访问边缘端HTTP服务器的能力。
    • DeviceTwin: DeviceTwin 负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
    • MetaManager: MetaManager 是消息处理器,位于 Edged 和 Edgehub 之间,它负责向轻量级数据库(SQLite)存储/检索元数据。

    架构

    kubeedge_arch.png

    从架构上看,其依赖于k8s apiserver。是需要附加于已有的k8s集群之上,依赖于已有k8s集群。

    功能

    kubeedge 云上部分和k8s功能无差别,主要为k8s 功能。

    在kubeedge概念中,edge设备与cloud设备无法双向互通,其假设cloud端开发一个用于公开访问的端点(即cloudcore的websocket端点),edge设备通过该端点与cloud 同步,上报节点信息,接受cloud任务下发。

    其中运行在edge边的部分由edgecore实际控制,edgecore还向更下层设备提供http/mqtt接口用于更下层设备接入。其本身亦可为执行工作负载。

    下图描述了一个典型的应用场景

    kubeedge.drawio.png

    核心能力

    kubeedge总体来说解决了两个问题:

    • 解决了云边网络不对等问题。精简/重新设计的edgehub,解决了云无法直接访问边缘设备的问题。将原kubelet的通信和功能使用websocket进行实现。由边缘设备发起链接,通过云中的配套服务转换注册进入云集群。
    • 边缘设备管理与消息处理。
      • 设备型号注册。将一个型号的设备和其属性以k8s自定义资源注册进入云端,支持定义其属性,属性定义用于确定消息下发的数据结构。
      • 设备实例管理。将实际运行的边缘设备实例以k8s自定义资源注册进入云端,在云端对属性进行更改后,通过边缘设备mqtt将消息推送至边缘设备,边缘设备针对属性更改进行实际处理。
      • 设备实例操作。提供http接口对已经注册的边缘设备属性进行更改,更改会通过kubeedge转换为mqtt消息下发至对应设备。

    资源占用

    1vCPU2GB内存机器中,空载 edgecore 进程信息:

    # top -p 35553
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                     
      35553 root      20   0 1393868  81924  52304 S   3.7   4.0   1:43.06 edgecore     
    
    # systemctl status edgecore.service 
    ● edgecore.service
         Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2020-12-21 07:18:55 UTC; 1h 7min ago
       Main PID: 35553 (edgecore)
          Tasks: 12 (limit: 2344)
         Memory: 32.1M
         CGroup: /system.slice/edgecore.service
                 └─35553 /etc/kubeedge/edgecore
    

    相关文章

      网友评论

          本文标题:kubeedge安装

          本文链接:https://www.haomeiwen.com/subject/fisbnktx.html