March 2022: Feature releases & highlights
We are happy to announce that we just have released a major frontend face-lift and backend enhancements.
Enhanced frontend
User experience
You will now meet an enhanced front-end user experience. The layout is more compact and navigation is improved for various user tasks.
Mixing forms and YAML editing
It is now easier to move between forms and YAML editing, any edits in the YAML will appear in the forms. You can choose to show/hide forms and YAML respectively.
Application state
In order to improve application observability a user can now directly inspect the state of an application at a specific site:
Configuring external container registries
It is also easier to configure remote container registries with authentication information in Strongbox. Assume you have a Strongbox vault with a credentials
secrets store for username
and password
as below.
When adding a remote registry you will have drop-downs for picking the right vault and secrets:
The API for managing remote registries has also been enhanced.
Backend
API Enhancements
We have made a major effort to improve the usability of the APIs; documentation, terminology, structure, and consistency across all features and APIs. This makes it easier to learn the APIs from the beginning and further simplifies the integration to your CI/CD pipeline for example.
The full API documentation is available on our website.
Validating your YAML files
While working with your application or deployment files it is now possible to validate the payload without actually trying to load it into the system. You can get feedback directly to discover any syntax errors for example. This is possible by passing the parameter —validate to create, delete, etc. In the example below I entered match-site-label
instead of match-site-labels
$ ./supctl create --validate application-deployments << END
name: popcorn-deployment
application: popcorn-application
application-version: "*"
placement:
match-site-label: system/type = edge
END
errors:
- error-message: expected one of 'all-sites', 'match-site-labels' (in mandatory choice 'select-sites')
error-info:
parse-error:
path: /placement
- error-message: "unexpected fields: match-site-label"
error-info:
parse-error:
path: /placement
Command failed - 400
Specifying fields
You can now specify which fields you want to be returned when doing a get request
So for example showing the name and version of the applications:
$ supctl -q 'fields=name,version' show applications
yields
- name: popcorn-application
- name: theater-room-manager
version: "1.0"
Enhanced system logs and host metrics
As you probably know, Avassa has a built-in event streaming service called Volga. It is a publish-subscribe bus that the Avassa system uses internally, but it can also be used by application developers. Avassa has a number of built-in topics which you can subscribe to such as system:scheduler-events
, system:application-metrics,
system-logs
and system:host-metrics
For example, in order to look at scheduler events at a certain site:
$ ./supctl do --site helsingborg-roda-kvarn volga topics system:logs consume --payload-only
Results in:
...
{
"event": "service-instance-starting",
"occurred-at": "2022-04-08T09:31:41.445Z",
"id": "31ff75b2-3d1f-41f6-8d15-a7a8f5580c25",
"tenant": "b2",
"source": "scheduler",
"data": {
"application": "theater-room-manager",
"application-version": "1.0",
"service-name": "theater-operations",
"service-instance": "theater-operations-3",
"site": "helsingborg-roda-kvarn",
"hostname": "helsingborg-roda-kvarn-001",
"application-ips": [
"172.16.0.3"
]
}
}
{
"event": "service-instance-starting",
"occurred-at": "2022-04-08T09:31:41.705Z",
"id": "3b5620b4-fda6-4a5b-aabb-3a00e7f24dc9",
"tenant": "b2",
"source": "scheduler",
"data": {
"application": "theater-room-manager",
"application-version": "1.0",
"service-name": "theater-operations",
"service-instance": "theater-operations-2",
"site": "helsingborg-roda-kvarn",
"hostname": "helsingborg-roda-kvarn-001",
"application-ips": [
"172.16.0.4"
]
}
}
...
As part of the overall enhancements of the backend, we have especially focused on enhancing and enriching the information in the system:logs
and system:host-metrics
topics. The system:logs
topic is useful to get deep insight into what happens in the system and to support troubleshooting scenarios.
Each system log item is in the format
<LEVEL> (TENANT) DATE TIME HOSTNAME SRCFILE PID
Copy
Where LEVEL
is one of EMERGENCY
, ALERT
, CRITICAL
, ERROR
, WARNING
, NOTICE
, INFO
, DEBUG
.
So for example
$ ./supctl do --site helsingborg-roda-kvarn volga topics system:logs consume --payload-only
<NOTICE> (b2) 2022-03-30 05:51:34.063451+00:00 helsingborg-roda-kvarn-001 sched_image_server:442 <0.5592.3>
Successful pull: parent:4848/b2/avassa-public/movie-theaters-demo/digital-assets-manager@sha256:c5e6b34a08c7007bbe718f8dfc8b72583b2bf3f90908e06d5038b8e79138a036 -> [b2]avassa-public/movie-theaters-demo/digital-assets-manager@sha256:c5e6b34a08c7007bbe718f8dfc8b72583b2bf3f90908e06d5038b8e79138a036
<INFO> 2022-04-08 09:31:10.815607Z helsingborg-roda-kvarn-001: Application popcorn-application is removed from the site, removing all service instances
<INFO> 2022-04-08 09:31:18.427237Z helsingborg-roda-kvarn-001: Application theater-room-manager is removed from the site, removing all service instances
<INFO> 2022-04-08 09:31:36.604859Z helsingborg-roda-kvarn-001: Received new application theater-room-manager version 1.0
<INFO> 2022-04-08 09:31:36.618056Z helsingborg-roda-kvarn-001: Initiating pull: parent:4848/b2/avassa-public/movie-theaters-demo/curtain-controller@sha256:cd9f8edadf866a2013a2 for application theater-room-manager
<INFO> 2022-04-08 09:31:36.618951Z helsingborg-roda-kvarn-001: Initiating pull: parent:4848/b2/avassa-public/movie-theaters-demo/digital-assets-manager@sha256:c5e6b34a08c7007bbe71 for application theater-room-manager
<INFO> 2022-04-08 09:31:36.620328Z helsingborg-roda-kvarn-001: Initiating pull: parent:4848/b2/avassa-public/movie-theaters-demo/projector-operations@sha256:166fb4808d6844b77dc6 for application theater-room-manager
<INFO> 2022-04-08 09:31:36.678472Z helsingborg-roda-kvarn-001: Successful pull: parent:4848/b2/avassa-public/movie-theaters-demo/projector-operations@sha256:166fb4808d6844b77dc6
<INFO> 2022-04-08 09:31:36.686554Z helsingborg-roda-kvarn-001: Successful pull: parent:4848/b2/avassa-public/movie-theaters-demo/digital-assets-manager@sha256:c5e6b34a08c7007bbe71
<INFO> 2022-04-08 09:31:36.695040Z helsingborg-roda-kvarn-001: Successful pull: parent:4848/b2/avassa-public/movie-theaters-demo/curtain-controller@sha256:cd9f8edadf866a2013a2
<INFO> 2022-04-08 09:31:36.709042Z helsingborg-roda-kvarn-001: Schedule b2.theater-room-manager.curtain-controller-1 to helsingborg-roda-kvarn-001
<INFO> 2022-04-08 09:31:36.716726Z helsingborg-roda-kvarn-001: Schedule b2.theater-room-manager.theater-operations-1 to helsingborg-roda-kvarn-001
<INFO> 2022-04-08 09:31:36.726083Z helsingborg-roda-kvarn-001: Schedule b2.theater-room-manager.theater-operations-2 to helsingborg-roda-kvarn-001
<INFO> 2022-04-08 09:31:36.738384Z helsingborg-roda-kvarn-001: Schedule b2.theater-room-manager.theater-operations-3 to helsingborg-roda-kvarn-001
<INFO> 2022-04-08 09:31:36.750464Z helsingborg-roda-kvarn-001: Schedule b2.theater-room-manager.theater-operations-4 to helsingborg-roda-kvarn-001
stefan@wallan-avassa supctl %
For each host on a site, you can get host metrics for CPU, disc, etc.
$ ./supctl do --site helsingborg-roda-kvarn volga topics system:host-metrics consume --payload-only
{
"event": "host-metrics",
"occurred-at": "2022-04-08T11:37:28.576Z",
"id": "de17b1d7-24ea-4a07-8d3f-8ffb1d53cddf",
"tenant": "sys",
"source": "host-metrics",
"data": {
"site": "helsingborg-roda-kvarn",
"hostname": "helsingborg-roda-kvarn-001",
"memory": {
"total": "986292224",
"free": "164163584",
"available": "464572416"
},
"loadavg": {
"avg1": "0.00",
"avg5": "0.01",
"avg15": "0.00",
"running": "2",
"total": "412"
},
"disk": [
{
"filesystem": "overlay",
"type": "overlay",
"size": "8376300",
"used": "3203660",
"free": "5172640",
"percentage-used": "39",
"mount": "/"
},
DNS features
For applications, with ingress-enabled services, DNS entries are automatically added to the Edge Enforcers DNS server. In previous releases, this was available only internally for the applications at the edge so they could do service discovery. From now on, the DNS entries are reachable from the outside. This means that users can point their external DNS server to the edge enforcer to resolve application IP addresses from outside the Avassa system.
The DNS address scheme is highly configurable, but generally, a site’s DNS entries will be exposed as <tenant-name>.<site-name>.<top-domain>
.
Then applications running on that site will be exposed as <service-name>.<application-name>.<tenant-name>.<site-name>.<top-domain>
.
So if you have a tenant called acme-inc
, a site called stockholm
, and a web application with a wordpress service, the WordPress service would be resolvable at wordpress.web-application.acme-inc.stockholm.avassa.net
$ supctl show --site stockholm dns
zones:
- name: default
domain: acme-inc.stockholm.avassa.net
records:
- rr: wordpress.web-application 15 IN A 192.168.8.170
- rr: wordpress-1.web-application 15 IN A 192.168.8.170
To configure specific DNS naming schemes you define that as part of your application services, in the site-dns-records
portion.
You can read more in our documentation on the Avassa application networking.
Logging export
As outlined above, the Avassa system embeds a streaming service, “Volga”. This event bus manages both Avassa metrics and logs as well as application-specific events. It is likely that you would like to publish them into tools like Cloudwatch, Elasticsearch, Kafka, etc. In order to enable that we have published an input module to fluentbit. Fluentbit is a general-purpose logging and metrics processor and forwarder. It has output plugins for most used logging services. The Avassa fluentbit input module is available as open source.