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 EMERGENCYALERTCRITICALERRORWARNINGNOTICEINFODEBUG.

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.