Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
Introduction

...

Table of Contents
Introduction

The guide covers the installation details which are related to IOT Gateway Blueprint only.  

...

ELIOT Manager acts as the Controller Node managing the ELIOT Edge Node(s) and the containerised applications running on the various ELIOT Edge Nodes.


Note: ELIOT - IOT Gateway Blueprint Deployment has been tested on Huawei Public Cloud Virtual Machines and is not tested on Bare-Metal Environment. Though, theoretically deployment should work  in bare metal,  provided hardware and software prerequisites are met. Kindly refer the Test Document for further details on the tested deployment.

Pre-Installation Requirements

...

S. NoSoftwareTypeVersionLicenseRemarks
1.

Docker

CRI18.06Apache 2.0 license


2.KubernetesOrchestration1.16Apache 2.0 license
3PrometheusMonitoring
Apache 2.0 licenseRunning as Docker Container

...

S. No.SoftwareTypeOSVersionLicenseRemarks
1.DockerCRI18.06Apache 2.0 license
2.KubernetesOrchestration16.0Apache 2.0 licenseWhen Kubernetes is being used for the IoT Gateway Blueprint
3.EdgeXIoT PlatformEdinburghApache 2.0 licenseEdgeX Platfrom. This will be running on the IoT Gateway Node
4.cAdvisorContainer MetricsLatest Container version in Docker HubApache 2.0 licenseRunning as Docker Container.

...

No Format
root@akraino-slave-001:#git clone "https://gerrit.akraino.org/r/eliot"
root@akraino-slave-001:#cd eliot/blueprints/iotgateway/scripts
/iotgateway/scripts
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#vim nodelist

After editing the nodelist file , execute the setup.sh script.  The setup.sh script internally installs Docker and Kubernetes with Calico CNI plugin and RBAC for authorization.

No Format
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#vim nodelist

After editing the nodelist file , execute the setup.sh script.  The setup.sh script internally installs Docker and Kubernetes with Calico CNI plugin and RBAC for authorization.

No Format
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#./setup.sh

Once the execution is completed in console will see prompt "ELIOT IOT-Gateway Platform Deployment--------------------------SUCCESS".

Following packages will be installed in the cluster in the respective nodes:-

ELIOT Manager

...

scripts#./setup.sh

Once the execution is completed in console will see prompt "ELIOT IOT-Gateway Platform Deployment--------------------------SUCCESS".

Following packages will be installed in the cluster in the respective nodes:-

ELIOT Manager

S. NoSoftwareTypeVersionLicenseRemarks
1.

Docker

CRI18.06Apache 2.0 license


2.KubernetesOrchestration1.16Apache 2.0 license
3PrometheusMonitoring
Apache 2.0 licenseRunning as Docker Container

ELIOT IoT Gateway Node

S. No.SoftwareTypeOSVersionLicenseRemarks
1.DockerCRI18.06Apache 2.0 license
2.KubernetesOrchestration
1
16.
16
0Apache 2.0 licenseWhen Kubernetes is being used for the IoT Gateway Blueprint
3.
PrometheusMonitoring
cAdvisorContainer MetricsLatest Container version in Docker HubApache 2.0 licenseRunning as Docker Container.
4.OPC-UAIoT Protocol Architecture
MIT license

Deployment Type 3: ELIOT IoT Gateway

...

Deployment Type 3: ELIOT IoT Gateway Deployment using KubeEdge

...

Deployment using KubeEdge

Clone the ELIOT git repo in ELIOT Manager node. It will create eliot folder, for executing the script go to $HOME/eliot/blueprints/iotgateway/scripts/src folder.

Edit the config_kubeedge file with ELIOT Manager and ELIOT Edge Node

The format of config_kubeedge file is as follows :

EDGENODEUSR=""

EDGENODEIP=""

EDGENODEPASSWORD=""

MASTERNODEIP=""

HOME_EDGENODE=""

KUBEEDGE_ETC="/etc/kubeedge"

KUBEEDGE_VERSION_ETC="/etc/kubeedge-v1.1.0-linux-amd64/"

PATH_OF_KUBEEDGE=""


No Format
root@akraino-slave-001:#git clone "https://gerrit.akraino.org/r/eliot" 
root@akraino-slave-001:#cd eliot/blueprints/iotgateway/scripts/
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#./setup.sh 
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#vim config_kubeedge
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#cd kubeedge
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts/

...

Edit the config_kubeedge file with ELIOT Manager and ELIOT Edge Node

The format of config_kubeedge file is as follows :

EDGENODEUSR=""

EDGENODEIP=""

EDGENODEPASSWORD=""

MASTERNODEIP=""

HOME_EDGENODE=""

...

kubeedge# ./kubeedge_setup.sh


Info

Note:

We are running setup.sh without updating nodelist file.  This is required to setup k8s master node which is required as a prerequisite for KubeEdge setup

in KubeEdge_setup.sh → we are currently using V1.1.0 version of kubeedge ( latest stable version package )

PATH_OF_KUBEEDGE variable has to be set with path of the kubeedge folder.  This will be "eliot/blueprints/iotgateway/scripts/kubeedge"

