skip to Main Content

Alex Leong

Software engineer at Buoyant

Version 0.6.0 of Linkerd and namerd were released today! We wanted to take the opportunity in this release to bring more consistency and uniformity to our config files. Unfortunately, this means making non-backwards compatible changes. In this post, we describe how to update your config files to work with 0.6.0.


Linkerd and namerd use a plugin system where plugins are identified in config files by the kind property. We’ve renamed the kinds of our plugins to follow a consistent pattern: <organization>.<plugin name>. We use io.l5d as the organization for Linkerd’s built-in plugins. For example, the kind of the etcd storage plugin changed to io.l5d.etcd.

You will need to update the kind properties in your configs to their new values. A full list of the kind name changes is below. You can always find more information about plugins in the Linkerd config docs.


Certain plugins have been marked as experimental. While these plugins definitely work, they have not yet been tested at scale so we can’t be sure how they will perform in production environments. In order to use these plugins, you’ll need to acknowledge their experimental status by setting the experimental: true property on the plugin’s config. For example:

If a plugin is experimental, this will be indicated in the Linkerd config docs. A full list of the currently experimental plugins is below:

  • namers
    • io.l5d.consul
    • io.l5d.k8s
    • io.l5d.marathon
  • storage
    • io.l5d.k8s
    • io.l5d.zk
    • io.l5d.etcd


Namers match on concrete names and bind them to physical addresses (for a fuller explanation of this, see: ). If a path begins with /$, that indicates that it is a concrete name and that the classpath should be searched for a namer to use. For example, /$/inet/ searches the classpath for a namer called inet and uses it to bind this path.

In 0.6.0 we added a similar indicator for concrete names that should be bound by namers specified in the config file. If a path begins with /#, that indicates that it is a concrete name and a namer from the config file should be used. The result is that dtabs are more readable because it is more obvious which paths can be handled by namers (those starting with /$ or /#) and which require further processing by the dtab entries.

This means that all dtab entries that refer to a namer prefix need to be updated to begin with /#. For example, the entry

would need to be changed to

Any path beginning with /#/io.l5d.fs means that this is a concrete name and the io.l5d.fs namer should be used to bind it.


To make the way that ZooKeeper hosts are addressed more consistent, the ZooKeeper dtab storage plugin config now requires ZooKeeper addresses be specified as follows:


If you have installed namerd via the official DC/OS universe packages, and are using the io.l5d.zk storage plugin, you will need to update any dtabs referencing /io.l5d.marathon. This should be done in conjunction with upgrading Linkerd and namerd DC/OS packages from pre-0.6.0 to 0.6.0 or higher.

Specifically, change lines like this:

to this:

To update namerd via namerctl, run the following commands:


If you run into any difficulties with this upgrade, or just want to chat, join us in the Linkerd Slack channel!