Setup using Release package

Prerequisites

  1. vi /etc/kubernetes/manifests/kube-apiserver.yaml
  2. # Add the following flags in spec: containers: -command section
  3. - --insecure-port=8080
  4. - --insecure-bind-address=0.0.0.0
  • (Optional)KubeEdge also supports https connection to Kubernetes apiserver. Follow the steps in Kubernetes Documentation to create the kubeconfig file.

Enter the path to kubeconfig file in controller.yaml

  1. controller:
  2. kube:
  3. ...
  4. kubeconfig: "path_to_kubeconfig_file" #Enter path to kubeconfig file to enable https connection to k8s apiserver

Cloud Vm

Note:execute the below commands as root user

  1. VERSION="v0.3.0"
  2. OS="linux"
  3. ARCH="amd64"
  4. curl -L "https://github.com/kubeedge/kubeedge/releases/download/${VERSION}/kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz" --output kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz && tar -xf kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz -C /etc

Generate Certificates

RootCA certificate and a cert/key pair is required to have a setup for KubeEdge. Same cert/key pair can be used in both cloud and edge.

  1. wget -L https://github.com/kubeedge/kubeedge/blob/master/build/tools/certgen.sh
  2. # make script executable
  3. chmod +x certgen.sh
  4. bash -x ./certgen.sh genCertAndKey edge

NOTE: The cert/key will be generated in the /etc/kubeedge/ca and /etc/kubeedge/certs respectively.

  • The path to the generated certificates should be updated in etc/kubeedge/cloud/conf/controller.yaml. Please update the correct paths for the following :
    • cloudhub.ca
    • cloudhub.cert
    • cloudhub.key
  • Create device model and device CRDs.
  1. wget -L https://github.com/kubeedge/kubeedge/blob/master/build/crds/devices/devices_v1alpha1_devicemodel.yaml
  2. # make script executable
  3. chmod +x devices_v1alpha1_devicemodel.yaml
  4. kubectl create -f devices_v1alpha1_devicemodel.yaml
  5. wget -L https://github.com/kubeedge/kubeedge/blob/master/build/crds/devices/devices_v1alpha1_device.yaml
  6. # make script executable
  7. chmod +x devices_v1alpha1_device.yaml
  8. kubectl create -f devices_v1alpha1_device.yaml
  • Run cloud
  1. cd /etc/kubeedge/cloud
  2. # run edge controller
  3. # `conf/` should be in the same directory where edgecontroller resides
  4. # verify the configurations before running cloud(edgecontroller)
  5. ./edgecontroller

Edge Vm

Prerequisites

Configuring MQTT mode

The Edge part of KubeEdge uses MQTT for communication between deviceTwin and devices. KubeEdge supports 3 MQTT modes:

  • internalMqttMode: internal mqtt broker is enabled.
  • bothMqttMode: internal as well as external broker are enabled.
  • externalMqttMode: only external broker is enabled.Use mode field in edge.yaml to select the desired mode.

To use KubeEdge in double mqtt or external mode, you need to make sure that mosquitto or emqx edge is installed on the edge node as an MQTT Broker.

  • We have provided a sample node.json to add a node in kubernetes. Please make sure edge-node is added in kubernetes. Run below steps to add edge-node.
  • Deploy nodeshell wget -L https://github.com/kubeedge/kubeedge/blob/master/build/node.json #Modify the node.jsonfile and changemetadata.name` to the name of the edge node kubectl apply -f node.json
  • Modify the /etc/kubeedge/edge/conf/edge.yaml configuration file
    • Replace edgehub.websocket.certfile and edgehub.websocket.keyfile with your own certificate path
    • Update the IP address of the master in the websocket.url field.
    • replace fb4ebb70-2783-42b8-b3ef-63e2fd6d242e with edge node name in edge.yaml for the below fields :
      • websocket:URL
      • controller:node-id
      • edged:hostname-override
    • Configure the desired container runtime in /etc/kubeedge/edge/conf/edge.yaml configuration file
    • Specify the runtime type to be used as either docker or remote (for all CRI based runtimes including containerd).If this parameter is not specified docker runtime will be used by default
      • runtime-type:docker or runtime-type:remote
    • Additionally specify the following parameters for remote/CRI based runtimes
      • remote-runtime-endpoint:/var/run/containerd/containerd.sock
      • remote-image-endpoint:/var/run/containerd/containerd.sock
      • runtime-request-timeout: 2
      • podsandbox-image: k8s.gcr.io/pause
      • kubelet-root-dir: /var/run/kubelet/
  • Run edge
  1. # run edge_core
  2. # `conf/` should be in the same directory as the cloned KubeEdge repository
  3. cd /etc/kubeedge/edge
  4. # verify the configurations before running edge(edge_core)
  5. ./edge_core
  6. # or
  7. nohup ./edge_core > edge_core.log 2>&1 &
  8.  
  1. **Note**: Running edge_core on ARM based processors,follow the above steps as mentioned for Edge Vm
  1. VERSION="v0.3.0"
  2. OS="linux"
  3. ARCH="arm"
  4. curl -L "https://github.com/kubeedge/kubeedge/releases/download/${VERSION}/kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz" --output kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz && tar -xf kubeedge-${VERSION}-${OS}-${ARCH}.tar.gz -C /etc
  • Monitoring containers status
    • If the container runtime configured to manage containers is containerd , then the following commands can be used to inspect container status and list images.
      • sudo ctr –namespace k8s.io containers ls
      • sudo ctr –namespace k8s.io images ls
      • sudo crictl exec -ti /bin/bash

NOTE: scp kubeedge folder from cloud vm to edge vm

  1. In cloud
  2. scp -r /etc/kubeedge root@edgeip:/etc