KUBEEDGE_VERSION_

...

ETC → variable has to be set with "/etc/kubeedge-v1.1.0-linux-amd64/"

...

PATH_OF_KUBEEDGE=""

No Format
root@akraino-slave-001:#git clone "https://gerrit.akraino.org/r/eliot" 
root@akraino-slave-001:#cd eliot/blueprints/iotgateway/scripts/
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#./setup.sh 
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#vim config_kubeedge
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts#cd kubeedge
root@akraino-slave-001:~/eliot/blueprints/iotgateway/scripts/kubeedge# ./kubeedge_setup.sh

Info

Note:

We are running setup.sh without updating nodelist file.  This is required to setup k8s master node which is required as a prerequisite for KubeEdge setup

in KubeEdge_setup.sh → we are currently using V1.1.0 version of kubeedge ( latest stable version package )

PATH_OF_KUBEEDGE variable has to be set with path of the kubeedge folder.  This will be "eliot/blueprints/iotgateway/scripts/kubeedge"

KUBEEDGE_VERSION_ETC → variable has to be set with "/etc/kubeedge-v1.1.0-linux-amd64/" since we are using 1.1.0 version of kubeedge

Snapshot Deployment Overview

There are two images created for Manager and Node machines. These are .qcow2 files. After deploying the Virtual Machines using these images, your setup for ELIOT is ready in minutes. Following is the link to the document to use these images:

         https://docs.google.com/document/d/1TwtDRvxJ_0IFzc5KvO7aaOh3If-jhpCSrccjttQA4LE/edit?usp=sharing

Special Requirements for Virtual Deployments

N/A

Install Jump Host

N/A

Verifying the Setup - VM's

N/A

Upstream Deployment Guide

Upstream Deployment Key Features

N/A

Special Requirements for Upstream Deployments

N/A

Scenarios and Deploy Settings for Upstream Deployments

N/A

Including Upstream Patches with Deployment

N/A

Running

N/A

Interacting with Containerized Overcloud

N/A

Verifying the Setup

Verifying ELIOT Kubernetes Deployment

The setup.sh script will install the ELIOT Manager and one ELIOT Edge Node ( depending on the number of edge nodes configured in the nodelist configuration file).  The script deploys the Kubernetes cluster and also installs EdgexX platform,  NGINX, Prometheus and cAdvisor and verifies whether the cluster by checking if EdgeX platform , NGINX Server is deployed successfully or not. If the deployment is not successful then the ELIOT setup script will exit.

After script execution is completed the Kubernetes cluster setup can be checked by executing kubectl get nodes. It will show both the ELIOT Manager and the ELIOT Edge Node as ready.

The setup script also deploys NGINX , cAdvisor , Edgex platform on the ELIOT Edge Node and verifies whether its deployed successful or not.

Developer  Guide and Troubleshooting

Uninstall Guide

Following two files can be used to revert the changes made by ELIOT deployment through kubernetes.

...

Troubleshooting

...

1) Core-dns pod instability issue - CrashloopBack off / Error / Restarts while executing

$ kubectl get pods -n kube-system

Cause: /etc/resolv.conf is not configured properly to establish the network with coredns pod.

Solution:

check /etc/resolv.conf  → whether it is having the content as below

nameserver 8.8.8.8

2) Calico pods ( CNI ) instability issue - restarting the calico pods with unstable network connectivity

while executing $ kubectl get pods -n kube-system or getting BGP connection not estabilished in calico-node-<xyz> . Bird is not ready

while executing $ kubectl describe pods -n  kube-system calico-node-<xyz>

Cause: Error occurred due to network interface of the vm / machine which calico cni is using can't be able to connect to the internet.

Solution:

We have to execute below command in ELIOT Master node

$ kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=can-reach=www.google.com    

                                                                                                          ( or )

$ kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=<interface-name>

<interface-name> must be the interface which the machine / VM can be able to connect with the internet

Kindly refer the below link to check detailed info

https://docs.projectcalico.org/networking/ip-autodetection

Error Message Guide

N/A

Maintenance

Blueprint Package Maintenance

Software maintenance

N/A

Hardware maintenance

N/A

Blueprint Deployment Maintenance

N/A

Frequently Asked Questions

N/A

License

Any software developed by the "Akraino ELIOT" Project is licensed under the
Apache License, Version 2.0 (the "License");
you may not use the content of this software bundle except in compliance with the License.
You may obtain a copy of the License at <https://www.apache.org/licenses/LICENSE-2.0>

...

since we are using 1.1.0 version of kubeedge

Snapshot Deployment Overview

There are two images created for Manager and Node machines. These are .qcow2 files. After deploying the Virtual Machines using these images, your setup for ELIOT is ready in minutes. Following is the link to the document to use these images:

         https://docs.google.com/document/d/1TwtDRvxJ_0IFzc5KvO7aaOh3If-jhpCSrccjttQA4LE/edit?usp=sharing

Special Requirements for Virtual Deployments

N/A

Install Jump Host

N/A

Verifying the Setup - VM's

N/A

Upstream Deployment Guide

Upstream Deployment Key Features

N/A

Special Requirements for Upstream Deployments

