说明

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

kubernetes安装

kubeadm reset kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f kube-flannel.yml

云端安装

下载kubeedge安装文件到/etc/kubeedge文件夹底下,包含(根据处理器架构做对应的选择): 下载kubeedge安装文件到/etc/kubeedge文件夹底下,包含(根据处理器架构做对应的选择):

certgen.sh

checksum_kubeedge-v1.8.2-linux-amd64.tar.gz.txt

kubeedge-v1.8.2-linux-amd64.tar.gz

keadm-v1.8.2-linux-amd64.tar.gz

edgemesh.tgz crds

cloudcore.service

helm

安装keadm

解压keadm,chmod +x keadm,cp keadm /usr/bin/

初始化cloudcore

生成stream证书

export CLOUDCOREIPS="192.168.50.148"

复制kubeedge生成证书的certgen.sh文件,

chmod +x certgen.sh

/etc/kubeedge/certgen.sh stream 或者 bash -x ./certgen.sh genCertAndKey stream

初始化cloudcore

sudo keadm init --kubeedge-version=1.8.2 --kube-config=/root/.kube/config --advertise-address="192.168.50.148"

添加service

sudo cp cloudcore.service /etc/systemd/system/

sudo keadm gettoken

修改edgecore配置文件

$ vim /etc/kubeedge/config/cloudcore.yaml
modules:
  ..
  cloudStream:
    enable: true
    streamPort: 10003
  ..
  dynamicController:
    enable: true
..

edgemesh安装(需要安装helm)

​
helm install edgemesh --set server.nodeName=all-in-one --set server.publicIP=192.168.50.148 https://raw.githubusercontent.com/kubeedge/edgemesh/main/build/helm/edgemesh.tgz

​

ps -ef|grep cloudcore,杀掉进程然后sudo service cloudcore start重新启动

安装边缘端edgecore

下载安装文件

同云端下载内容,根据处理器架构做对应修改,这里省略不详细展开

修改hostname(可选)

sudo hostnamectl set-hostname <newhostname>

vim /etc/hosts文件中第一行的127.0.0.1解析到的hostname

安装mqtt(mosquitto)

mqtt只需要在边缘端安装,ubuntu系统直接使用apt-get,如下:

apt-get install mosquitto // 安装

加入集群

sudo keadm join --cloudcore-ipport=192.168.50.148:10000 --kubeedge-version=1.8.2   --token=31d060c239c5afda79093d79b4013846285ddbe1821523efbf5dffd0796623c3.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzgzNDc1ODV9.jqRQlNjxGb_7f5JJSedQRf9TBZO4wzijf3eH50rzfTM  --edgenode-name=jetsonnx-4g  --labels workspaceId=200100,companyId=200,edgeType=infer

修改边缘端配置文件:

$ vim /etc/kubeedge/config/edgecore.yaml
modules:
  ..
  edgeStream:
  enable: true
  handshakeTimeout: 30
  ..
  edgeMesh:
    enable: false
  ..
  metaManager:
    metaServer:
      enable: true
..
sudo systemctl restart edgecore

这里节点重启后要加入集群会出现edgemesh-agent一直处于pending状态中,需要再云端删掉对应的pod后重新生成pod才能成功部署到边缘端,后续需要优化。

实在还是失败可以尝试删除 kubectl delete objectsync --all

查看edgemesh是否安装成功

在边缘端: curl 127.0.0.1:10550/api/v1/services

在云端: kubectl get nodes -o wide && kubectl get pods -o wide -A

查看容器状态,都是running就表示运行成功了

日志查看

云端日志位置: tail -f /var/log/kubeedge/cloudcore.log

边缘端日志位置: journalctl -u edgecore.service -b -f

服务部署测试

nginx-test.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: kubeedge-demo-app
  name: kubeedge-demo-nginx
  namespace: default
spec:
  selector:
    matchLabels:
      k8s-app: kubeedge-demo-app
  template:
    metadata:
      labels:
        k8s-app: kubeedge-demo-app
    spec:
      #nodeName: davinci-mini
      nodeName: jetsonnano2g-desktop
      hostNetwork: true
      containers:
      - name: kubeedge-nginx-main
        image: nginx:1.21.3
      # restartPolicy: Always
        ports:
        - containerPort: 80
​
        env:
          - name: MY_NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
​
​
          - name: MY_POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
---
kind: Service
apiVersion: v1
metadata:
  name: nginx-srv
  namespace: default
  labels:
   k8s-app: kubeedge-demo-nginx
spec:
  ports:
    - name: demo-http-80
      protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 31513
  selector:
    k8s-app: kubeedge-demo-app
  clusterIP: 10.96.0.5
#  clusterIPs:
#    - 10.96.0.4
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
​
​

kubectl apply -f nginx-test.yaml创建应用和服务

在边缘端即可通过servicename.namespace:port访问对应的服务,egg: curl nginx-srv.default

参考

kubeedge安装: Deploying using Keadm | KubeEdge

edgemesh安装: 快速上手 | EdgeMesh

kubeedge官方文档:Deploying with binary | KubeEdge

kubeedge代码仓库: GitHub - kubeedge/kubeedge: Kubernetes Native Edge Computing Framework (project under CNCF) kubeedge部署样例: https://github.com.cnpmjs.org/kubeedge/examples

kubeedge设备控制文档: Device Manager | KubeEdge

垃圾CSDN markdown都支持不好!!

Logo

开源、云原生的融合云平台

更多推荐