Table of Contents maxLevel 2
...
Deployment, as well as other tasks such as starting and stopping the cluster, is coordinated through a set of Ansible playbooks. (Ansible playbooks are a system used by the Ansible tool for describing the desired state of a system. In many ways they are similar to shell scripts. For more details see the Ansible documentation.) The playbooks are run by the deploy node and build node, and they execute commands on the deploy node, the master node, the build node, and in some cases on the edge nodes. Once the nodes are set up, most activity is carried out by Kubernetes. Kubernetes is configured by the playbooks and told to start or stop services on the edge nodes. These services are run in containers, and the images for these containers are stored in a local Docker registry. There are containers for the Kubernetes components themselves, plus Flannel (a component which provides networking inside the Kubernetes cluster), EdgeX Foundry services, and four custom services (sync-
app and app
and image-app
and device-lora
and device-camera
) built using the EdgeX SDKs.
...
In addition, if the master node is not the same as the deploy node, remove the line connection: local
wherever it follows hosts: master
in the playbooks in deploy/playbook
, and change the line localhost:
wherever it flollows master:
in the hosts
in deploy/playbook
to IP address or hostname of the master node.
In the file master.yml
in the deploy/playbook/group_vars/all
directory, set the master_ip
value to the IP address of the master node. Note that this is required even if the master node is the same as the deploy node.
...
If the version of Kubernetes or Flannel changes you will need to populate the registry with updated images using the above command again. Note that you can force Kubernetes to use a specific patch version by editing the deploy/playbook/k8s/config.yml
file and adding the line kubernetesVersion: v1.22.79
(with the version you require) under the the kind: ClusterConfiguration
line, and running the master_install.yml
playbook again. (You can also make the same change to ~/.lfedge/config.yml
directly to avoid having to run master_install.yml
again.)
...
sudo systemctl disable nvzramconfig.service
...
Preparing the
...
Build Node
In the test installation, the build node is a VM running on a x86 PC, with Ubuntu Linux 20.04 installed. In addition, the Ansible tool must be installed. The Ansible tool provided in the Ubuntu software repository is a slightly older version which needs to be upgraded, refer to Ansible Installation Guide to install the latest version. But before running that playbook you need to configure a few things described in the section below.
The playbooks for use on the build node are stored in the cicd/playbook
directory of the source repository. These playbooks refer to other files in the source code, so the entire directory tree should be copied onto the deploy node. The easiest way to do this is by cloning the git repository directly as shown below:
git clone repository-url
Note, using the --depth=1
option can save some disk space if you don't need to modify the source code.
The git command will create a directory in the directory where it is run named after the repository. Inside the new directory will be the cicd/playbook
directory. Unless noted otherwise, the commands below should be run in that directory.
Node Configuration
Before running the setup_build.yml
playbook, if you use a different hostname of the master node, update the entry for the master node's host.
all:
hosts:
localhost:
arm-build:
ansible_host: erc01
ansible_user: edge
ansible_ssh_private_key_file: ~/.ssh/edge
ansible_become_password: password
children:
master:
hosts:
sdt-master:
In addition, if the master node is not the same as the deploy node, remove the line connection: local
wherever it follows hosts: master
in the playbooks in deploy/playbook
, and change the line localhost:
wherever it flollows master:
in the hosts
in deploy/playbook
to IP address or hostname of the master node.
In the file master.yml
in the deploy/playbook/group_vars/all
directory, set the master_ip
value to the IP address of the master node. Note that this is required even if the master node is the same as the deploy node.
master_ip: 192.168.2.16
Building the Custom Services
At this time, images for the four custom services, sync-app
and image-app
and device-lora
and device-camera
, need to be built from source and pushed to the private Docker registry. (In the future these images should be available on Docker Hub or another public registry.) Use the following playbooks from the cicd/playbook
directory on the deploy node to do so.
...
- CPS: Cyber-Physical System
- MQTT: A lightweight, publish-subscribe network protocol designed for connecting remote devices, especially when there are bandwidth constraints. (MQTT is not an acronym.)