During the Quickstart and the tutorial, we specified the images to be used for each microservice, for each type of agent.
That was nice and easy, but what if you need to deploy the same code on a lot of agents ? You'd need to specify the images for each microservice. Wouldn't it be nice to have a way to specify the images to be used for each type of agent once for all, then reuse this configuration ?
That's where the Controller microservice catalog comes into play !
Each ioFog Controller comes with a built-in microservice catalog. You can see the list of preconfigured microservices images using iofogctl
$ iofogctl get catalog
NAMESPACE
default
ID NAME DESCRIPTION REGISTRY X86 ARM
4 Diagnostics 0 remote iofog/diagnostics iofog/diagnostics-arm
5 Hello Web Demo A simple web server to test Eclipse ioFog. remote iofog/hello-web iofog/hello-web-arm
6 Open Weather Map Data A stream of data from the Open Weather Map API in JSON format remote iofog/open-weather-map iofog/open-weather-map-arm
7 JSON REST API A configurable REST API that gives JSON output remote iofog/json-rest-api iofog/json-rest-api-arm
8 Temperature Converter A simple temperature format converter remote iofog/temperature-conversion iofog/temperature-conversion-arm
9 JSON Sub-Select Performs sub-selection and transform operations on any JSON messages remote iofog/json-subselect iofog/json-subselect-arm
10 Humidity Sensor Simulator Humidity Sensor Simulator for Eclipse ioFog remote iofog/humidity-sensor-simulator iofog/humidity-sensor-simulator-arm
11 Seismic Sensor Simulator Seismic Sensor Simulator for Eclipse ioFog remote iofog/seismic-sensor-simulator iofog/seismic-sensor-simulator-arm
12 Temperature Sensor Simulator Temperature Sensor Simulator for Eclipse ioFog remote iofog/temperature-sensor-simulator iofog/temperature-sensor-simulator-arm
13 Common Logging Container which gathers logs and provides REST API for adding and querying logs from containers remote iofog/common-logging iofog/common-logging-arm
14 JSON Generator Container generates ioMessages with contentdata as complex JSON object. remote iofog/json-generator iofog/json-generator-arm
Instead of specifying the images for each agent type, you can use a catalog ID.
We can see that there is a Hello Web Demo
catalog item that is configured with the iofog/hello-web
image for x86 agents, and iofog/hello-web-arm
for arm agents.
So, to deploy a microservice running those images, we can use the following yaml:
$ echo "---
apiVersion: iofog.org/v1
kind: Microservice
metadata:
name: Hello Web Microservice
spec:
agent:
name: agent-name
images:
catalogId: 5
config: {}
rootHostAccess: false
ports: []
volumes: []
env: []
routes: []
application: my-application
" > ./hello-web-catalog.yaml
$ iofogctl deploy microservice -f hello-web-catalog.yaml
NB: This assumes you have an iofogctl stack running, with an agent called agent-name
and an application called my-application
We can check that the expected images have been used by using iofogctl to describe our newly created microservice:
$ iofogctl describe microservice 'Hello Web Microservice'
apiVersion: iofog.org/v1
kind: Microservice
metadata:
name: Hello Web Microservice
spec:
agent:
name: agent-name
config:
dockerUrl: unix:///var/run/docker.sock
diskLimit: 50
diskDirectory: /var/lib/iofog-agent/
memoryLimit: 4096
cpuLimit: 80
logLimit: 10
logDirectory: /var/log/iofog-agent/
logFileCount: 10
statusFrequency: 30
changeFrequency: 60
deviceScanFrequency: 60
bluetoothEnabled: false
watchdogEnabled: false
abstractedHardwarEenabled: false
images:
catalogId: 5
x86: iofog/hello-web
arm: iofog/hello-web-arm
registry: remote
config: {}
rootHostAccess: false
ports: []
volumes: []
env: []
application: my-application
You can also use iofogctl to create your own catalog items.
$ iofogctl create catalogitem Postgresql --registry remote --x86 postgres:latest --arm postgres:latest --description 'Postgresql database'
$ iofogctl get catalog | grep 'Postgresql'
15 Postgresql Postgresql database remote postgres:latest postgres:latest
We used grep to filter the ouput, but the columns are the same as above. You can now use the images:catalogId
field set to 15 in order to deploy postgres databases on your agents.