N/A

Scenarios and Deploy Settings for Upstream Deployments

N/A

Including Upstream Patches with Deployment

N/A

Running

N/A

Interacting with Containerized Overcloud

N/A

Verifying the Setup

Verifying ELIOT Kubernetes Deployment

The setup.sh script will install the ELIOT Manager and one ELIOT Edge Node ( depending on the number of edge nodes configured in the nodelist configuration file).  The script deploys the Kubernetes cluster and also installs EdgexX platform,  NGINX, Prometheus and cAdvisor and verifies whether the cluster by checking if EdgeX platform , NGINX Server is deployed successfully or not. If the deployment is not successful then the ELIOT setup script will exit.


After script execution is completed the Kubernetes cluster setup can be checked by executing kubectl get nodes. It will show both the ELIOT Manager and the ELIOT Edge Node as ready.

The setup script also deploys NGINX , cAdvisor , Edgex platform on the ELIOT Edge Node and verifies whether its deployed successful or not.

Developer  Guide and Troubleshooting

Uninstall Guide

Following two files can be used to revert the changes made by ELIOT deployment through kubernetes.

  1. kubernetes_reset.sh:
    Purpose: There were certain issues occurring when the setup.sh file was executed again on the same setup. it threw error saying ‘the file/port in already in use’ when setup.sh file was executed again.
    Solution: A list was prepared for errors occurring on re-execution of setup.sh file. To fix them, some commands were executed manually to reset the changes. Once the list was finalized, these were consolidated in a .sh file. The file is in eliot/scripts/ folder.
    What it does:
    -- Resets kubeadm changes on both Manager and Edge Node machine.
    -- Installs iptables, ipvsadm required to restart kubectl service on both Manager and Edge Node machine.
    -- Restarts kubelet service on both Manager and Edge Node machine.
    -- Releases the port 10250 on both Manager and Edge Node machine.
    -- Deletes kubernetes file on Edge Node machine.

  2. kubernetes_cleanup.sh
    Purpose: There was no file to rollback the changes done by setup.sh.
    Solution: A list of changes done by setup.sh file was prepared and then commands were written to rollback those installations and changes. The file is in eliot/scripts/ folder.
    What it does:
    -- Uninstalls Docker, Kubernetes, Kubectl, Kubeadm, Kubelet on both Manager and Edge Node machine.
    -- Resets kubeadm changes on both Manager and Edge Node machine.
    -- Installs iptables, ipvsadm required to restart kubectl service on both Manager and Edge Node machine.
    -- Restarts kubelet service on both Manager and Edge Node machine.
    -- Releases the port 10250 on both Manager and Edge Node machine.

Troubleshooting


Note

1) Core-dns pod instability issue - CrashloopBack off / Error / Restarts while executing

$ kubectl get pods -n kube-system


Cause: /etc/resolv.conf is not configured properly to establish the network with coredns pod.


Solution:

check /etc/resolv.conf  → whether it is having the content as below

nameserver 8.8.8.8


2) Calico pods ( CNI ) instability issue - restarting the calico pods with unstable network connectivity

while executing $ kubectl get pods -n kube-system or getting BGP connection not estabilished in calico-node-<xyz> . Bird is not ready

while executing $ kubectl describe pods -n  kube-system calico-node-<xyz>


Cause: Error occurred due to network interface of the vm / machine which calico cni is using can't be able to connect to the internet.


Solution:

We have to execute below command in ELIOT Master node

$ kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=can-reach=www.google.com    

                                                                                                          ( or )

$ kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=<interface-name>

<interface-name> must be the interface which the machine / VM can be able to connect with the internet


Kindly refer the below link to check detailed info

https://docs.projectcalico.org/networking/ip-autodetection


Error Message Guide

N/A

Maintenance

Blueprint Package Maintenance

Software maintenance

N/A

Hardware maintenance

N/A

Blueprint Deployment Maintenance

N/A

Frequently Asked Questions

N/A

License

Any software developed by the "Akraino ELIOT" Project is licensed under the
Apache License, Version 2.0 (the "License");
you may not use the content of this software bundle except in compliance with the License.
You may obtain a copy of the License at <https://www.apache.org/licenses/LICENSE-2.0>

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

License info for the ELIOT - IOTGateway components:

ELIOT Manager

S. NoSoftwareTypeVersionLicenseRemarks
1.

Docker

CRI18.06Apache 2.0 license


2.KubernetesOrchestration1.16Apache 2.0 license
3PrometheusMonitoring
Apache 2.0 licenseRunning as Docker Container

ELIOT IoT Gateway Node

S. No.SoftwareTypeOSVersionLicenseRemarks
1.DockerCRI18.06Apache 2.0 license
2.KubernetesOrchestration16.0Apache 2.0 licenseWhen Kubernetes is being used for the IoT Gateway Blueprint
3.EdgeXIoT PlatformEdinburghApache 2.0 licenseEdgeX Platfrom. This will be running on the IoT Gateway Node
4.cAdvisorContainer MetricsLatest Container version in Docker HubApache 2.0 licenseRunning as Docker Container.


References


Definitions, acronyms and abbreviations